Check! GitHub auto-merge は "プルリクエストのブロックが解消されたとき" に自動でマージさせる機能
Prologue
こんにちは、 @dz_ こと、大平かづみです。
GitHub には "auto-merge" という、プルリクエストの条件が満たされれば自動的にマージしてくれる機能があります。GitHub のリポジトリの設定にある Allow auto-merge を有効にすると、利用を許可することができます。
GitHub リポジトリ設定の Allow auto-merge 設定の項目
といっても、どんな条件の場合に利用できるのか?
設定から利用を許可してもよくわからなかったので、本腰を入れて実際に確認してみました🤓
auto-merge の利用シーン
auto-merge は、前述のようにリポジトリの設定で Allow auto-merge を有効にするだけでは、真価を発揮できません。 auto-merge は、Branch protection rules (ブランチ保護ルール)と組み合わせて利用します。
Branch protection rules は、その名の通りブランチを保護するための機能で、保護のためのルールを指定することができます。
そのルールのうち、"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 の設定を有効化する
Branch protection rules を設定する
そして、リポジトリの設定の Branches を開き、 Branch protection rules の Add rule ボタンから、保護ルールを設定します。関連するルールについては後述をご参考ください。
GitHub リポジトリ設定で branch protection rule を追加する
block が発生したプルリクエストで、auto-merge を有効化する
プルリクエストで block が発生すると、 Enable auto-merge というボタンが表示されます。適宜マージ方法を選択し、ボタンを選択します。
プルリクエストで auto-merge を行う際のマージ方法を選択する
ボタンを選択し auto-merge を有効化する
マージする際のコミットメッセージの確認・編集をし、Confirm auto-merge ボタンを選択して有効化を実行します。
コミットメッセージを確認し、Confirm 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