オープンソース万歳!でもたまにはコードを隠しておきたいこともありますよね。
というわけで、HerokuへRubyのコードをデプロイするときに依存ライブラリとしてGitHubのプライベートレポジトリからコードを持って来ましょう。GitHubでアクセストークンを作って、Herokuアプリケーションに設定してデプロイします。トークンを参照するために、buildpackをひとつ挟みます。
この記事はTerence Leeによる『Setting Up Private GitHub Repos with Bundler on Heroku』を元にしています。
トークンの作成
GitHubにログインして、https://github.com/settings/tokens から「Generate new token」をクリックしてトークンを作成します。プライベートレポジトリをcloneするには、「repo」のみをチェックしてあれば充分です。「Generate token」クリックするとトークンが表示されるので、クリップボードにコピーしてください。
ローカルにトークンを設定する
デプロイには必須ではないですが、ローカルにbundle install
するときに便利かも。~/.netrc
に下記の3行を追加しておくと、毎回パスワードを入力する必要がなくなります。
machine github.com
login <アカウントのメールアドレス>
password <ここにトークンをペーストする>
Herokuアプリケーションにトークンを設定する
クリップボードにトークンがあるうちに、Config varにも覚えさせておきましょう。
$ heroku config:set GITHUB_AUTH_TOKEN=<ここにトークンをペーストする> -a <アプリ名>
Buildpackを設定してこのトークンを利用してデプロイ時に参照してもらうようにします。 (このbuildpackはHerokuが公式にサポートしているものではありません。ごめんなさい。)
$ heroku buildpacks:add --index 1 https://github.com/timshadel/heroku-buildpack-github-netrc.git
開発する
そうそう、この記事はRubyKaigi 2015の会場からお送りしています。
Gemfile
には、レポジトリのhttpsで始まるURLを指定しましょう。
gem "プライベートなgem", git: "https://github.com/アカウント名/レポジトリ名.git"
Gemfile.lock
も更新しておきます。
$ bundle install --path=vendor/bundle
$ git add Gemfile Gemfile.lock
$ git commit
もちろんコードの変更もcommitしてくださいね。
Herokuにデプロイする
うまくいきますように。
$ git push heroku master
この記事は、Heroku Advent Calendar 2015の12月11日の記事としてお送りしました。