俺得な保存版記事です。設定するたびにやり方を思い出すのが面倒になり。

1. CircleCI の設定

GitHub の Personal access tokens のページで token を作成し、
CircleCI の Project Setting -> Environment variables に
GITHUB_ACCESS_TOKEN という名前で追加します。

CircleCI の URL は以下になります。

https://circleci.com/gh/{ユーザ名}/{リポジトリ名}/edit#env-vars

2. circle.yml の変更

このように circle.yml の deployment section を変更します。
https://github.com/masutaka/masutaka-29hours/commit/0ba9ef03348568baaa5cf271d4f6e41305f8fdfe

環境変数 BUNDLE_UPDATE が指定されていたら、
circleci-bundle-update-pr gem をインストールして、同コマンドを実行
しています。この環境変数は後述するトリガーが設定してきます。

circleci-bundle-update-pr コマンドでは以下が実行されます。

  1. bundle update を実行する
  2. Gemfile.lock に差分があれば、git commit し、GitHub のリモートブランチに git push する
  3. GitHub の Pull Request を作成する
  4. アップデートした Gem の差分へのリンクをコメントとして POST する

bundler もアップデートしているのは、1.10.0 から Gemfile.lock に追
記される BUNDLED WITH 対策のためです。

Ruby - BUNDLED WITH で Gemfile.lock が更新されてしまう件 - Qiita

bundler のアップデートに気づけるので、ローカルの bundler をアップ
デートしようかという気持ちになります。

3. トリガーの作成

最後に Heroku にトリガーアプリをデプロイします。やり方は簡単。
https://github.com/masutaka/ci-build-trigger の Heroku ボタンを
クリックするだけ。説明の通りに設定すれば迷わないはず。

現在の Heroku Scheduler の設定

そこそこ増えてきました。複数リポジトリを指定できるようなツールを作
ろうかしら…。

Fri 08:00 UTC awesome-github-feed
Fri 08:30 UTC masutaka-29hours
Fri 09:00 UTC masutaka-metrics
Fri 09:30 UTC masutaka.net
Fri 10:00 UTC server-masutaka.net

※ 業務でもいくつかのリポジトリで設定してます。

こんな Pull Request が作られる

継続的 bundle update のサンプル

CircleCI をお使いの皆さんは CI も設定済みでしょうから、この Pull
Request の作成をトリガーにして、当然 CI も実行されます。

テストが通ったことを表す緑の✓をクリックすれば、CircleCI の当該ペー
ジにジャンプします。warning や deprecated message が増えていないか
を必ず確認します。

なぜ継続的に bundle update するのか

継続してサービスを運用し続けるためには、使っている Gem をアップデー
トし続ける必要があります。

Gem が古いとセキュリティアップデートができなくなったり、使っている
サービスの仕様変更に置いて行かれる可能性があります。

これは始めてから気づいたことですが、自分が使っている Gem の変更を
キャッチアップしやすくなりました。半年に一回のアップデートでは変更
点が膨大になりますが、週に一度ならそれほどでもありません。

他の方法

http://tachikoma.io/ はもっとお手軽です。

ただし、現在はアップデートした Gem の差分へのリンクは分かりません。
時間や曜日を指定することも出来ないと思います。

あとがき

以下の記事をまとめてスリムにしたのがこの記事です。

  • CircleCIを使ってbundle updateを定期実行するHerokuアプリを作った [2015-01-25-1]
  • 継続的bundle updateを簡単に導入できるGemを作った [2015-03-03-1]

間違いなどあれば、下のコメント欄か @masutaka までお知らせください。

追記(2015-08-29):
YAPC::Asia Tokyo 2015 のセッションで紹介されました。ありがとうございます。
10:40 からです。

資料はこちら。25 ページ目です。
esa.io - 趣味から育てたWebサービスで生きていく // Speaker Deck

追記(2015-12-23):
@ppworks さんがより分かりやすいまとめ記事を書いて下さいました。
ありがとうございます!
Circle CIでbundle updateのPull Request作成を自動化する手順 - pblog

追記(2016-10-10):
今後はこちらの README.md をメンテナンスしていきます。