コンテンツにスキップ

PR運用ルール

この章では、効果的なプルリクエストの運用ルールについて学びます。適切なPRサイズ、テンプレートの設計、ドラフトPRの活用方法を解説します。

サイズ行数レビュー時間推奨度
XS〜50行5分以内⭐⭐⭐
S51〜200行15分以内⭐⭐⭐
M201〜400行30分以内⭐⭐
L401〜800行1時間以内
XL800行〜1時間以上🚫
  1. レビュー品質の低下: 大きすぎると「LGTM」で済まされがち
  2. マージコンフリクト: 長期間のブランチは衝突しやすい
  3. リスクの増大: 問題発生時の切り分けが困難
  4. フィードバック遅延: 大きな修正が必要になりがち
1. 機能を分割する
❌ ユーザー管理機能
✅ ユーザー登録 → プロフィール編集 → パスワード変更
2. リファクタリングを分離する
❌ 機能追加 + リファクタリング
✅ リファクタリングPR → 機能追加PR
3. テストを別PRにする(場合による)
❌ 機能 + テスト(800行)
✅ テストの土台PR → 機能PR
4. 段階的に実装する
❌ 完成品を一括で
✅ API → UI → 統合

.github/PULL_REQUEST_TEMPLATE.md:

## 概要
<!-- このPRで何を行うか簡潔に説明 -->
## 関連Issue
<!-- 関連するIssue番号 -->
Closes #
## 変更種別
- [ ] 新機能(feat)
- [ ] バグ修正(fix)
- [ ] リファクタリング(refactor)
- [ ] ドキュメント(docs)
- [ ] その他
## 変更内容
<!-- 具体的な変更点をリストで記載 -->
-
-
## テスト方法
<!-- レビュアーが動作確認できる手順 -->
1.
## スクリーンショット
<!-- UIの変更がある場合は添付 -->
## チェックリスト
- [ ] コードはセルフレビュー済み
- [ ] テストを追加/更新した
- [ ] ドキュメントを更新した(必要な場合)
- [ ] 破壊的変更はない(またはマイグレーション手順を記載)

.github/PULL_REQUEST_TEMPLATE/feature.md:

## 新機能の概要
<!-- 追加する機能の説明 -->
## ユーザーストーリー
<!-- 誰が、何を、なぜ -->
As a [ユーザー種別],
I want to [やりたいこと],
so that [得られる価値].
## 実装詳細
<!-- 技術的なアプローチの説明 -->
## テストシナリオ
- [ ] 正常系:
- [ ] 異常系:
- [ ] 境界値:
## デモ
<!-- GIFやスクリーンショット -->

.github/PULL_REQUEST_TEMPLATE/bugfix.md:

## バグの概要
Fixes #
## 再現手順
1.
2.
3.
## 原因
<!-- 根本原因の説明 -->
## 修正内容
<!-- どのように修正したか -->
## テスト
- [ ] バグが修正されていることを確認
- [ ] リグレッションがないことを確認
## Before / After
| Before | After |
|--------|-------|
| ![before](url) | ![after](url) |

URLパラメータでテンプレートを指定:

https://github.com/user/repo/compare/main...feature?template=feature.md

レビュー準備ができていないPRを明示的に示す機能です。

状態用途
Draft作業中、早期フィードバック、CI確認
Readyレビュー可能、マージ可能
  1. WIPの可視化: チームに作業状況を共有
  2. 早期フィードバック: 方向性の確認
  3. CI確認: テストが通るか事前チェック
  4. 段階的なレビュー: 大きな変更を小分けに
1. 作業開始時にDraft PRを作成
- タイトルに [WIP] をつける必要なし
- 自動で「Draft」バッジが表示される
2. 作業しながらプッシュ
- CIが実行される
- レビュアーは任意でコメント可能
3. 完成したら「Ready for review」
- レビュアーに通知が送られる
- マージ可能になる
Terminal window
# GitHub CLI
gh pr create --draft --title "機能追加" --body "WIP"
# Webから
# Create pull request ボタンの横にあるドロップダウンから
# "Create draft pull request" を選択

PR作成前に自分でレビューすることで:

  1. 明らかなミスを事前に発見
  2. レビュアーの時間を節約
  3. PRの品質向上

セルフレビューチェックリスト

Section titled “セルフレビューチェックリスト”
## コード品質
- [ ] 命名は適切か
- [ ] 重複コードはないか
- [ ] 複雑すぎる箇所はないか
## 機能
- [ ] 要件を満たしているか
- [ ] エッジケースは考慮されているか
- [ ] エラーハンドリングは適切か
## テスト
- [ ] 必要なテストは追加したか
- [ ] 既存のテストは通るか
## セキュリティ
- [ ] 入力値のバリデーションは適切か
- [ ] 機密情報は含まれていないか
## ドキュメント
- [ ] 必要なコメントは追加したか
- [ ] APIドキュメントは更新したか
PRサイズ初回レビュー開始までレビュー完了まで
XS/S4時間以内1営業日以内
M8時間以内2営業日以内
L1営業日以内3営業日以内
  1. レビュー時間の確保: カレンダーにブロック
  2. 通知の設定: Slack連携、メール通知
  3. レビュアーのローテーション: 特定の人に集中させない
  4. 自動アサイン: アクションやCODEOWNERSで自動化
.github/workflows/pr-check.yml
name: PR Check
on:
pull_request:
branches: [main]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lint
run: npm run lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Test
run: npm test
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build

Settings → Branches → Branch protection rules:

✅ Require status checks to pass before merging
- lint
- test
- build
✅ Require branches to be up to date before merging

.github/workflows/pr-size.yml
name: PR Size Label
on:
pull_request:
types: [opened, synchronize]
jobs:
size:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Calculate size
id: size
run: |
ADDITIONS=$(gh pr view ${{ github.event.pull_request.number }} --json additions -q '.additions')
DELETIONS=$(gh pr view ${{ github.event.pull_request.number }} --json deletions -q '.deletions')
TOTAL=$((ADDITIONS + DELETIONS))
if [ $TOTAL -le 50 ]; then
SIZE="XS"
elif [ $TOTAL -le 200 ]; then
SIZE="S"
elif [ $TOTAL -le 400 ]; then
SIZE="M"
elif [ $TOTAL -le 800 ]; then
SIZE="L"
else
SIZE="XL"
fi
echo "size=$SIZE" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Add label
run: gh pr edit ${{ github.event.pull_request.number }} --add-label "size/${{ steps.size.outputs.size }}"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Stale PR Check
on:
schedule:
- cron: '0 9 * * 1-5' # 平日9時
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-pr-message: 'このPRは7日間更新がありません。クローズするか、作業を続行してください。'
days-before-pr-stale: 7
days-before-pr-close: 14

項目推奨
PRサイズ200行以下(M以下)
テンプレート種別ごとに用意
Draft PR作業中は積極的に活用
セルフレビューPR作成前に必ず実施
レビューSLA初回24時間以内
  1. 小さく保つ: 1PR = 1つの目的
  2. 説明を丁寧に: レビュアーの時間を節約
  3. 早めにPR: Draft PRで早期フィードバック
  4. 迅速にレビュー: SLAを設定して守る
  5. 自動化: CI/CDで品質を担保

次の章では、リリースフローについて学びます。

Q1. 理想的なPRサイズとして最も推奨されるのはどれですか?

Q2. Draft PRの主な用途として適切でないものはどれですか?

Q3. PRのセルフレビューで確認すべきでないものはどれですか?