Railsでアプリを作ったら公開したくなるのが人情ですよね。

だけど、安いホスティングサーバとかだと、使える環境が限られていたり、セットアップが面倒だったり・・・必死こいてセットアップしても、本気で運用するとなると、そんな環境だと不安だらけだし・・・かといって、AmazonEC2で運用するだけの気合いもない。GAE/Jを使って、JRubyってのもな〜・・・

私もそんな感じでしたが、そんな折に、mat_akiに、Heroku(ハーオークーと読むらしい)を教えてもらいました。

実は、Herokuって、ずいぶん昔に話題になって、知っていたんですが、その時は、「WebブラウザでRailsアプリが開発できる〜」みたいな感じだったんですよね。それだとEmacsで良いよ。と思ってスルーしていたんですが・・・どうやら、サービスの定義?内容?が変ったようです。

今までのWebブラウザRails開発環境は、"Heroku Garden"というサービスになっています。

http://herokugarden.com/

これが、Webブラウザ上だけで、Railsアプリケーションの開発ができるというサービスです。以前に話題になった旧"Heroku"ですね。これは、Emacs使いとしては、あまり興味がない。

で、"Heroku"の方は、なんと、Rubyのプラットフォーム運用サービスになっていました。

https://heroku.com/

どんなサービスかというと、自分で作った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"にユーザ登録してないと話しになりません。無料なので、登録してしまいましょう。

https://heroku.com/

Heroku1.png

(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"の画面で、出来ていることが確認できます。

https://heroku.com/myapps

ログインして上記URLに行くと、以下のような感じになってるはずです。

Heroku2.png

「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が立ち上がった!

Heroku3.png

なんと、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のイメージが間違ってる気がするけど)

Heroku4.png

"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"を使って、さくっとアイデアを実現してみたら良いんじゃないでしょうか。