このエントリはGit Advent Calendar / Jun.の5日目です(遅れてすみません)。
Advent Calendar参加者でネタ探しに困っている方は、最後に質問を載せたので回答いただけるとありがたいです。
###herokuを一言で言うと
リリース周りの設定とスケールアウトが簡単なレンタルサーバー
###どれくらい簡単なの?
%git push heroku master
#一度herokuの設定をしたらこれだけでリリースができる
%heroku scale web=2
#これでフロントの処理台数を2台にスケールアウトする
#フロント1台だけなら無料でつかえる
###普通どれくらい大変なの?
「普通」のレベルにもよりますが、レンタルサーバーの設定、OSの設定、apacheの設定、言語のインストール、フレームワークのインストール、memcachedの設定、ライブラリのインストール、ファイアウォールの設定…etcなどがありますが、pushするだけでこのあたりをよしなにしてくれます。herokuで使用できる言語は、ruby,node.js,clojure,java,python,scalaです。
##使い方
#おとなの都合でscala + playです
#copypastableを重視して、コマンド先頭の$や%は省略しています。
###0.herokuからherokuのCLIをダウンロード、インストールする
自分は以前gemでインストールした古いバージョンのCLIが残っていたりしてハマりました。
下記のコマンドでherokuのCLIのバージョンをあげることができます。
heroku update
###1.プロジェクトのルートディレクトリに設定ファイルを作成する
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS}
#このファイルの内容は、選択した言語等によって変わります
#今回はscala + playです。
###2.おさらい
git init
git add .
git commit -m "initial commit"
###3.Heroku側にstackを作成しつつgit remote addする
heroku create -s cedar
ここでいうstackはstackとqueueのstackではありません。単なる積み重ね的な意味のstackです。自分は初めてこれを聞いたときにとてもモヤモヤして、herokuのどこにstack的な振る舞いがあるのか悩みました。stackは一度作成されると半永久的に残るので、同じプロジェクトに修正を加えてpushする際は、この3番の工程は必要ありません。それと、このcedarというのは、そのstackの種類で、他にもbamboo-mriというのもあります。stackの種類によって、使える言語が異なります。cedar stackならほとんどの言語に対応しています(対応していないのは古いruby)。cedarという一般的でない単語が出たのでここでも困惑しました。英語圏だと一般的なんでしょうか。CUI的なものでもインターフェイスのわかりやすさは重要だと思いました。
また、このコマンドによって、プロジェクトのgitリポジトリのremoteにherokuという名前でホスト先の.gitがaddされます。
git remote -v
heroku git@heroku.com:test.git (fetch)
heroku git@heroku.com:test.git (push)
###4.herokuにpushし、リリースする
git push heroku master
heroku scale web=1
heroku open
git push heroku masterによって、先ほど3番で作成したstackにpushして完了です。heroku scaleは始めに必要(だったはず)ですが、それ以降は処理台数を変更するとき以外は使いません。heroku openによって、pushしたWebアプリをブラウザで開きます。
###質問
自分は、普段mercurialを使っていて、実はgitの長所がよくわかりません。gitのエコシステム(heroku,github)は素晴らしいと思うのですが、git自体はmercurialよりも使いにくい印象(工程が多い)で、エコシステムを利用するとき以外に使いどころがよくわからないので、両刀使いの方がいたらぜひ比較解説をお願いします(主に使い分けに重点を置きながら)。下記参考にしてください。
http://qiita.com/items/3d3503e427c0c51e9700