Railsでアプリを作ったら公開したくなるのが人情ですよね。
だけど、安いホスティングサーバとかだと、使える環境が限られていたり、セットアップが面倒だったり・・・必死こいてセットアップしても、本気で運用するとなると、そんな環境だと不安だらけだし・・・かといって、AmazonEC2で運用するだけの気合いもない。GAE/Jを使って、JRubyってのもな〜・・・
私もそんな感じでしたが、そんな折に、mat_akiに、Heroku(ハーオークーと読むらしい)を教えてもらいました。
実は、Herokuって、ずいぶん昔に話題になって、知っていたんですが、その時は、「WebブラウザでRailsアプリが開発できる〜」みたいな感じだったんですよね。それだとEmacsで良いよ。と思ってスルーしていたんですが・・・どうやら、サービスの定義?内容?が変ったようです。
今までのWebブラウザRails開発環境は、”Heroku Garden”というサービスになっています。
これが、Webブラウザ上だけで、Railsアプリケーションの開発ができるというサービスです。以前に話題になった旧”Heroku”ですね。これは、Emacs使いとしては、あまり興味がない。
で、”Heroku”の方は、なんと、Rubyのプラットフォーム運用サービスになっていました。
どんなサービスかというと、自分で作ったRubyのWebアプリケーションを運用(ホスティング)してくれるというものです。私はRailsアプリケーションしか試してないですが、Rackの上で動くフレームワーク(Sinatraとか)なら何でも動くようです。既に、25000本のアプリケーションが動いているらしいですね。
“Heroku”は、ソースコードをgitで管理していて、ローカルで開発したRailsアプリケーションを、”Heroku”のgitにプッシュするだけで、フックスクリプトが動いて、自動的にデプロイメントしてくれます。データベースも当然、準備された上にうまく隠蔽されています。”Heroku”の中にあるデータベースで、”rake db:migrate”などをするために、”Heroku”からコマンドラインのインタフェースが用意されています。
使っているテクノロジは、http://docs.heroku.com/technologies に書いてますね。
何はともあれ、試してみました。
かんたんな素のRailsアプリケーションを、”Heroku”で作ってみます。
目次
(0)”Heroku”にユーザ登録
なにはともあれ、”Heroku”にユーザ登録してないと話しになりません。無料なので、登録してしまいましょう。
(1)herokuコマンドをインストール
最初にローカルのPCから、”Heroku”を操作をするためのコマンドラインツールをインストールします。
$ sudo gem install heroku
Successfully installed heroku-0.8
1 gem installed
(2)Railsアプリケーションを作成
動かしたいRailsのアプリケーションを、おなじみのRailsコマンドで作成します。今回は、”heroku-app1″という名前で作ってみます。
$ rails heroku-app1
create
create app/controllers
create app/helpers
・・・
そのディレクトリに移っておきましょう。
$ cd heroku-app1
(3)gitで管理できるように準備
“Heroku”では、ソースコードのやりとりと管理は、gitでやってますので、まずはローカルのプロジェクトをgitで管理するようにします。(gitはインストールしてある想定です)
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "new app"
[master (root-commit)]: created cb2e9a2: "new app"
41 files changed, 8452 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 Rakefile
・・・
これで、ローカルのgitで初期化してコミットできました。とりあえず、これでローカル環境でバージョン管理していけます。
“git status”や、”git log”の結果が、以下の感じになってたら、うまくいってます。(名前とかハッシュ値は違うと思いますけど)
$ git status
# On branch master
nothing to commit (working directory clean)
$ git log
commit cb2e9a21e5c808173ddf6a19cea9c5edb9288b46
Author: Yoshihito Kuranuki
Date: Fri May 15 16:28:49 2009 +0900
new app
(4)”Heroku”でアプリケーションを作成
ローカルまではできたので、次は、”Heroku”側でアプリケーションを受け入れるところを用意します。ここで、コマンドラインのherokuを使います。
$ heroku create
Created http://vivid-flower-39.heroku.com/ | git@heroku.com:vivid-flower-39.git
Git remote heroku added
たしか、初めてやる場合は、”Heroku”で登録したユーザのメールアドレスやパスワードを確認されたと思います。
ここまでで、Webの”Heroku”の画面で、出来ていることが確認できます。
ログインして上記URLに行くと、以下のような感じになってるはずです。
「General Info」で、名前の変更や、協調作業をするユーザ等を登録することができます。
(5)”Heroku”にソースを送付(gitでプッシュ)
これで、ローカル環境のgitにRailsアプリケーションのソースが入っており、”Heroku”側にも受け皿ができるところまでいきました。いよいよ、ローカルから”Heroku”側に同期します。ここも当然、gitでpushです。”Heroku”のリモート情報は、既に自動的に編集されていますので、何も気にせずにできます。
$ git push heroku master
Counting objects: 60, done.
Compressing objects: 100% (54/54), done.
Writing objects: 100% (60/60), 79.03 KiB, done.
Total 60 (delta 10), reused 0 (delta 0)
-----> Heroku receiving push
-----> Rails app detected
Compiled slug size is 080K
-----> Launching.......... done
App deployed to Heroku
To git@heroku.com:vivid-flower-39.git
* [new branch] master -> master
これだけで、デプロイメント完了です。"Heroku"側では、gitでpushされて受け取ったらフックが動いて、自動的にデプロイメントまでしてくれるんです。なんて気が利いてる!!
さらに気が利いていることに、デプロイメントしてくれたアプリケーションもコマンド一つでアクセスできます。
$ heroku open
このコマンド打つと・・・Safariが立ち上がった!
なんと、herokuコマンドでブラウザが起動します。まぁ、あんまり使う機会はないかもしれないですけど、URL覚えてないので、最初は便利です。気が利いてるなぁ。
とりあえず、これで、Railsアプリケーションを動かすことができました。
ここから先は、ローカル環境でアプリケーションの開発をして、gitでpushしていくだけで運用に入ってくれます。デプロイメントを気にしなくて良いのは、すごく楽ですね。
マイグレーションも当然対応してますので、herokuコマンドを通じてrakeを実行したりしていけますし、Webからアプリケーション名を変更することで、使いやすいURLにすることもできます。ちょっとしたアプリケーションなら、これですぐにサービスインできるんです!
自動デプロイメントに、自動スケーリング、本当にすごい時代になりましたね。
こんな便利な"Heroku"ですが、5MBまでは、フリー(無料)で使えます。より安定的に、高負荷に耐えれるようなアプリケーションも稼働できるようにするために、先日ついに、有償版も開始されました。
http://blog.heroku.com/archives/2009/4/24/commercial_launch/
http://heroku.com/pricing
価格プランを見るとわかりますが、どうやら日本好きのようです。(Roninのイメージが間違ってる気がするけど)
"Heroku"こそ、Ruby版PaaSだ
クラウドコンピューティングのキーワードで、"SaaS"とか"HaaS"とか"PaaS"とかありますね。"SaaS"は、アプリケーションソフトウェアをサービスで提供するもので、うちの"SKIPaaS"がSaaSですね。"HaaS"は、ハードウェアをサービスで提供するもので、AmazonEC2がそれにあたります。"PaaS"は、プラットフォームをサービスで提供するもので、Google App Engine(GAE)がそれにあたりますね。先日、GAEがJavaに対応したと話題になりましたね。
この視点で考えたら、"Heroku"は、PaaSと言えますね。Ruby版のPaaSです。GAE/JavaでJRubyとか苦労してるくらいなら、"Heroku"を使って、さくっとアイデアを実現してみたら良いんじゃないでしょうか。