원클릭으로
resolve-reviews
PRのレビューコメントを取得し、修正対応またはコメント返信を行う。PR番号・URLを受け取るか、直前に作成したPRを対象とする。ユーザーが「レビュー対応」「レビュー修正」と言ったとき、または /resolve-reviews を実行したときに使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
PRのレビューコメントを取得し、修正対応またはコメント返信を行う。PR番号・URLを受け取るか、直前に作成したPRを対象とする。ユーザーが「レビュー対応」「レビュー修正」と言ったとき、または /resolve-reviews を実行したときに使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
dev系パイプライン(dev-pr-review / dev-pr-review-resolve / dev-issue-implement / dev-issue-review)を人間の確認なしで自律的に1タスク回すオーケストレーター。main を最新化した後、レビュー系を優先する固定順で対象を探し、最初に見つかった1件を対応するスキルで処理する。途中で解決済みIssueを見つけたら理由を書いてcloseする。needs-info によるユーザー確認待ちは禁止で、必ず自律判断する。ユーザーが「devパイプライン回して」「自律で開発回して」と言ったとき、または /dev-hotl を実行したときに使用。
reviewed ラベルがついたIssueを見つけて実装する。対象Issueに WIP ラベルをつけ、git worktree で main を汚さずに開発し、テストがPASSすることを確認した上でIssueに紐づくPR(Closes
現在のリポジトリの開発Issueが妥当かどうかをレビューする。リポジトリの目的に沿っているか、調査内容・設計に問題がないかをチェックし、WebSearch や Parallel Search MCP で裏取りして本文を追記・修正する。レビュー着手時に in-review ラベルで排他し、問題なければ reviewed ラベルをつけ、あまりに見当違いな場合は理由を記述してcloseする。Issue番号・URLを引数に取るか、未レビューのIssueを自動で探す。ユーザーが「Issueレビュー」「Issueの妥当性チェック」と言ったとき、または /dev-issue-review を実行したときに使用。
reviewed ラベルがついたPRを見つけて、レビュー指摘事項を検討・修正する。着手時に in-review ラベルで排他する。妥当な指摘は worktree 上で修正し、反論がある場合は根拠をコメントに記述して、各レビュースレッドをresolveしていく。すべてのレビューをresolveしたら必ずmergeする。PR番号・URLを引数に取るか、対応待ちのPRを自動で探す。ユーザーが「レビュー指摘を解消して」「reviewedのPRを片付けて」と言ったとき、または /dev-pr-review-resolve を実行したときに使用。
in-review ラベルがついていないオープンPRを見つけてレビューする。git worktree でPRのコードをローカルに取得し、変更箇所以外との整合性・紐づくIssue通りの実装かを確認する。問題なければmerge、軽微な指摘なら修正してmerge、問題が多い場合はレビューを記述して reviewed ラベルをつけ、見当違い・修正済みのPRは理由を記述してcloseする。PR番号・URLを引数に取るか、レビュー待ちのPRを自動で探す。ユーザーが「PRレビューして回して」「レビュー待ちPRを処理して」と言ったとき、または /dev-pr-review を実行したときに使用。
ローカルにインストール済みの Codex CLI (OpenAI) を使って、別 LLM からのコードレビュー・セカンドオピニオン・意見交換を取得する。Claude が書いたコードに対して「別モデルの目」を入れたいとき、設計判断で複数モデルの見解を突き合わせたいとき、`codex` / `/codex` と言われたときに使用。
| name | resolve-reviews |
| description | PRのレビューコメントを取得し、修正対応またはコメント返信を行う。PR番号・URLを受け取るか、直前に作成したPRを対象とする。ユーザーが「レビュー対応」「レビュー修正」と言ったとき、または /resolve-reviews を実行したときに使用。 |
Fetch review comments from a pull request, make code fixes for valid feedback, and reply to comments that don't warrant changes.
入力に応じてPRを特定する:
PR番号が指定された場合:
# PR番号で直接取得
gh pr view <number> --json number,url,headRefName,baseRefName,title,state
PR URLが指定された場合:
URLからオーナー・リポジトリ・PR番号を抽出する。
例: https://github.com/owner/repo/pull/123 → owner=owner, repo=repo, number=123
gh pr view <url> --json number,url,headRefName,baseRefName,title,state
何も指定されていない場合:
直前に作成したPRを対象とする:
# 現在のブランチのPRを確認
gh pr view --json number,url,headRefName,baseRefName,title,state 2>/dev/null
# なければ最新のPRを取得
gh pr list --author "@me" --state open --limit 1 --json number,url,headRefName,baseRefName,title
PRが見つからない場合はユーザーに通知して終了する。 PRがクローズ済みまたはマージ済みの場合はその旨を伝えて終了する。
PRのブランチに切り替える(まだの場合):
CURRENT=$(git branch --show-current)
PR_BRANCH=<headRefName from Step 1>
if [ "$CURRENT" != "$PR_BRANCH" ]; then
# 未コミットの変更を先に確認する
git status --porcelain
# 変更がなければチェックアウト
git checkout "$PR_BRANCH"
git pull origin "$PR_BRANCH"
fi
重要: 未コミットの変更がある場合は、チェックアウトの前にユーザーに通知してスタッシュまたはコミットを提案する。変更を失わないよう、必ずチェックアウト前に確認する。
まずリポジトリのオーナー・リポジトリ名と自分のユーザー名を取得する:
# owner/repo を取得
gh repo view --json nameWithOwner -q '.nameWithOwner'
# 自分のユーザー名を取得(フィルタリング用)
gh api /user -q '.login'
gh CLI でレビューコメントを取得する(以下2つは並列実行可能):
# レビューコメント(diff上のコメント)を取得
gh api repos/{owner}/{repo}/pulls/{number}/comments --paginate
# PR全体のレビュー(approve/request changes等)も確認
gh api repos/{owner}/{repo}/pulls/{number}/reviews --paginate
レビューコメントが存在しない場合はユーザーに通知して終了する。
フィルタリング:
reviews の state が PENDING のものは未提出の下書きレビューなので無視する。COMMENTED、CHANGES_REQUESTED、APPROVED のレビューのみ対象とする。user.login が自分のユーザー名と一致するコメントは対象外。in_reply_to_id で連結)の最後の返信が自分のユーザー名の場合、そのスレッドは対応済みとみなしスキップする。レビュワーの分類:
各コメントの投稿者がAI(ボット)か人間かを判定する:
user.type が "Bot" のユーザー(例: github-actions[bot], copilot-pull-request-reviewer[bot], coderabbitai[bot] 等)user.type が "User" のユーザーこの分類は Step 9 でスレッドをresolveするかどうかの判定に使用する。
各コメントについて以下の情報を抽出する:
id: コメントID(返信時に使用)path: 対象ファイルパスline / original_line: 対象行番号body: コメント内容user.login: コメント投稿者in_reply_to_id: 返信先コメントID(スレッドの判定に使用)diff_hunk: 該当箇所のdiff重要 — Copilot (copilot-pull-request-reviewer[bot]) の指摘は大げさである前提で扱う:
Copilot は事実誤認は少ないが、影響範囲やリスクを過大に見積もる傾向が強い。典型例:
そのため Copilot の指摘は 指摘内容を鵜呑みにせず、影響範囲とリスクを自分で見積もってから 対応可否を判断する。具体的には:
他の Bot レビュワー (CodeRabbit, chatgpt-codex-connector 等) も大げさ寄りの傾向はあるが、Copilot ほど顕著ではない。 いずれも事実確認は行うが、Copilot は特に厳しめに疑う。
各レビューコメントについて以下の分析を行う:
path で指定されたファイルを Read ツールで読み込むdiff_hunk と行番号からコンテキストを把握する妥当と判定するケース:
妥当でないと判定するケース:
全コメントの分析結果をユーザーに提示する:
PR #<number>: <title>
レビューコメント: <total>件
--- 修正対応するコメント (<count>件) ---
[1] @<reviewer> [Bot] - <file>:<line>
コメント: <comment body (abbreviated)>
対応方針: <what will be changed>
→ resolve: Yes(AIレビュワー)
[2] @<reviewer> - <file>:<line>
コメント: <comment body (abbreviated)>
対応方針: <what will be changed>
→ resolve: No(人間レビュワー)
--- 返信のみ行うコメント (<count>件) ---
[3] @<reviewer> [Bot] - <file>:<line>
コメント: <comment body (abbreviated)>
返信内容: <draft reply>
→ resolve: Yes(AIレビュワー)
[4] @<reviewer> - <file>:<line>
コメント: <comment body (abbreviated)>
返信内容: <draft reply>
→ resolve: No(人間レビュワー)
ユーザーの確認を得てから次のステップに進む。 ユーザーが個別のコメントについて対応方針を変更したい場合はそれに従う。
妥当と判定されたコメントに対して、コード修正を適用する:
修正時の注意点:
suggestion ブロック(suggestion` ... )を含む場合は、そのコードを正確に適用する修正が正しく適用されたことを確認する:
# 変更内容を確認
git diff
# プロジェクトにリンター・型チェックがあれば実行を提案
# 例: npm run lint, npx tsc --noEmit, etc.
問題がある場合はユーザーに報告して修正する。
変更をコミットしてプッシュする:
# 修正ファイルを個別にステージング
git add <file1> <file2> ...
# コミット
git commit -m "<type>: レビュー指摘に対応 @<branch-name>"
# プッシュ
git push origin <branch-name>
コミットメッセージの <type> はレビュー修正の内容に応じて選択する:
fixrefactorchore各レビューコメントに対して返信を投稿する。
返信エンドポイント(重要): pull_number を URL に含める形式を使うこと。pulls/comments/{id}/replies だけでは 404 になる。
gh api repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies \
-X POST \
-f body="<reply body>"
返信スタイル — レビュワー別に厳格に分ける:
AIレビュワー (user.type == "Bot") への返信:
人間レビュワーへの返信:
例(AIレビュワー向け):
良い例: ai-agents/.env.example に KIGYO_DB_DATABASE_URL のダミー値を追加。
悪い例: ご指摘ありがとうございます。ai-agents/.env.example に KIGYO_DB_DATABASE_URL のダミー値を追加しました。
良い例: CI 専用 seed であり実 DB へ接続する経路はないため現状維持。
悪い例: ご指摘ありがとうございます。CI 専用 seed であり実 DB へ接続する経路はないため、現状維持とさせてください。
AIレビュワーのスレッドをresolveする:
レビュワーがAI(user.type == "Bot")の場合、返信後にスレッドをresolveする。
人間レビュワーのスレッドはresolveしない(人間自身が確認してresolveすべきため)。
resolveにはGraphQL APIを使用する。まず対象スレッドの threadId を取得し、resolveReviewThread ミューテーションを実行する:
# PR のレビュースレッド一覧を取得(threadId とコメントの対応を得る)
gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) {
nodes {
databaseId
}
}
}
}
}
}
}
' -f owner="{owner}" -f repo="{repo}" -F number={number}
取得した reviewThreads から、AIレビュワーのコメントID(databaseId)に一致するスレッドの id(GraphQLのノードID)を特定する。
# スレッドをresolveする
gh api graphql -f query='
mutation($threadId: ID!) {
resolveReviewThread(input: {threadId: $threadId}) {
thread {
isResolved
}
}
}
' -f threadId="{thread_node_id}"
注意:
isResolved: true)のスレッドはスキップする完了後、対応結果のサマリーを表示する:
--- レビュー対応完了 ---
PR: #<number> <title>
修正コミット: <commit hash>
対応済み: <count>件
返信のみ: <count>件
Resolved: <count>件(AIレビュワーのスレッド)
未Resolve: <count>件(人間レビュワーのスレッド)
PR URL: <url>
返信コメントの言語は、レビューコメントの言語に合わせる:
suggestion ブロックのコードは正確にそのまま適用する(改変しない)git add -A や git add . は使用しないgit push --force は絶対に使用しないrepos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies 形式を使う(pull_number 省略形は 404 になる)user.type == "Bot")のスレッドは返信後にresolveするユーザー: /resolve-reviews 42
1. gh pr view 42 → PR #42: feat: add user authentication
2. ブランチ feat/add-user-auth にチェックアウト
3. レビューコメント3件を取得
4. 分析結果を提示:
[1] @reviewer - src/auth.ts:15 → 修正対応(バリデーション不足)
[2] @reviewer - src/auth.ts:30 → 修正対応(エラーハンドリング)
[3] @reviewer - src/utils.ts:5 → 返信のみ(好みの問題)
5. ユーザー確認 → 承認
6. src/auth.ts を修正
7. git add src/auth.ts && git commit && git push
8. 3件のコメントに返信を投稿
9. サマリー表示
ユーザー: /resolve-reviews https://github.com/user/repo/pull/42
→ 上記と同じフロー
ユーザー: /resolve-reviews
1. 現在のブランチのPRを検索 → PR #42 を発見
2. 以降同じフロー
ユーザー: /resolve-reviews 42
1. gh pr view 42 → PR #42
2. レビューコメントを取得 → 0件
3. 「レビューコメントはありません。」と通知して終了
レビューコメントに以下のような suggestion ブロックが含まれる場合:
```suggestion
const result = items.filter(item => item.active)
```
→ 該当行を suggestion のコードで正確に置換する。コードを改変せずそのまま適用する。