14

Click here to load reader

Web技術勉強会 20120609

Embed Size (px)

DESCRIPTION

Web技術勉強会 20120609Heroku+Rubyで作ったアプリの紹介

Citation preview

Page 1: Web技術勉強会 20120609

Heroku+Rubyでアプリを作る

Web技術勉強会 2012/06/09

Ryuichi TANAKA(@mapserver2007)

Page 2: Web技術勉強会 20120609

きっかけ

• 個人的な趣味ですが、走るのが好きです

• runnet.jpというランナーのためのサイトがあり、ここでレース登録をします

• が、ほぼ即日で登録が埋まるため、全くレー• が、ほぼ即日で登録が埋まるため、全くレースに出られません…

• フルマラソン出たいんですけど…

Page 3: Web技術勉強会 20120609

解決策

• エントリー開始になったらすぐに自分に通知すればいいじゃない!

• どうやって?

• そんなニッチなツールなどない• そんなニッチなツールなどない

• そこでプログラミングですよ

Page 4: Web技術勉強会 20120609

技術的要件

• Herokuを使いたい

–ぼちぼちクラウド使うか

• Rubyが書きたくなった

– PHP飽きた、Javaはもういい– PHP飽きた、Javaはもういい

– JavaScriptでもいいけど、今回はRuby。ツール揃ってるし。

• 可能な限り自動化

– コマンド一発で全自動が理想

Page 5: Web技術勉強会 20120609

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個くらいある。プランによっては有料だったりもする。• クレジットカード登録しないと使えない(無料アドオンでも)

Page 6: Web技術勉強会 20120609

Herokuに向いている要件

• バッチ系処理は向いている

– Twitter botなど

• 逆にDB系は(個人では)おすすめしない

– 無料でやりたいor少額で運用したい場合は向かない– 無料でやりたいor少額で運用したい場合は向かない

– DBは5MBしか無料枠で使えない

• 複数プロセス(dyno)で運用するとかなり金がかかる

– 1hour/dynoは0.05$。つまり、Webとバッチを同時に同じプロジェクトで使うと0.05$x24hx30dayかかる。

Page 7: Web技術勉強会 20120609

Herokuを使う

• gem install heroku

• 主なコマンド– heroku create (プロジェクト名)

• プロジェクトを作る• プロジェクトを作る

– heroku ps

– heroku ps apps (プロジェクト名)

• プロセスを見る

– heroku logs

• ログを見る

Page 8: Web技術勉強会 20120609

HerokuでWebアプリを動かす

• RailsかRackアプリ(Sinatraなど)のみ

• Sinatraで作ってみた

–まずはいつもどおりに作る

• Gemfileに必要なgemを記述する• Gemfileに必要なgemを記述する

– bundler必須

– bundle install まで実行しておく

• Procfileというファイルを作る

– Herokuではこのファイルを起動する

Page 9: Web技術勉強会 20120609

Herokuへデプロイ

• githubへpush

– Herokuへはgithubを経由してデプロイされるため

• Herokuにプロジェクトを作成

– heroku create –stack cedar (プロジェクト名)– heroku create –stack cedar (プロジェクト名)

– --stack cedarオプションを付けないといけない

– Celadon CedarというRuby1.9.2が利用できるPaaS

–つまりRubyアプリはこのオプションが必須

Page 10: Web技術勉強会 20120609

Herokuへデプロイ

• git push heroku master

– githubからHerokuへpush

–そのままデプロイされる

• うまくいけば以下のURLでアクセス可能• うまくいけば以下のURLでアクセス可能

– http://(プロジェクト名).herokuapp.com

• バッチ系の場合はログで確認

Page 11: Web技術勉強会 20120609

自動化

• まずは普通にコードを書く

• 適当なタイミングでコミット(ローカル)

• Rakeを叩く(rakeで自動化)

– Rspecが実行される– Rspecが実行される• Rspecが通らない限り次に進めない

– Rspecが通ったらgithubへpush

– pushが完了したらHerokuへデプロイ

– Webページの場合、デプロイ後ブラウザを立ち上げる

Page 12: Web技術勉強会 20120609

作るアプリの概要

• runnet.jpからエントリ開始大会一覧を取得

–スクレイピング

• 取ってきたデータをGoogleカレンダーにマッピングング

• 定期実行

Page 13: Web技術勉強会 20120609

作成したアプリ

• EventCapture

– https://github.com/mapserver2007/EventCapture

• 定期実行はclockwork

– Herokuのcronは1日1回、有料でも1時間に1回– Herokuのcronは1日1回、有料でも1時間に1回

– clockworkは最短で1秒に1回実行可能

– gemなのでHerokuでもローカルでも使える

• デモ

Page 14: Web技術勉強会 20120609

感想

• Herokuはすごい簡単– だが、Ruby初心者にはちょっときついか?– ややハマりどころもあった(すぐ解決できたが)

• github楽すぎ– 少なくとも個人開発ではSubversionより楽ということがわかった。– Herokuとの連携がすばらしくシンプル(コマンド一発)– Herokuとの連携がすばらしくシンプル(コマンド一発)

• Rubyやっぱ最高だろ– gem最強– Herokuとの相性がやばい

• bundlerあればなんでもできる

• Rakeで自動化気持よすぎ– Antよりもロジックが楽にかける