未分類
GitHub Issue・PR の正しいワークフロー
概要
GitHubでは、Issue → ブランチ → PR → マージという流れが標準的なワークフローです。PRのdescriptionに Closes #3 と記載することで、PRマージ時にIssueが自動クローズされます。
標準ワークフロー
1. Issueを確認
# Issue一覧を確認
gh issue list
# Issue #3の詳細を確認
gh issue view 3
2. 作業用ブランチを作成
# masterブランチから最新を取得
git checkout master
git pull origin master
# Issue番号を含むブランチ名で作成(推奨)
git checkout -b feature/3-add-search-functionality
# または
git checkout -b fix/3-search-bug
ブランチ名の例:
feature/3-add-search- 新機能fix/3-bug-name- バグ修正docs/3-update-readme- ドキュメント更新
3. 実装・コミット
# 変更を実装
# ...
# 変更をステージング
git add .
# コミット(詳細なメッセージ)
git commit -m "feat: FlexSearchによる全文検索機能を実装
- FlexSearchライブラリを追加
- 検索ページ(/search)を新規作成
- MDC AST形式に対応したテキスト抽出を実装
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>"
4. ブランチをプッシュ
# 初回プッシュ時は -u オプションでトラッキング設定
git push -u origin feature/3-add-search-functionality
5. PRを作成
gh pr create --title "検索機能の実装" --body "$(cat <<'EOF'
## 概要
FlexSearchを使用した全文検索機能を実装しました。
## 変更内容
- ✅ FlexSearchライブラリの追加
- ✅ `/search` ページの新規作成
- ✅ MDC AST形式のテキスト抽出対応
- ✅ 日本語・英語の全文検索対応
- ✅ キーワードハイライト機能
- ✅ デバウンス処理(300ms)
## テスト
- [x] 英語検索(例: "SEO", "Excel")
- [x] 日本語検索(例: "赤字", "繰越欠損金")
- [x] 短い単語の検索
- [x] スニペット生成とハイライト
## 関連Issue
Closes #3
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
重要ポイント:
Closes #3で Issue #3 とリンク- PR本文に変更内容を詳しく記載
- チェックリストで実施内容を明示
6. PRマージ
PRがレビュー・承認されたら、以下のいずれかの方法でマージ:
方法A: GitHub Web UI
- PR画面で「Merge pull request」をクリック
- マージメッセージを確認
- 「Confirm merge」をクリック
- Issue #3 が自動的にクローズされる ✨
方法B: GitHub CLI
# PRをマージ
gh pr merge 4 --squash --delete-branch
# または、マージ方法を選択
gh pr merge 4
# → Merge方法を選択: Squash / Merge commit / Rebase
7. ローカルブランチの削除
# masterに戻る
git checkout master
# リモートの最新を取得
git pull origin master
# 作業ブランチを削除
git branch -d feature/3-add-search-functionality
PR Description のベストプラクティス
基本構成
## 概要
何を実装/修正したかを1-2行で説明
## 変更内容
- 主要な変更点をリスト化
- ファイル単位または機能単位で記載
## テスト
実施したテストケース
## スクリーンショット(必要に応じて)
視覚的な変更がある場合
## 関連Issue
Closes #3
Issueを自動クローズするキーワード
PRのdescriptionまたはコミットメッセージに以下を記載:
| キーワード | 例 |
|---|---|
Closes #3 | 最も一般的 |
Fixes #3 | バグ修正の場合 |
Resolves #3 | 問題解決の場合 |
Close #3, #4 | 複数Issue同時クローズ |
参考: GitHub公式ドキュメント
今回の反省点
実際に行ったこと(誤り)
# masterブランチで直接作業
git checkout master
# 変更を実装...
git commit -m "..."
git push origin master # ← masterに直接プッシュ
問題点:
- ✗ PRを経由していないためレビュー不可
- ✗ Issueが自動クローズされない
- ✗ 変更履歴がフラットで追跡困難
正しい流れ(修正版)
# 1. 作業ブランチを作成
git checkout -b feature/3-add-search-functionality
# 2. 変更を実装・コミット
git add .
git commit -m "..."
# 3. ブランチをプッシュ
git push -u origin feature/3-add-search-functionality
# 4. PRを作成(Closes #3 を記載)
gh pr create --title "..." --body "...Closes #3..."
# 5. PRをマージ → Issue #3 自動クローズ ✨
gh pr merge
既にmasterにプッシュしてしまった場合のリカバリ
方法1: ブランチを作り直す
# 1. 現在のHEADからブランチを作成
git checkout -b feature/3-add-search-functionality
# 2. masterを元に戻す(プッシュ前の状態)
git checkout master
git reset --hard origin/master
# または、特定のコミットまで戻す
git reset --hard <commit-hash>
# 3. masterを強制プッシュ(注意!)
git push origin master --force
# 4. feature ブランチをプッシュ
git checkout feature/3-add-search-functionality
git push -u origin feature/3-add-search-functionality
# 5. 通常通りPRを作成
gh pr create --title "..." --body "...Closes #3..."
注意: --force プッシュはチーム開発では危険です。個人リポジトリでのみ使用してください。
方法2: 今回は諦めて次回から正しく実施
今回は手動でIssueをクローズし、次回から正しいワークフローを実践する方が安全です:
# Issueにコメントを追加
gh issue comment 3 --body "検索機能を実装しました。
実装内容:
- FlexSearchによる全文検索
- MDC AST対応
- 日本語・英語検索対応
関連コミット: d7e6594, e7a3da1, cbc5aeb, 9cd9b7e"
# Issueを手動でクローズ
gh issue close 3
チーム開発での追加ルール
ブランチ保護
masterブランチを保護して、直接プッシュを防止:
- GitHub リポジトリ → Settings → Branches
- "Add rule" をクリック
- Branch name pattern:
master - 以下をチェック:
- ✅ Require pull request before merging
- ✅ Require approvals (1人以上)
- ✅ Dismiss stale approvals
レビュープロセス
# PR作成時にレビュアーを指定
gh pr create --reviewer username1,username2
# レビューコメントに返信
gh pr comment 4 --body "ご指摘ありがとうございます。修正しました。"
# 修正をプッシュ(同じブランチに追加コミット)
git add .
git commit -m "fix: レビュー指摘事項を修正"
git push
まとめ
✅ 正しいワークフロー:
Issue作成 → ブランチ作成 → 実装 → PR作成(Closes #N) → レビュー → マージ → Issue自動クローズ
✅ ベストプラクティス:
- Issue番号をブランチ名に含める
- PRのdescriptionに
Closes #Nを記載 - PRで変更内容を詳しく説明
- masterに直接プッシュしない
✅ 次回の実践:
git checkout -b feature/issue番号-機能名- 実装・コミット
git push -u origin ブランチ名gh pr createでCloses #Nを含むPRを作成- PRマージでIssue自動クローズ
このワークフローを実践することで、変更履歴が整理され、レビューがしやすく、Issueとの紐付けも自動化されます。