プルリクエスト(PR)
この章では、プルリクエストの作成からマージまでの流れを学びます。PRはGitHubでのコラボレーションの中心となる機能です。
プルリクエストとは
Section titled “プルリクエストとは”**プルリクエスト(Pull Request / PR)**は、あるブランチの変更を別のブランチに取り込んでもらうためのリクエストです。
1. 機能ブランチで開発2. PRを作成3. レビューを受ける4. 修正があれば対応5. 承認されたらマージGitHub UIから
Section titled “GitHub UIから”- リポジトリページで「Pull requests」タブ
- 「New pull request」をクリック
- baseブランチ(マージ先)とcompareブランチ(変更元)を選択
- 「Create pull request」をクリック
- タイトルと説明を入力
- 「Create pull request」で作成
コマンドラインから
Section titled “コマンドラインから”# プッシュ後にブラウザでPRを開くgit push -u origin feature-branch# 表示されるURLをクリック
# GitHub CLIでPRを作成gh pr create --title "機能追加" --body "詳細説明"
# インタラクティブに作成gh pr create
# ドラフトPRを作成gh pr create --draft
# レビュアーを指定gh pr create --reviewer username1,username2VSCodeから
Section titled “VSCodeから”GitHub Pull Requests 拡張機能をインストールすると、VSCodeから直接PRを作成・管理できます。
PRの説明の書き方
Section titled “PRの説明の書き方”## 概要このPRで何を行うかの簡潔な説明
## 変更内容- 変更点1- 変更点2- 変更点3
## 関連IssueCloses #123
## スクリーンショット(UIの変更がある場合)| Before | After ||--------|-------||  |  |
## テスト方法1. `npm install` を実行2. `npm run dev` でサーバー起動3. http://localhost:3000/login にアクセス
## チェックリスト- [ ] テストを追加した- [ ] ドキュメントを更新した- [ ] 破壊的変更がないことを確認したIssue との連携
Section titled “Issue との連携”特定のキーワードを使うと、PRがマージされたときにIssueが自動的にクローズされます:
# 以下のキーワードが使えるCloses #123Fixes #123Resolves #123
# 複数のIssueCloses #123, #456, #789ドラフトPR
Section titled “ドラフトPR”作業中のPRは「ドラフト」として作成できます。
ドラフトPRの用途
Section titled “ドラフトPRの用途”- WIP(Work In Progress): 作業中であることを明示
- 早期フィードバック: 完成前にレビューをもらいたい
- CI確認: テストが通るか確認したい
ドラフトの作成と解除
Section titled “ドラフトの作成と解除”# ドラフトとして作成gh pr create --draft
# ドラフトを解除してレビュー準備完了gh pr readyGitHub UIでは「Convert to draft」「Ready for review」ボタンで切り替えます。
PRテンプレート
Section titled “PRテンプレート”リポジトリにテンプレートを設置すると、PR作成時に自動的に適用されます。
以下のいずれかに配置:
.github/PULL_REQUEST_TEMPLATE.md.github/PULL_REQUEST_TEMPLATE/default.mddocs/PULL_REQUEST_TEMPLATE.md
テンプレート例
Section titled “テンプレート例”## 概要<!-- このPRで何を行うか簡潔に -->
## 変更種別- [ ] 新機能- [ ] バグ修正- [ ] リファクタリング- [ ] ドキュメント- [ ] その他
## 関連Issue<!-- 関連するIssue番号 -->Closes #
## 変更内容<!-- 具体的な変更点をリストで -->-
## テスト方法<!-- レビュアーが確認できる手順 -->1.
## スクリーンショット<!-- UIの変更がある場合 -->
## チェックリスト- [ ] セルフレビューを行った- [ ] コードにコメントを追加した(必要な場合)- [ ] テストを追加・更新した- [ ] ドキュメントを更新した(必要な場合)複数のテンプレート
Section titled “複数のテンプレート”.github/PULL_REQUEST_TEMPLATE/ ディレクトリに複数のテンプレートを置くことができます:
.github/PULL_REQUEST_TEMPLATE/├── feature.md├── bugfix.md└── documentation.md使用時は ?template=feature.md をURLに追加します。
レビュアーの指定
Section titled “レビュアーの指定”- PR作成時またはサイドバーで「Reviewers」
- ユーザー名またはチーム名を選択
# GitHub CLIgh pr create --reviewer username1,username2
# 既存のPRにレビュアーを追加gh pr edit --add-reviewer usernameCODEOWNERS との連携
Section titled “CODEOWNERS との連携”CODEOWNERSを設定すると、変更されたファイルに応じて自動でレビュアーが割り当てられます。
ラベルの活用
Section titled “ラベルの活用”ラベルを使ってPRを分類できます。
よく使うラベル
Section titled “よく使うラベル”| ラベル | 用途 |
|---|---|
bug | バグ修正 |
enhancement | 機能追加 |
documentation | ドキュメント |
breaking-change | 破壊的変更 |
needs-review | レビュー待ち |
wip | 作業中 |
# ラベルを追加gh pr edit --add-label "bug,priority-high"マイルストーンとの連携
Section titled “マイルストーンとの連携”マイルストーンを設定すると、リリース計画と連携できます。
- PR作成時またはサイドバーで「Milestone」
- 既存のマイルストーンを選択
gh pr edit --milestone "v1.0.0"マージ方法の選択
Section titled “マージ方法の選択”3つのマージ方法
Section titled “3つのマージ方法”1. Create a merge commit
Section titled “1. Create a merge commit”main ●────●────────────●(マージコミット) │ ↑feature └──●──●──●───┘- すべてのコミット履歴が残る
- マージコミットが作成される
- 最も一般的な方法
2. Squash and merge
Section titled “2. Squash and merge”Before:feature ●──●──●──●
After:main ●────●────●(1つのコミットに統合)- 複数のコミットが1つにまとまる
- コミット履歴がきれいになる
- 細かい作業コミットを隠せる
3. Rebase and merge
Section titled “3. Rebase and merge”main ●────●────●'──●'──●' ↑ featureのコミットが付け替え- コミットがmainの先頭に付け替え
- マージコミットが作成されない
- 直線的な履歴になる
| 状況 | 推奨 |
|---|---|
| チーム開発で履歴を残したい | Merge commit |
| 細かいコミットをまとめたい | Squash |
| 履歴を直線的に保ちたい | Rebase |
リポジトリ設定で制限
Section titled “リポジトリ設定で制限”Settings → General → Pull Requests で、許可するマージ方法を設定できます。
自動マージ設定
Section titled “自動マージ設定”条件を満たしたら自動でマージする設定です。
- Settings → General → Pull Requests
- 「Allow auto-merge」にチェック
PRページで「Enable auto-merge」をクリックし、マージ方法を選択します。
自動マージの条件:- 必須のレビューが承認されている- 必須のステータスチェックが通っている- コンフリクトがない中級者向けTips
Section titled “中級者向けTips”PR の差分を確認
Section titled “PR の差分を確認”# PRの差分を表示gh pr diff 123
# PRをローカルでチェックアウトgh pr checkout 123コンフリクトの解決
Section titled “コンフリクトの解決”PRにコンフリクトがある場合:
# 最新のmainを取り込むgit fetch origingit checkout feature-branchgit merge origin/main
# コンフリクトを解決してコミットgit add .git commit -m "resolve conflicts"git pushGitHub UIでも簡単なコンフリクトは解決できます。
PRのレビューコメントへの対応
Section titled “PRのレビューコメントへの対応”# コメントに対応するコミットを追加git commit -m "address review comments"git push
# またはコミットを修正git commit --amendgit push --force-with-leasePR の状態確認
Section titled “PR の状態確認”# PRの一覧gh pr list
# 自分がレビュアーのPRgh pr list --reviewer @me
# 特定のPRの詳細gh pr view 123
# PRのチェック状態gh pr checks 123ブランチ削除の自動化
Section titled “ブランチ削除の自動化”Settings → General → Pull Requests で「Automatically delete head branches」を有効にすると、マージ後にブランチが自動削除されます。
| 項目 | ポイント |
|---|---|
| PR作成 | 明確なタイトルと説明を書く |
| ドラフト | 作業中は Draft PR を活用 |
| テンプレート | チームで統一フォーマット |
| レビュアー | CODEOWNERS で自動割り当て |
| マージ方法 | チームで方針を決める |
PRのベストプラクティス
Section titled “PRのベストプラクティス”- 小さく保つ: レビューしやすいサイズ(300行以下推奨)
- 1つの目的: 1PR = 1機能 or 1修正
- 説明を丁寧に: レビュアーの時間を節約
- セルフレビュー: 提出前に自分で確認
次の章では、コードレビューの方法を学びます。
Q1. プルリクエスト(PR)の主な目的はどれですか?
Q2. PR説明文で'Closes #123'と書くとどうなりますか?
Q3. Squash and mergeの特徴はどれですか?