MergeCat: CIがgreenになったらPull-Requestをマージ

GitHubを使ってPull-Request駆動で開発していると、CIに待たされることがよくあります。

  • レビューは一瞬で通る軽微な変更をPull-Requestにした時
  • マージする前にrebaseしてコミットを整理した時
  • リリースの為にdevelopからmasterへのPull-Requestをした時

このようなケースでは、CIが通り次第Pull-Requestをマージしたいでしょう。そんな時に人間がCIが通るのを待つのは時間の無駄です。5分、10分かかるテストをただ待っていても何も良いことはありません。
かと言ってPull-Requestを放置していると、そのPull-Requestの存在を人間は忘れてしまいます。運が良ければ1時間後にそのPull-Requestの存在を思い出して、マージできるかもしれません。運が悪いとPull-Requestが他の変更とコンフリクトして、もう一度CIを待つハメになるかもしれません。

そんな時は、MergeCatという猫の手を借りましょう。

MergeCatとは

MergeCatはCIを待つ人間の代わりをするBotです。つまり、設定されているCIのステータスが全てgreenになった時に、そのPull-Requestを自動でマージします。

MergeCatの飼い方

MergeCatを“飼う”には、MergeCatをあなたのGitHubリポジトリ、アカウント、オーガニゼーションのどれかにインストールする必要があります。 https://www.mergecat.com/ にアクセスして、「Install the apps to your GitHub account!」をクリックするとGitHubの画面に飛ぶので、そこからMergeCatをインストールします。

MergeCatをインストールすると、対象のリポジトリ(ユーザー・オーガニゼーションを選んだ場合は、そのユーザー・オーガニゼーションの全てのリポジトリ)に「MergeCat」「SquashCat」「RebaseCat」という3つのラベルが追加されます。

MergeCatの手を借りるには

では、実際にMergeCatの手を借りてみましょう。MergeCatの手を借りるのは簡単です。CIが通ったらマージしたいPull-Requestに、「MergeCat」ラベルをつけるだけです。MergeCatは、「MergeCat」ラベルがついたPull-Requestを監視し、greenになったらそれをマージします。

Pull-RequestをマージするMergeCat

応用的な使い方

MergeCatはPull-Requestのマージと同時に、いらなくなったブランチを削除します(なおGitHub APIの制約により、fork型の開発の場合はブランチを削除しません)。そのためゴミブランチがたまり続けることを回避できます。

また、「SquashCat」「RebaseCat」ラベルはそれぞれmergeの代わりにsquash, rebaseを行います。ですのでコミットをsquashしてマージしたい、といったケースにもMergeCatは対応しています。もしこれらの機能を使用しない場合、単に使用しないラベルを削除してください。
なおsquash, rebaseを使用する場合にはGitHub側で別途設定が必要です。

ちなみにMergeCatはGitHub Appsという仕組みを使って作られています。技術的な詳細は省略しますが、この仕組みにはGitHub APIの権限を制限できるメリットがあります。この制限によってMergeCatは明示的に許可されたリポジトリのみにAPIの権限を持つため、安心してMergeCatを導入することができます。

最後に

MergeCatは、あなたがCIの待ち時間で非同期的に作業するための手助けをしてくれるでしょう。私の職場ではMergeCatを既に飼い始めていますが、開発が少し快適になったように感じています。

なお、MergeCatはsoutaroさんのShipItというプログラムを、Webアプリケーションとして実装したものとなっています。この場を借りてsoutaroさんに感謝の意を表します。

もしMergeCatが気になったら、試しに飼い始めてみてください。 https://www.mergecat.com

Like what you read? Give Masataka Pocke Kuwabara a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.