GitHubとは、プログラミングコードのバージョンや変更履歴を管理したり、データを保存、共有したりすることができるサービスです。
会社やチーム内で開発を進める際、プログラムコードを共有したり、レビューしたりする際にGitHubを利用することも多く、GitHubはエンジニアにとって必須のサービスです。
今回は、GitHubのプルリクエストを自動でマージする方法について詳しく解説していきます。
プルリクエストとは?
GitHub上でのコードレビューやプロジェクトの進捗管理に使う、GitHubが提供している機能の一つがプルリクエストです。
プルリクエストとは、ローカルリポジトリで自分がおこなった変更処理をオリジナルのプログラミングコードに反映したい際に、オリジナルの権限を持つオーナーや他の開発社へ変更の通知を行うことです。
具体的にはプルリクエストでは、以下のような機能が利用できます。
プルリクエストにて、送信した変更を他の人がレビューを行い、変更内容に問題がないか確認、確認結果をレビューとして記載します。
このようにレビュー結果を受けてから、変更点をマージ(統合)することで、安全に変更内容をメインリポジトリに反映できます。
プルリクエストは、複数人での開発をスムーズに、そして安全に行っていくために必須の機能なのです。
プルリクエストの作成方法
一般的に開発の現場では、開発者が作業用のブランチを作成し、開発者自身が作業対象のプログラムをブランチへpullして、プログラムの修正、機能追加作業を行います。
そして修正、追加作業が完了次第、内容をオリジナルへpushをして、担当者に向けてプルリクエストを作成することで、コードのレビューを仰ぎます。
プルリクエストは、内容をオリジナルへpush後、GitHubのリポジトリページに表示される「Compare & pull request」から作成可能です。
またpull requestタブからプルリクエストを作成するブランチを選択し、「Create pull request」を選択することでも作成可能です。
プルリクエストのレビュー方法
「Files changed」をクリックすると自身の作業ブランチで行ったファイルの変更箇所が確認できます。
変更箇所はコードを追加した箇所は緑色、コードを削除した部分は赤で表示されます。
画面右上の「review changes」から変更箇所へのコメントや許可、修正などの記載が可能です。
必要事項を記入した上で「Submit review」をクリックすることでレビューの送信が完了します。
プルリクエストのマージとブランチの削除方法
GitHubでは、変更を行った複数のブランチのプログラミングコードを1つのブランチに統合することを「マージ」といいます。
例えば、あるリポジトリで複数の人が同時にコードを編集しているとします。
それぞれの変更を別々のブランチに分けて管理しているため、各ブランチでの変更が完了したら、マージによって変更内容を統合し、一つのブランチにまとめることになります。
このようにマージをすることで、複数の人が同時にコードを編集していた場合でも、最終的には一つのコードにまとめることができます。
pull requestタブよりマージするプルリクエストを選択し、「Merge pull request」をクリックします。
「Comfirm merge」をクリックするとマージ処理が進み、「Pull request successfully」と表示されるとマージが完了です。
マージが完了すると、作業で利用したブランチは必要ないので「Delete branch」をクリックして作業用ブランチを削除します。
マージが完了したかは、「main」ブランチでも確認しておくとよいでしょう。
プルリクエストの自動マージとは?
GitHubのプルリクエストを作成する方法から、手動でマージする方法まで詳しく解説しました。
GitHubでは、span class=”marker”>自動マージ(auto-merge)という機能を利用することで、プルリクエストを手動ではなく、自動でマージできるようになります。
ここでは、プルリクエストの自動マージについて詳しく解説します。
自動マージの仕組みと条件
自動マージとは、プルリクエストに設定したマージの条件が全て満たされたときに、自動でプルリクエストがマージされる機能</spanです。
複数人でプログラミングコードの変更を行っている場合、変更箇所が被ったりすることでマージがうまく行われないことがあります。
プルリクエストにマージをするための条件を事前に設定しておくことでミスが減り、効率的に開発が進められるようになるのです。
自動マージの有効化と無効化
プルリクエストの自動マージを利用するためには、事前にリポジトリで有効化の設定を行う必要があります。
自動マージの有効化設定は書き込み権限を持つユーザーが自動マージの設定が可能です。
また自動マージを有効化するリポジトリはPublic状態である必要があり、Private状態ではできないことには注意が必要です。
リポジトリのメインページにある「Settings」を選択して、下にスクロールし、Pull Requests欄の「Allow auto-merge」をクリックすることで有効化できます。
またこのチェックマークを外すことで、自動マージを無効化することができます。
自動マージのキャンセルと再開
自動マージ有効化後、Pull requestsタブに戻り、「Enable auto-merge」をクリック、「Confirm auto-merge」を再度クリックすることで、プルリクエストに自動マージが適用されます。
また適用後、「Disable auto-merge」をクリックすることで自動マージをキャンセルすることも可能です。
自動マージの条件を設定する
自動マージは、Branch protection rules(ブランチ保護ルール)と呼ばれるブランチに設定する条件と組み合わせて利用することで効果を発揮します。
ブランチにマージをするための条件を設定することによって条件がみたされない場合は、マージできない状態にすることができるのです。
ブランチの条件は「Settings」のBranchメニューから適用したいルールにチェックマークを入れることで設定可能です。
具体的には以下のような条件を設定できます。
例えば、ブランチをマージする前に必要となる承認レビュー数を2つ設定する条件を追加したとします。
その場合、2人のレビュアーから承認レビューをもらえるまでマージ処理がされないため、より安全にマージ作業を進めることができます。
自動マージされたプルリクエストを確認する
自動マージされたプルリクエストは、Pull Requestsタブから確認できます。
Pull Requestsタブでは、時系列に沿ってプルリクエストの状態が表示されています。
自動マージされたプルリクエストを取り消す方法
また自動マージされたプルリクエストは、Pull Requestsにて「Revert」をクリックすることで、取り消し可能です。
プルリクエストの自動マージのメリットとデメリットは?
プルリクエストの自動マージの方法について詳しく解説しました。
ここでは、プルリクエストを自動マージするメリットとデメリットについて詳しく解説します。
自動マージのメリット
プルリクエストを自動マージするメリットは以下の3点挙げられます。
マージの手間やタイミングを省く
プルリクエストの自動マージを設定することで、開発者は手動でマージ作業をする手間が省けたり、マージのタイミングを気にする必要がなくなったりします。
手作業でプルリクエストをマージをしてスムーズに開発を進めるためには、マージを確認する人とスケジュールを合わせる必要があります。
条件を設定して自動マージを有効化しておくことで、手動でのマージ作業が不要となり、かつマージのタイミングも柔軟に決めることができます。
マージの競合やエラーを防ぐ
開発の現場では、複数の開発者が同じファイルを変更することが多々あります。
複数の開発者が同時に一つのファイルを編集する場合、マージが競合したり、衝突によるエラーが発生したりすることがあります。
自動マージが有効になっている場合、コードが自動的に統合さるため、複数の開発者が同じファイルを変更しても、競合やエラーを発生する確率を下げることができるのです。
マージの品質や速度を向上させる
プルリクエストの自動マージは、マージの品質や速度を向上させるというメリットがあります。
手動でマージを行う場合、開発者が手動でエラーの解決、コードの品質やセキュリティについての確認をする必要があります。
人間の手作業となってしまうため、マージに時間がかかったり、ヒューマンエラーによりマージ品質が低下したりしてしまう可能性があるのです。
自動マージは、設定したルールに基づいて自動的にマージを行うため、エラーの解決やコードの品質チェックなどを自動的に行うことができます。
したがってマージの品質が向上し、マージにかかる時間を短縮、開発速度を向上することができます。
自動マージのデメリット
プルリクエストを自動マージするデメリットは以下の2点挙げられます。
バグや障害の原因になりうる
プルリクエストの自動マージが、バグや障害の原因になることがあります。
自動マージは、ブランチに設定したルールに基づいて自動的にマージを行うため、ルールの設定が不適切だった場合、バグや障害が発生する可能性があるのです。
また人の目によるチェックがないため、セキュリティ上の問題が見過ごされる可能性があります。
手動だと開発者がコードを直接レビューすることで、セキュリティ上の問題を発見し、修正することができますが、自動マージでは、このような問題を見逃す可能性があります。
自動マージは便利ですが、人の目でチェックすることも欠かしてはいけないのです。
また自動化を活用しつつ、自動マージの品質を維持したい場合は、ステージング環境にてレビューを行ったもののみを自動マージするなどのルール決めをするとよいでしょう。
コンフリクトがある場合に失敗する場合がある
プルリクエストの自動マージには、コンフリクトがある場合に失敗する可能性があるというデメリットがあります。
GitHubでは、別々のブランチで同じファイルであるにもかかわらず、異なる変更を行った際にマージ同士でコンフリクト(衝突)が発生することがあります。
ルールに基づいて自動的にマージを行うため、コンフリクトが発生した場合、その解決方法を自動的に判断することができません。
コンフリクトが生じた結果、自動マージが失敗し、結果として手動でマージを行う必要があるのです。
まとめ
今回はGitHubのプルリクエストを自動マージする方法からメリット、デメリットまで詳しく解説しました。
プルリクエストの自動マージは、チームで開発を行う際にエラーや品質の低下を防いだり、開発をスムーズに進めたりすることに役立ちます。
自動マージのためのブランチ設定方法の組み合わせも多様なため、どのリポジトリに設定してもよいか確認をしたうえで開発用途に合わせて自由に設定をおこなってみてください。