プルリクエストとは?
プルリクエストとは、Gitでブランチをマージする前に、他の開発者に変更内容を確認してもらうためのリクエストです。
GitHubやGitLabなどのプラットフォームでは、プルリクエストを作成することで、コードレビューを依頼したり、変更内容を共有したりすることができます。
GitHubでプルリクエストを作成すると次のような画面が作成されます。
どのような変更を行ったか説明を書くことができて、File Changed
のタブではどのような変更が行われたのかを確認することができます。
またFile Changed
のタブでコード内にコメントを追加することができるので、
例えば「この部分はこうした方が良いのでは?」といったフィードバックを行うことができます。
そして、プルリクエストを作成した後に、他の開発者がそのプルリクエストを確認して、問題がなければマージすることができます。
エンジニアとして仕事をするうえで、必須のスキルとなるので、ぜひ覚えておきましょう。
プルリクエストを用いた開発の流れ
プルリクエストを用いた開発の流れは次のようになります。
- ブランチを作成する: 新しい機能や修正を行うためのブランチを作成します。
- 変更を行う: 作成したブランチでコードの変更を行います。
- コミットする: 変更内容をコミットします。
- プルリクエストを作成する: 変更内容を他の開発者に確認してもらうために、プルリクエストを作成します。
- コードレビューを受ける: 他の開発者にプルリクエストをレビューしてもらい、フィードバックを受け取ります。
- 修正する: フィードバックを受けて、必要な修正を行います。
- マージする: プルリクエストが承認されたら、ブランチを
main
ブランチにマージします。 - ブランチを削除する: マージが完了したら、作業用のブランチを削除します。
- ローカルのリポジトリを更新する:
main
ブランチを最新の状態に更新します。
はじめはこの流れを理解するのが難しいかもしれませんが、実際に手を動かしてみることで徐々に慣れていくでしょう。
では、実際にプルリクエストを作成してみましょう。
ブランチを作成する
ではひとつづつ作業をしていきましょう。
今回はプルリクエストの流れを把握するのが目的なので、README.md
に文言を追加するだけの簡単な変更を行います。
まずは、プルリクエストを作成するためのブランチをローカルのGitリポジトリで作成します。
main
ブランチから修正用のブランチを作成します。
git switch
コマンドで-c
オプションを使うと、ブランチを作成してそのブランチに切り替えることができます。
git switch -c mod_readme
プロンプトがmod_readme
ブランチに切り替わったことを確認できたら、次のステップに進みます。
念のため、現在のブランチを確認しておきましょう。
git branch
* mod_readme
と表示されていれば、mod_readme
ブランチに切り替わっています。
* mod_readme main
ブランチの状態は次のようになります。
gitGraph commit branch mod_readme checkout mod_readme
変更を行う
README.md
ファイルに変更を加えましょう。
テキストエディタでも構いませんが、今回はechoコマンドを使って、簡単に変更を加えます。
echo "プルリクエストのテストです。" >> README.md
変更を確認してみましょう。
git diff
変更内容が表示されるはずです。
diff --git a/README.md b/README.mdindex c7f6076..a781134 100644--- a/README.md+++ b/README.md@@ -1 +1,2 @@ # Git Practice+プルリクエストのテストです。
変更をコミットする
変更をコミットします。
git add README.mdgit commit -m "プルリクエストのテスト"
現在のブランチはmod_readme
ブランチで、README.md
ファイルに「プルリクエストのテスト」という変更が加えられた状態です。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "プルリクエストのテスト"
プルリクエストを作成する
次に、GitHub上でプルリクエストを作成します。
はじめにローカルリポジトリの変更をリモートリポジトリにプッシュします。
git push
コマンドを使って、mod_readme
ブランチをリモートリポジトリにプッシュします。
git push origin mod_readme
なおmod_readme
というブランチ名の指定ではなく、HEAD
を指定しても同じ意味になります。
git push origin HEAD
HEAD
は現在のブランチの先頭を指す特別な名前です。
現在のブランチの変更をプッシュしたい場合は、ブランチ名を指定する必要がないHEAD
を使うことができます。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "HEAD"
ブランチをプッシュしたらGitHubのリポジトリにアクセスします。
gh browse
ブラウザが開き、GitHubのリポジトリが表示されます。
リポジトリのトップページでCompare & pull request
ボタンが表示されるので、クリックします。
GitHubのプルリクエスト作成画面が表示されます。
ここで、プルリクエストのタイトルと説明を入力します。
今回は簡単な修正なので、簡易なタイトルと説明を入力していますが、
プルリクエストの内容がわかるように、具体的なタイトルと説明を入力することが重要です。
また右のサイドバーではReviewers
やAssignees
、Labels
などを設定することができます。
これらは、プルリクエストのレビューを依頼する人や、
プルリクエストの担当者、ラベルなどを設定するためのものです。
必要に応じて設定しましょう。
プロジェクトごとに運用方法が異なるので、プロジェクトのルールに従って設定してください。
プルリクエストの内容を確認したら、Create pull request
ボタンをクリックします。
プルリクエストが作成されました。
レビュー
プルリクエストが作成されたら、他の開発者にレビューを依頼します。
Slackなどのチャットツールを使って、プルリクエストのURLを共有しましょう。
またReviewers
にレビューを依頼する人を設定すると、依頼側が通知を受け取る設定をしていれば
通知が届くので、特に別途依頼をしなくてもよいケースもあります。
こちらもプロジェクトのルールに従って運用しましょう。
本来であれば、自分以外の開発者にレビューを依頼するのですが、
今回は他の開発者がいないので、自分でレビューを行います。
プルリクエストのページにアクセスして、Files changed
タブをクリックします。
マウスカーソルを変更行の左側に合わせると、+
ボタンが表示されます。
このボタンをクリックすると、コメントを追加することができます。
レビューコメントを追加して、Add single comment
ボタンをクリックします。
Start a review
ボタンをクリックすると、レビューコメントをまとめて送信することができます。
レビューコメントはスレッド形式になっているので、他の開発者がコメントに返信することもできます。
Start a review
にした場合は、右上のReview changes
ボタンをクリックするとポップアップが開きます。
Comment
もしくはRequest changes
を選択して、Submit review
ボタンをクリックします。
もしプルリクエストの変更に問題がない場合はApprove
を選択します。
自分が作成したプルリクエストなので、Approve
とRequest changes
は選択不可になっていますが、
他の開発者がレビューを行う場合は選択可能です。
プルリクエストの修正
レビューを受けて、必要な修正を行います。
今回はレビューコメントの通り、プルリクエストを英語に直しましょう。
ローカルのリポジトリでREADME.md
ファイルを修正します。
お好きなテキストエディタで開いて、プルリクエスト
をPull Request
に変更するか、
次のコマンドを実行して修正します。
sed -i 's/プルリクエスト/Pull Request/g' README.md
変更を確認しましょう。
git diff
変更内容が表示されるはずです。
diff --git a/README.md b/README.mdindex a781134..dd55c3e 100644--- a/README.md+++ b/README.md@@ -1,2 +1,2 @@ # Git Practice-プルリクエストのテストです。+Pull Requestのテストです。
変更をコミットします。
git add README.mdgit commit -m "Fix pull request text"
現在のコミットは以下の状態です。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "プルリクエストのテスト" commit id: "Fix pull request text"
変更をリモートリポジトリにプッシュします。
git push origin HEAD
再度レビューをする
変更をリモートリポジトリにプッシュしたら、GitHubのリポジトリを開いて変更を確認しましょう。
また、他の開発者にレビューを依頼します。
ここではレビューが問題なかったと仮定します。
マージする
プルリクエストの変更が問題なく、Approve
をもらったら、プルリクエストをマージします。
GitHubのプルリクエストの画面で、Merge pull request
ボタンをクリックします。
次に、Confirm merge
ボタンをクリックします。
これでプルリクエストがマージされたので、リモートリポジトリの状態は次のようになります。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "プルリクエストのテスト" commit id: "Fix pull request text" checkout main merge mod_readme
ブランチを削除する
プルリクエストをマージしたら、ブランチが不要の場合は削除します。
GitHubのプルリクエストの画面で、Delete branch
ボタンをクリックします。
ローカルリポジトリを更新する
リモートリポジトリはmod_readme
ブランチがマージされている状態ですが、
ローカルリポジトリはまだmod_readme
ブランチが存在し、
main
ブランチにはマージされていません。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "プルリクエストのテスト" commit id: "Fix pull request text"
ローカルリポジトリのmain
ブランチの状態を最新に更新しましょう。
main
ブランチに切り替えます。
git switch main
次に、リモートリポジトリの最新の状態を取得して、main
ブランチを更新します。
pull
とはリモートリポジトリの最新の状態を取得して、ローカルリポジトリに反映する操作です。
--rebase
オプションをつけることで、不要なコミット履歴(マージコミット)を作成せずに、ローカルの変更をリモートの最新の状態に適用します。
git pull origin main --rebase
これでローカルのmain
ブランチとリモートのmain
ブランチが同期されました。
gitGraph commit id: "hello.txtを追加" commit id: "newfile.txtを追加" commit id: "あいさつを追加" commit id:"Add README.md" branch mod_readme commit id: "プルリクエストのテスト" commit id: "Fix pull request text" checkout main merge mod_readme
ローカルのmod_readme
ブランチは不要であれば削除します。
git branch -d mod_readme
まとめ
プルリクエストの作成からマージまでの流れを学びました。
次の開発を進める場合は、同様の手順でプルリクエストを作成、レビュー、マージ、ローカルリポジトリの更新を行います。
何回も繰り返すことで、プルリクエストの流れに慣れていくでしょう。