Google App EngineのJRubyでTwitter Botを作るつもりだったんだけど、Twitterライブラリ関連でうまくできなかったので、環境を変えてHerokuでやってみることにした。
Heroku | Ruby Cloud Platform as a Service
Herokuでは無料プランだとcronを1日1回しか使えない^1ので、あまりTwitter Botには向いてないと思うんだけど、とりあえずデプロイが簡単なのと、JRubyのような互換性とかに悩まされることはないので、入門には向いているかもしれない。最終的には、超低機能Twitter Botの完成まで持って行きたい。
今回はHeroku上にHello worldと表示するだけの準備~デプロイまでの最低限の流れ。この記事での完成形はこれ。
環境
まず前提として以下の2つがあって、
今回利用するRuby環境はこんなかんじ。RVMを利用している。
- Ruby 1.8.7 p330
- Rack 1.2.1
- Bundler 1.0.7
- Heroku 1.17.0
- Sinatra 1.1.2
- Shotgun 0.8
インストール
RackとBundlerとHerokuとSinatraが必要なので、それらをインストールする。
$ gem install rack bundler heroku sinatra
必須ではないけど、Sinatraアプリのローカルプレビューで便利なのでShotgunをインストールする。名前かっこいい。
$ gem install shotgun
Heroku用プロジェクトを作成
フォルダを作って、Gitリポジトリを作成する。Herokuを使う上でGitは必須になる。
$ mkdir heroku-hello-world
$ cd heroku-hello-world
$ git init
heroku
コマンドを使ってHeroku用アプリをHeroku上に作成する。
$ heroku create heroku-hello-world
希望する名前を指定すると、それが使用可能ならサブドメイン名になる。
もし、
No ssh public key found in /Users/ruedap/.ssh/id_[rd]sa.pub. You may want to specify the full path to the keyfile.
と出た場合は、
$ git gui
でGUIなGitを起動して、ヘルプメニューから「SSHキーを表示」を選んで、「鍵を生成」ボタンを押してパスフレーズを入力。鍵が生成されてからもう一度、
$ heroku create heroku-hello-world
すると、http://heroku-hello-world.heroku.com/にアクセスできるようになり、Herokuの管理画面にも新しいアプリが生成されているはず。これで下準備が完了。
各種ファイルを作成
プロジェクトフォルダ直下に3つのファイルを作成する。
$ tree
.
├── Gemfile
├── app.rb
└── config.ru
0 directories, 3 files
まず、Bundler用のGemfile
ファイルを作成する。
source :rubygems
gem 'sinatra'
次に、Rack用のconfig.ru
ファイルを作成する。
require 'app'
run Sinatra::Application
最後に、Sinatraの処理を記述するapp.rb
ファイルを作成する。
require 'rubygems'
require 'sinatra'
get '/' do
'HerokuでSinatraを使ってHello world!'
end
ローカルプレビュー
Shotgunを使ってローカルで確認する。^2
$ shotgun -O app.rb
shotgun
コマンドに-O
オプションをつけると、サーバー起動後に自動的にブラウザで http://127.0.0.1:9393/ を開いてくれる。便利。「HerokuでSinatraを使ってHello world!」と表示されればローカルでの準備は完了。
bundle
デプロイに向けて、まず利用するgemの仕様書を整える儀式。
$ bundle install
Gemfile.lock
が生成されれば完了。
commit
コミット前に、ローカルでは最終的にこんな配置になっていればOK。
$ tree
.
├── Gemfile
├── Gemfile.lock
├── app.rb
└── config.ru
0 directories, 4 files
でコミットする。
$ git add .
$ git commit -m 'heroku hello world!'
デプロイ
$ git push heroku master
でデプロイされる。ちょうかんたん。
$ heroku open
open
すると、http://heroku-hello-world.heroku.com/をブラウザで開いてくれるので、そこに「HerokuでSinatraを使ってHello world!」と表示されていればおk。基本的な流れは以上で終わり。
以降の実際のアプリ開発は、Shotgunでローカルプレビュー環境を起動しておいて、app.rb
にアプリに追加したい機能を記述してはブラウザで確認する、を繰り返す。デプロイ前には、利用するgemが追加されたならそれをGemfile
に追加してbundle install
しなおして、gitでadd, commit, pushする。で良いはず。このあとのライブラリ周りなどでハマらないことを祈りつつ、続きは次回。