無料のPaaS、HerokuでPlay frameworkを使ったWebアプリケーションを動かす

2012.01.14

Herokuとは

無料のPaaS環境といえば、Google App Engine(以下GAE)が有名ですが、GAE独自のAPIや制限があるなど、
通常のWebアプリケーションと少々勝手が違います。
自動スケールなどのメリットはあるのですが、デモ用Webアプリを外からアクセスできるようにしたいなどの
ちょっとした要件には対応がし辛いところがあります。そんなとき便利なのが、今回ご紹介するHerokuです。

HerokuはアメリカのPaaSベンダーで、2011年にRubyのまつもとゆきひろ氏がチーフアーキテクトに就任したことでもニュースになりました。
このHerokuは元々Ruby(RoR)のクラウドプラットフォームでしたが、最近は対応プラットフォームをどんどん拡大し、
現在はRuby/Clojure/Python/Java/JavaScript(node.js)/Scalaに対応しています。 Herokuの特徴は以下のとおりです。

  • 基本無料で使用できる(拡張機能で課金)
  • Gitをつかってデプロイ
  • ノンベンダーロックイン

今回はHerokuのアカウント取得からデプロイまでやってみます。 なお、今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • play framework : 1.2.4
  • Git : 1.7.4.4

セットアップ

まずは各種登録など。

1.Herokuでアカウント登録

まずはHerokuでアカウントを登録します。
Sign upボタンを押下してメールアドレスを入力します。
メールが送られてくるので、リンクをクリックしてパスワードを設定し、登録を完了させましょう。

2.toolbeltをインストール

Getting Started with HerokuのStep 2: Install the Heroku ToolbeltからToolbeltをダウンロードして、インストール。
インストールが完了すると、コンソールでherokuコマンドが使用できます。

3.ログインと鍵作成

ssh-keygenで鍵を生成し、heroku loginコマンドを実行します。
※すでにssh鍵を作成している場合、heroku login時にどの鍵を使用するか選択します

%ssh-keygen -t rsa      
%heroku login                                                         
Enter your Heroku credentials.
Email: <メールアドレス>
Password: <パスワード>

鍵ファイルのパーミッションは600にしておかないとおこられるので、chmod 600 <鍵ファイル>としておきましょう。
また、heroku用のkeyの名前がデフォルトでない場合、~/.ssh/configファイルに下記ような指定をしてください。

Host heroku.com
User git
port 22
Hostname heroku.com
IdentityFile <Heroku用に作成したプライベートキーファイル>
TCPKeepAlive yes
IdentitiesOnly yes 

4.アプリケーション作成とデプロイ

今回はplay frameworkを使用してサンプルアプリを作成しましょう。
プロジェクトを作成ます。

%play new play-heroku                                                 
%cd play-heroku/

次に、Herokuにアップロードしたファイルをどのように起動するかを記述したProcfileと呼ばれるファイルを
play-herokuディレクトリ直下に作成します。
このファイルはforeman(アプリケーションのプロセスマネージャ)の設定ファイルで、ここに起動スクリプトを記述します。

web: play run --http.port=$PORT $PLAY_OPTS

play-herokuディレクトリでgit initし、ステージングとコミットします。

%git init                                                 
Initialized empty Git repository in /Users/play-heroku/.git/
%git add .                                               
%git commit -m "init play-heroku"                         
[master (root-commit) 8e72a98] init play-heroku
・・・

アプリケーションの準備ができたので、Cedar Stackを作成します。

%heroku create --stack cedar                              
Creating xxxx-yyyyy-0000... done, stack is cedar
http://xxxx-yyyyy-0000.herokuapp.com/ | git@heroku.com:blazing-window-0000.git
Git remote heroku added

xxxx-yyyyy-0000は作成したアプリケーションのサブドメイン部分になります。

ではpushして動作を確認してみましょう。

%git push heroku master                                   
・・・・
-----> Heroku receiving push
-----> Play! app detected
-----> WARNING: Play! version not specified in dependencies.yml. Default version: 1.2.4 being used....
-----> Installing ivysettings.xml..... done
-----> Building Play! application...
-----> Launching... done, v6
       http://xxxx-yyyyy-0000.herokuapp.com deployed to Heroku
       
To git@heroku.com:xxxx-yyyyy-0000.git
   8e72a98..3085d89  master -> master

play frameworkアプリケーションのデフォルト画面が表示されます。

まとめ

今回はHerokuでアプリケーションをデプロイして動かしてみました。
gitを使って簡単にWebアプリケーションを動かすことができたと思います。
今回作成したPlay framework(Java)以外でも基本的な流れは同じなので、お好みのプラットフォームで試してみてください。

参考サイトなど