プルリクエストの流れ
今回はGitHubを使う上で必須なものであるプルリクエストについて解説します。
プルリクエストとは何なのか。
プルリクエストとは、自分の変更したコードをリポジトリに取り込んでもらえるよう依頼する機能のことです。
何のためにこのような機能があるのかというと、誰かが変更したコードをリポジトリに取り込む前にレビューを挟むためにこのような機能があります。
たとえばAさんという人が変更したコードをレビューもなしにGitHubにあるリポジトリの方に取り込んでしまうと、どういう変更があったかも分からないし、そこでバグが発生したりとか、もしくはコードの質が下がったりとかしてもそれを防止することができません。
ですのでバグを発生させないためであったり、コードの質を担保するために、誰かの変更したコードをGitHubのリポジトリに取り込む前には必ずレビューを挟むようにして開発していきます。
それを実現する機能がプルリクエストになります。
プルリクエストを使うと、まず自分がコードを変更したら、その変更分をリポジトリに取り込んでねと依頼をすることになります。
その依頼を受けたチームメイトがコードレビューをしてOKだったらリポジトリに取り込みます。
もし、NGだったらリポジトリには取り込まないというようにして開発していきます。
それではプルリクエストをどういった手順でやっていくのか見ていきましょう。
- ローカルのワークツリーでmainブランチを最新の状態に更新
- mainブランチを最新の状態にしたら、そこからブランチを作成
- ブランチを作成したら、ファイルを変更
- その変更分をコミット
- コミットするとローカルリポジトリに変更分が記録されるのでGitHubへプッシュ
- ここでプルリクエストを送る
- プルリクエストをチームメンバーに送ったら、そこでチームメンバーがコードレビュー
- コードレビューをした結果、「よし、この変更を取り込んでも良いよ」と許可がでたらプルリクエストをGitHubのmainブランチにマージ
- マージが終わったら今まで作成してきたブランチはいらなくなるので、そのブランチを削除
これが一連のプルリクエストの手順になります。
実際にやってみよう
それではターミナルを開いて実際にプルリクエストをやっていきましょう。
まず今自分がmainブランチにいることを確認します。
$ git branch * main
mainブランチにいることが確認できました。
それではmainブランチを最新の状態にしていきましょう。
$ git pull origin main From github.com:piketa/git_tutorial * branch main -> FETCH_HEAD Already up to date.
これでプルができました。
最新の状態になっていると思うので、「git status」で念のため確認しておきましょう。
$ git status On branch main nothing to commit, working tree clean
すると、今あなたのmainブランチはコミットするものが無く、綺麗な状態だよと表示されました。
それではmainを最新の状態にできたので、新しいブランチを作成していきましょう。
今回は「pull_request」というブランチを作成していきます。
$ git checkout -b pull_request Switched to a new branch 'pull_request'
「pull_request」というブランチを作成して、今自分がいるブランチも「pull_request」に変更ができました。
ではここで、ファイルの変更を加えていきましょう。
テキストエディタで「index.html」ファイルを開きます。
今回は「<p>pull request</p>」と追記しておきます。
保存してターミナルに戻ります。
ではこの変更分をコミットします。
$ git add index.html $ git commit -m 'pull requestを追記' [pull_request 1a878bc] pull requestを追記 1 file changed, 1 insertion(+)
コミットができたらプッシュします。
$ git push origin pull_request Enumerating objects: 22, done. Counting objects: 100% (22/22), done. Delta compression using up to 8 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (17/17), 1.63 KiB | 1.63 MiB/s, done. Total 17 (delta 10), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (10/10), completed with 1 local object. remote: remote: Create a pull request for 'pull_request' on GitHub by visiting: remote: https://github.com/piketa/git_tutorial/pull/new/pull_request remote: To github.com:piketa/git_tutorial.git * [new branch] pull_request -> pull_request
これでプルリクエストができました。
では、GitHubで確認していきましょう。
GitHubを開いたら、自分のgit_tutorialのリポジトリに移動します。
ここからプルリクエストを作成していきます。
「Pull requests」タブをクリックします。
ここでプルリクエストの諸々を扱っていきます。
この中の右側にある「New pull request」ボタンをクリックします。
これで新しいプルリクエストが作られます。
今回、「base:」のところは「main」にして、「compare:」のところで「pull_request」ブランチを選択します。
「compare:」の方がプルリクエストする側のブランチです。
今回「pull_request」ブランチをプルリクエストするので、「compare:」の方に選んで、「base:」の方は元々の基板となるブランチ、今回の場合ですとmainブランチを選んでいきます。
今回の意味としては「pull_request」ブランチから「main」ブランチにプルリクエストを送るという意味になります。
そして「Create pull request」ボタンを押します。
すると、プルリクエストのタイトルと本文を入力できる画面が開きます。
今回タイトルは「pull requestを追記」としておきます。
本文は「レビューお願いします!」と書いておきます。
書いたら「Create pull request」ボタンを押します。
これでプルリクエストが作られました。
そうすると先ほど入力したタイトルと本文が表示されています。
では、これでプルリクエストは作成できたので、コードレビューを依頼していきます。
コードレビューを依頼する時は右側にある「Reviewers」を選択します。
今は一人で開発しているのでレビュワーはいないのですが、チームで開発する時にはここに、この人にお願いしますというのを選ぶ事ができます。
今回は選んだと言うことにします。
レビュワーを選択すると、選んだレビュワーの方にこのレビューをお願いしたよというプッシュ通知が来るメールが送信されるので、そのメールが来たらレビュワーの人がレビューをしていきます。
では今からレビュワーになったつもりでレビューしていきます。
レビュワーはレビュー依頼をメールで受け取ったら、「Pull requests」のタブの中にある「Files changed」タブをクリックしてプルリクエストを確認していきます。
するとここに何が書かれているかというと、変更した内容というのが書かれています。
今回は「<p>pull request</p>」が追加されているのが「+」記号と、緑色のラインで分かります。
これで何か変更して欲しいと言うことがあった時、行の横に「+」ボタンが出てくるのでそのボタンを押します。
「+」ボタンを押すとコメント欄が出てくるので、「○○に修正お願いします。」のようにコメントを書くことができます。
そして「Add single comment」をクリックするとコメントができます。
このコメントを受けたら、プルリクエストを送った方の人に通知がいくので、それをもとに、またプルリクエストを送った人が自分で修正を加えて、もう一度プルリクエストします。
これを何回か繰り返すことで、コードのレビューが完了します。
全部の修正が終わって、コードのレビューが通ったら、レビュワーは「Files changed」タブの右側にある「Review changes」をクリックします。
ここで、「Approve」にチェックをし、(自分ではできないのですが)「Submit review」を押すとプルリクエストをApproveできます。
今回はApproveしたと言うことにします。
「Conversation」タブに戻ります。
「Merge pull request」ボタンを押してマージします。
「Confirm merge」を押します。
これでマージができました。
マージが完了すると、元々の「purll_request」リポジトリはいらないため、「Delete branch」ボタンでブランチを消していきます。
ここまでで「purll_request」のブランチを「main」ブランチにコードレビューしてその内容を取り込むことができました。
その取り込んだ内容を自分のローカルの方にも反映させておきましょう。
ターミナルに戻り、mainブランチに切り替えます。
$ git checkout main Switched to branch 'main'
GitHubの内容を取り込んでいきます。
$ git pull origin main remote: Enumerating objects: 1, done. remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (1/1), 635 bytes | 317.00 KiB/s, done. From github.com:piketa/git_tutorial * branch main -> FETCH_HEAD f540e52..52fd079 main -> origin/main Updating c5c1db0..52fd079 Fast-forward index.html | 1 + 1 file changed, 1 insertion(+)
これで取り込むことができました。
取り込んだら、先ほどまでの「pull_request」ブランチはいらなくなるので、ブランチを削除しておきましょう。
$ git branch -d pull_request Deleted branch pull_request (was 1a878bc).
これでブランチも削除できました。
まとめ
最後に今回の内容についてまとめておきます。
- 変更をGitHubにプッシュしたら、GitHub上でプルリクエストを作る
- プルリクエストを作成したら、チームメンバーにコードレビューをお願いして、コードのレビューをしてもらう
- そのレビューが通ったら、またGitHub上でマージボタンを押してマージする
- マージが完了したら、それまで開発していたブランチは削除する
これがプルリクエストの一連の流れでした。
チームで開発しているとプルリクエストは必須の機能になってくるので、是非使いこなしていきましょう。
参考図書
独学で挫折しそうになったら、オンラインプログラミングスクール