🐙

Check! GitHub auto-merge は "プルリクエストのブロックが解消されたとき" に自動でマージさせる機能

2022/05/06に公開

Prologue

こんにちは、 @dz_ こと、大平かづみです。

GitHub には "auto-merge" という、プルリクエストの条件が満たされれば自動的にマージしてくれる機能があります。GitHub のリポジトリの設定にある Allow auto-merge を有効にすると、利用を許可することができます。

GitHub リポジトリ設定の Allow auto-merge 設定の項目
GitHub リポジトリ設定の Allow auto-merge 設定の項目

https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request

といっても、どんな条件の場合に利用できるのか?

設定から利用を許可してもよくわからなかったので、本腰を入れて実際に確認してみました🤓

auto-merge の利用シーン

auto-merge は、前述のようにリポジトリの設定で Allow auto-merge を有効にするだけでは、真価を発揮できません。 auto-merge は、Branch protection rules (ブランチ保護ルール)と組み合わせて利用します。

Branch protection rules は、その名の通りブランチを保護するための機能で、保護のためのルールを指定することができます。

https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches

そのルールのうち、"Require ... before merging" というマージする前に条件を課すルールがあり、この条件が満たされない間は "プルリクエストのマージが block されている状態(マージできない)" になります。(ルールについては、後述参照)

プルリクエストに block 要因がない場合は、とくに待つ必要もなくマージできるので auto-merge の出番はありません。

しかし、block が発生した場合、初期状態(auto-merge の利用が許可されていない)では、block が解消されたあとのプルリクエストを誰かが手動でマージしなければなりません。

そこで、auto-merge の利用を許可していると、プルリクエストで block が発生したときに Enable auto-merge というボタンが表示されるので、そのボタンでそのプルリクエストに対する auto-merge を有効にしておくことができます。すると、block が解消されたタイミングで自動的にマージさせることができるのです。

auto-merge を有効にしておけば、レビュアーが block 要因が解消するまで都度様子を伺ったり、レビューイやほかの開発者がそのプルリクエストが誰かにマージされるのを待つ必要がなくなります。

なお、auto-merge を有効にできるのは、write 以上の権限を持つユーザーのみです。

利用方法

キャプチャを交えて利用方法をおさらいしましょう。

auto-merge の利用を許可しておく

まず、リポジトリの設定の General を開き、Allow auto-merge にチェックを入れ、利用を許可しておきます。

GitHub リポジトリ設定で Allow auto-merge の設定を有効化する
GitHub リポジトリ設定で Allow auto-merge の設定を有効化する

Branch protection rules を設定する

そして、リポジトリの設定の Branches を開き、 Branch protection rulesAdd rule ボタンから、保護ルールを設定します。関連するルールについては後述をご参考ください。

GitHub リポジトリ設定で branch protection rule を追加する
GitHub リポジトリ設定で branch protection rule を追加する

block が発生したプルリクエストで、auto-merge を有効化する

プルリクエストで block が発生すると、 Enable auto-merge というボタンが表示されます。適宜マージ方法を選択し、ボタンを選択します。

プルリクエストで auto-merge を行う際のマージ方法を選択する
プルリクエストで auto-merge を行う際のマージ方法を選択する

ボタンを選択し auto-merge を有効化する
ボタンを選択し auto-merge を有効化する

マージする際のコミットメッセージの確認・編集をし、Confirm auto-merge ボタンを選択して有効化を実行します。

コミットメッセージを確認し、Confirm auto-merge ボタンを選択して実行する
コミットメッセージを確認し、Confirm auto-merge ボタンを選択して実行する

これで、そのプルリクエストに対する auto-merge を有効にすることができました。

有効化された auto-merge

これで、block を解消すれば自動的にマージされます👍

付録: プルリクエストをマージしたタイミングで作業ブランチを自動的に削除する設定

リポジトリ設定の Automatically delete head branches を有効にしておくと、プルリクエストをマージしたタイミングで作業ブランチを自動的に削除してくれるので、併せて設定しておくと便利です。

削除したブランチはリストア可能です。

付録: マージ前に条件を付与する Branch protection rules

現時点(2022年5月時点)で、Branch protection rules でマージする前の条件を付与するルールは下記の通りです。

  • Require a pull request before merging (マージするには、プルリクエストの作成を必須とする)
    • Require approvals (指定された個数の approval (承認) を必須とする)
  • Require status checks to pass before merging (マージするには、ステータスのチェックが成功している必要がある)
  • Require conversation resolution before merging (マージするには、プルリクエストの全てのコメントが resolve (解決) されている必要がある)
  • Require deployments to succeed before merging (マージするには、デプロイメントが成功している必要がある)

詳しくは、ドキュメントをご参照ください。

Epilogue

auto-merge は以前から存在は知っていたものの、どのタイミングで使えるのか疑問だったので確認してみました。

ひとりで作業しているケースでも便利そうです。今後は便利に使っていこ~💡

Discussion