Heroku Advent Calendar (がもしもあったらそちら) に投稿するような内容だと思いますが,無かったので Git ネタということで.
複数マシンから 1 つの Heroku で動くアプリを開発する
まず,何かしらのアプリをある 1 台のマシン (例えばデスクトップ PC) で作成します.
それを Git リポジトリとして Heroku のサーバに push します.それにより deploy が行えるのが Heroku の大きな特徴の一つだと言えます.
さて,最初に push する人は,Heroku 上にアプリを作る作業を行いますから,
heroku create APPNAME
を行うと思います.するとこのコマンドが自動的にリモートリポジトリとして heroku
という名前で git@heroku.com:APPNAME.git
を登録してくれます.なので,この後は
git push heroku master
としてやるだけで deploy が出来るのですね.この辺りは Heroku 入門的なチュートリアルでよく見るところだと思います.
ここで,別のマシン (例えばノート PC) でこのアプリの開発と deploy を引き続き行いたくなったとします.
まず,先ほどのマシンを参照するなり Github や Bitbucket や自前の gitosis 等を参照したりするなりして,リポジトリを clone してくると思います.すると,リモートリポジトリとして heroku
が登録されていません.なので
git remote add heroku git@heroku.com:APPNAME.git
をする必要があります.これが面倒だからと言って
git clone git@heroku.com:APPNAME.git
すると,今度は origin
が git@heroku.com:APPNAME.git
になって何だか変な気分です.
いちいちリポジトリの URI を打ち込むのは面倒だ
今まで自分はずっと git remote add heroku ...
をしていたのですが,先日こんなことをしなくてもいいんだと heroku help
を見ていて気付きました.
サブコマンド git
です.
heroku git:remote --app APPNAME
Github なり何なりから clone してきたリポジトリ内で,このコマンドを走らせるだけでリモートリポジトリ heroku
が登録されます.
また,Heroku からまず第一に clone するのであれば,
heroku git:clone APPNAME
すると,APPNAME
ディレクトリが作られそれがリポジトリになっていて,やはりリモートリポジトリ heroku
が登録されています.origin
はありません.
これは楽でいいですね.
heroku git のその他機能
- clone するときにディレクトリ名を変えたい →
heroku git:clone APPNAME DIRNAME
- リモートリポジトリ名を heroku 以外 (例えば staging) にしたい →
heroku git:remote APPNAME -r staging
まぁ,
heroku help git
heroku help git:remote
heroku help git:clone
を見れば大体分かります.
実装はどうなっているのか
いちいち git remote add heroku ...
しなくてよくなったのはいいですが,実際このコマンドはどうやって実現されているのでしょうか?
- git:clone の方
- git:remote の方
…普通に git コマンドの文字列を作って実行しているだけですね.安心です.
ここのソースコードを読んで勉強するべきなのは,むしろ git:clone
, git:remote
を heroku
コマンドの引数で与えると,どのようにして関数を呼び出すところに到達するか,だと思います.
バージョン情報
今回確認に使った環境・ツールのバージョンは以下の通りです.
- Ruby 1.9.3-p194
- Heroku Toolbelt 2.33.6
- OS
- Ubuntu 12.04 amd64 Desktop
- Mac OS X 10.7.5