Click here to load reader
Upload
ryuichi-tanaka
View
1.013
Download
2
Embed Size (px)
DESCRIPTION
Web技術勉強会 20120609Heroku+Rubyで作ったアプリの紹介
Citation preview
Heroku+Rubyでアプリを作る
Web技術勉強会 2012/06/09
Ryuichi TANAKA(@mapserver2007)
きっかけ
• 個人的な趣味ですが、走るのが好きです
• runnet.jpというランナーのためのサイトがあり、ここでレース登録をします
• が、ほぼ即日で登録が埋まるため、全くレー• が、ほぼ即日で登録が埋まるため、全くレースに出られません…
• フルマラソン出たいんですけど…
解決策
• エントリー開始になったらすぐに自分に通知すればいいじゃない!
• どうやって?
• そんなニッチなツールなどない• そんなニッチなツールなどない
• そこでプログラミングですよ
技術的要件
• Herokuを使いたい
–ぼちぼちクラウド使うか
• Rubyが書きたくなった
– PHP飽きた、Javaはもういい– PHP飽きた、Javaはもういい
– JavaScriptでもいいけど、今回はRuby。ツール揃ってるし。
• 可能な限り自動化
– コマンド一発で全自動が理想
Herokuとは
• Herokuの特徴• Salesforce.comにより買収• ・RubyのためのPaaS(現在はJavaなども動作する)
• ・基本的に無料• ・dynosという単位(1dyno=1プロセス)で管理• ・月間750h/dynoまで無料• 31日ある月で744hなので1dynoなら無料ということ• ・Web、clockなどのdynoがあるWeb clock dyno
• WebとClockを同時に動かすと有料。Webとバッチを同時に動かせない。• ・1プロジェクトあたり750h/dynoまで無料• つまり複数プロジェクトでも無料で運用可能• ・github連携が必須• githubからチェックアウトしてきたプロジェクトをそのままデプロイに• 使用するため• ・DBはPostgreSQLで5MBまで無料• DBをまともに使おうとすると有料必至• ・アドオンが豊富• 50個くらいある。プランによっては有料だったりもする。• クレジットカード登録しないと使えない(無料アドオンでも)
Herokuに向いている要件
• バッチ系処理は向いている
– Twitter botなど
• 逆にDB系は(個人では)おすすめしない
– 無料でやりたいor少額で運用したい場合は向かない– 無料でやりたいor少額で運用したい場合は向かない
– DBは5MBしか無料枠で使えない
• 複数プロセス(dyno)で運用するとかなり金がかかる
– 1hour/dynoは0.05$。つまり、Webとバッチを同時に同じプロジェクトで使うと0.05$x24hx30dayかかる。
Herokuを使う
• gem install heroku
• 主なコマンド– heroku create (プロジェクト名)
• プロジェクトを作る• プロジェクトを作る
– heroku ps
– heroku ps apps (プロジェクト名)
• プロセスを見る
– heroku logs
• ログを見る
HerokuでWebアプリを動かす
• RailsかRackアプリ(Sinatraなど)のみ
• Sinatraで作ってみた
–まずはいつもどおりに作る
• Gemfileに必要なgemを記述する• Gemfileに必要なgemを記述する
– bundler必須
– bundle install まで実行しておく
• Procfileというファイルを作る
– Herokuではこのファイルを起動する
Herokuへデプロイ
• githubへpush
– Herokuへはgithubを経由してデプロイされるため
• Herokuにプロジェクトを作成
– heroku create –stack cedar (プロジェクト名)– heroku create –stack cedar (プロジェクト名)
– --stack cedarオプションを付けないといけない
– Celadon CedarというRuby1.9.2が利用できるPaaS
–つまりRubyアプリはこのオプションが必須
Herokuへデプロイ
• git push heroku master
– githubからHerokuへpush
–そのままデプロイされる
• うまくいけば以下のURLでアクセス可能• うまくいけば以下のURLでアクセス可能
– http://(プロジェクト名).herokuapp.com
• バッチ系の場合はログで確認
自動化
• まずは普通にコードを書く
• 適当なタイミングでコミット(ローカル)
• Rakeを叩く(rakeで自動化)
– Rspecが実行される– Rspecが実行される• Rspecが通らない限り次に進めない
– Rspecが通ったらgithubへpush
– pushが完了したらHerokuへデプロイ
– Webページの場合、デプロイ後ブラウザを立ち上げる
作るアプリの概要
• runnet.jpからエントリ開始大会一覧を取得
–スクレイピング
• 取ってきたデータをGoogleカレンダーにマッピングング
• 定期実行
作成したアプリ
• EventCapture
– https://github.com/mapserver2007/EventCapture
• 定期実行はclockwork
– Herokuのcronは1日1回、有料でも1時間に1回– Herokuのcronは1日1回、有料でも1時間に1回
– clockworkは最短で1秒に1回実行可能
– gemなのでHerokuでもローカルでも使える
• デモ
感想
• Herokuはすごい簡単– だが、Ruby初心者にはちょっときついか?– ややハマりどころもあった(すぐ解決できたが)
• github楽すぎ– 少なくとも個人開発ではSubversionより楽ということがわかった。– Herokuとの連携がすばらしくシンプル(コマンド一発)– Herokuとの連携がすばらしくシンプル(コマンド一発)
• Rubyやっぱ最高だろ– gem最強– Herokuとの相性がやばい
• bundlerあればなんでもできる
• Rakeで自動化気持よすぎ– Antよりもロジックが楽にかける