Help us understand the problem. What is going on with this article?

Heroku にある Git リポジトリを楽に remote に設定する

More than 5 years have passed since last update.

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

すると,今度は origingit@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 の方

https://github.com/heroku/heroku/blob/2b67489173464420248c61c88ee98ee628067988/lib/heroku/command/git.rb#L31

  • git:remote の方

https://github.com/heroku/heroku/blob/2b67489173464420248c61c88ee98ee628067988/lib/heroku/helpers.rb#L110

…普通に git コマンドの文字列を作って実行しているだけですね.安心です.

ここのソースコードを読んで勉強するべきなのは,むしろ git:clone, git:remoteheroku コマンドの引数で与えると,どのようにして関数を呼び出すところに到達するか,だと思います.

バージョン情報

今回確認に使った環境・ツールのバージョンは以下の通りです.

  • Ruby 1.9.3-p194
  • Heroku Toolbelt 2.33.6
  • OS
    • Ubuntu 12.04 amd64 Desktop
    • Mac OS X 10.7.5

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away