PR Review Responder
GitHub PRのレビューコメントを分析し、対応が必要かどうか判断してユーザーに提案する。
Workflow
1. レビューコメント取得
bash
# PR番号指定の場合
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments --paginate \
--jq '.[] | {id, body, user: .user.login, path, line: (.line // .original_line), diff_hunk: ((.diff_hunk // "") | split("\n") | .[-5:] | join("\n")), in_reply_to_id, created_at}'
# 現在のブランチから自動検出
gh pr view --json number -q '.number'
2. コメント分析・分類
各コメントを以下のカテゴリに分類:
| カテゴリ | 説明 | 対応 |
|---|---|---|
| 必須対応 | バグ、セキュリティ問題、ロジックエラー | コード修正を提案 |
| 改善推奨 | リファクタリング、コードスタイル、可読性向上 | 修正するか判断を委ねる |
| 対応不要 | 誤解、仕様通り、将来課題、過剰な指摘 | 理由をリプライしResolve |
3. ユーザーへの提案
分析結果をまとめ、AskUserQuestionで判断を委ねる:
code
各コメントについて: - コメント内容の要約 - 分類(必須/推奨/不要) - 推奨アクション - 理由 選択肢: 1. 提案通りに自動対応 2. 個別に確認しながら対応 3. スキップ
4. 対応実行
必須対応・改善推奨の場合
- •該当ファイルを読み込む
- •コード修正を実施
- •修正完了をレビューコメントへの直接のリプライで報告 (commit hashを含む) ※ コメントの種類が同一の場合を除き、コメントごとに1コミットとしてください。
対応不要の場合
- •不要と判断した理由を明確に説明するリプライを作成
- •
gh apiでリプライを投稿 - •コメントをResolve
bash
# リプライ投稿(レビューコメントへの直接のリプライ)
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments \
-f body="説明文" \
-F in_reply_to={comment_id}
# Resolve (GraphQL)
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "THREAD_ID"}) {
thread { isResolved }
}
}'
⚠️ 重要な注意事項
Copilot へのメンションは必ずレビューコメントへの直接のリプライで行うこと
❌ NG: gh pr comment {pr_number} で PR 全体にコメント
- •Copilot が新しいタスクを与えられたと勘違いして誤動作する
✅ OK: gh api repos/{owner}/{repo}/pulls/{pr_number}/comments -F in_reply_to={comment_id} でレビューコメントに直接リプライ
- •該当のレビュースレッドへの返信として正しく認識される
分析の判断基準
対応不要と判断するケース
- •現在のコードが意図的な設計で、コメントが誤解に基づく
- •指摘が将来の改善課題であり、今回のPRスコープ外
- •既に別の方法で対処済み
- •過剰な最適化や不要なリファクタリングの提案
対応必要と判断するケース
- •バグや潜在的な問題の指摘
- •セキュリティ上の懸念
- •API仕様やドキュメントとの不整合
- •明確なコード品質の問題