with one click
review-agent
// `.agent/agents/reviewer.md` を入口に、PR差分やローカル差分を日本語でレビューするスキル。ユーザーが「レビュー」「PR確認」「差分確認」「コードレビュー」「reviewer」「レビュー指摘に対応」などを依頼したときに使う。GitHubレビュー指摘の対応(分類・方針提示・Worker委譲・resolved化)も扱う。
// `.agent/agents/reviewer.md` を入口に、PR差分やローカル差分を日本語でレビューするスキル。ユーザーが「レビュー」「PR確認」「差分確認」「コードレビュー」「reviewer」「レビュー指摘に対応」などを依頼したときに使う。GitHubレビュー指摘の対応(分類・方針提示・Worker委譲・resolved化)も扱う。
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | review-agent |
| description | `.agent/agents/reviewer.md` を入口に、PR差分やローカル差分を日本語でレビューするスキル。ユーザーが「レビュー」「PR確認」「差分確認」「コードレビュー」「reviewer」「レビュー指摘に対応」などを依頼したときに使う。GitHubレビュー指摘の対応(分類・方針提示・Worker委譲・resolved化)も扱う。 |
.agent/agents/reviewer.md を主担当として、バグ・回帰・セキュリティ・キャッシュ整合性・SSOT 違反を優先してレビューする。
PR 作成や説明文の確認では .github/codex-pr-rules.md も参照する。
AGENTS.md.agent/agents/reviewer.md.github/codex-pr-rules.mdassets/docs/git diffdb() ヘルパーと実行直前エスケープを確認する。$modx 参照、生SQL、compact() の混入を確認する。はい の場合のみ実行する。/resolve-review を経由せず直接修正・push した場合も、push 完了後に必ずスレッドの resolved 化をユーザーに確認してから実行する(スキップ禁止)。git diff と変更ファイルを確認する。.agent/agents/reviewer.md の観点でレビューする。.github/codex-pr-rules.md に照らしてタイトル、説明、ラベル方針を確認する。.agent/agents/reviewer.md の観点でレビューする。GitHub PR のレビューコメントを取得し、各指摘を評価・対応・解決する。 実装・コミット・push を伴う場合は Worker エージェントに委譲し、review-agent 自身は方針整理、確認、GitHub 上の返信・resolved 化のみ担当する。
ステップ 1: 指摘の収集と評価
まず GraphQL で未解決スレッド一覧を取得する(REST /comments には isResolved がないため、resolved 済みスレッドを分類対象から除外するために必要):
# PR のレビュースレッドを全件取得し、未解決(isResolved == false)のものだけを対象にする
# GitHub GraphQL API は reviewThreads にフィルタ引数がないため全件取得後に選別する
# pageInfo.hasNextPage が true の場合は after: "<endCursor>" を追加して再実行する
gh api graphql -f query='
{
repository(owner: "<owner>", name: "<repo>") {
pullRequest(number: <PR番号>) {
reviewThreads(first: 100) {
pageInfo { hasNextPage endCursor }
nodes {
id
isResolved
comments(first: 1) {
nodes { databaseId body }
}
}
}
}
}
}'
# isResolved == false のスレッドのみを分類・解決対象にする
# 取得した databaseId は REST /comments のスレッド先頭コメント(in_reply_to_id が null)の id と一致する
# 返信コメント(in_reply_to_id がある)は in_reply_to_id を先頭コメントの id と照合してスレッドを特定する
次に、インラインレビューコメントとレビュー本文を取得する:
# インラインレビューコメント(差分行への指摘、スレッド単位で管理される)
gh api --paginate "/repos/<owner>/<repo>/pulls/<PR番号>/comments"
# レビュー本文(スレッドを持たないため resolved 化不可。対応要否を評価し、対応する場合はステップ2の方針一覧に含める)
gh api --paginate "/repos/<owner>/<repo>/pulls/<PR番号>/reviews"
取得した /reviews の結果は、state が DISMISSED のものを除外する。APPROVED は state のみで除外せず、本文がある場合は評価対象に含める(本文が空の APPROVED は除外してよい)。CHANGES_REQUESTED・COMMENTED は従来どおり対象とし、同一レビュアーが複数回投稿している場合は全件を評価対象とする。
/resolve-review を再実行する場合は、PR の既存コメント一覧(gh pr view <PR番号> --comments)を確認し、同じ review_id で既に返答済みの review body はこの段階で評価対象から外す(ステップ2の方針一覧に重複項目を残さないため)。
インラインコメントの各スレッドおよび /reviews の各レビュー本文をそれぞれ1単位として以下の基準で分類する(スレッド内の複数コメントは一括で判断する):
| 判定 | 基準 |
|---|---|
| 対応する | バグ・セキュリティ・動作不正・明確な設計誤り |
| 対応を検討 | 可読性・保守性に影響するが実装シンプルなもの |
| 対応しない | 好みのスタイル・過剰なエッジケース対応・シンプルさを損なう変更 |
「対応しない」と判断する典型例:
ステップ 2: 対応方針の提示(実施前に確認)
ユーザーに対応方針の一覧を提示し、確認を取ってから実装を進める。出力形式は ## 出力形式 を参照。
ステップ 3: 修正の実装
対応するスレッドの修正を実装する(Worker エージェントに委譲)。 Worker への委譲時は「修正内容、検証手順、検証結果の記録」を成果物として求める。
ステップ 4: 検証
コミット前に変更内容を確認する。
ステップ 5: Worker によるコミットと push
コミットと push は Worker に委譲し、次の手順で実行させる。
git add -p # または対象ファイルを指定
# type は変更内容に応じて選択(fix / refactor / docs / chore など)
# scope は省略可能
git commit -m "<type>: レビュー指摘に対応"
git push
Worker による修正結果を確認した後、コミットと push が必要な場合は、まずユーザーに次の1問だけ確認する。
コミットして push しますか? はい・いいえ
はい の場合のみ、Worker にコミットと push を行わせる。いいえ の場合はローカル修正と検証結果だけを報告し、GitHub への書き込みは行わない。
ステップ 6: GitHub上でのコメント解決
ステップ5の完了後、まずユーザーに次の1問だけ確認する。
GitHub上へ返信・コメントし、review thread を resolved 化しますか? はい・いいえ
はい の場合のみ、このステップを実行する。いいえ の場合は GitHub への書き込みを行わず、ローカル修正と push の完了だけを報告して終了する。
対応したスレッドを resolved にする(コードへの書き込みではなく GitHub 上のスレッド状態変更のため review-agent が直接実行する)。ステップ1で取得した thread の id を使う:
# 対応済みスレッドを resolve(id はステップ1で取得した thread の id)
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "<thread_id>"}) {
thread { isResolved }
}
}
'
対応しないスレッドは、スレッドへの返信として理由を残した上で resolved にする(再実行時の重複を防ぐため):
# 各スレッドに返信(comment_id はステップ1で取得した先頭コメントの databaseId)
gh api /repos/<owner>/<repo>/pulls/<PR番号>/comments/<comment_id>/replies \
-f body="見送り理由の説明"
# 返信後に resolved 化(対応済みスレッドと同様)
/reviews 取得のレビュー本文に対する対応完了・見送り理由は PR コメントとして残す。本文には対象 review の id(GitHub が発行する一意な数値 ID)を含め、再実行時にステップ1で除外できるようにする:
gh pr comment <PR番号> --body "@レビュアー名(review_id: 123456789): 対応内容または見送り理由"
ステップ 7: 完了報告
対応済み・見送りの一覧をユーザーに報告する。
差分レビュー(/review-diff / /review-pr):
セクション見出し(Findings / Open Questions / Tests)はツール間で共通の固定ラベルとして英語のまま使用する。指摘内容・確認事項・テスト説明は日本語で記載する。
指摘がある場合:
**Findings**
- [High] path/to/file.php:123: 指摘内容。影響と修正方針。
- [Medium] path/to/file.php:45: 指摘内容。影響と修正方針。
**Open Questions**
- 確認事項
**Tests**
- 実行済み、または未実行の理由
指摘がない場合:
重大な問題は見つかりませんでした。
**Tests**
- 実行済み、または未実行の理由
/resolve-review の出力:
方針確認フェーズ(ステップ2):
レビュー対応方針:
- 対応する
- スレッド xxxx(先頭コメント概要)→ [修正方針]
- /reviews本文 @レビュアー名(review_id: XXXX)→ [修正方針]
- 対応を検討(ユーザー判断を仰ぐ)
- スレッド xxxx(先頭コメント概要)→ [対応した場合の影響と見送りのリスク]
- /reviews本文 @レビュアー名(review_id: XXXX)→ [対応した場合の影響と見送りのリスク]
- 対応しない(理由付き)
- スレッド xxxx(先頭コメント概要)→ 見送り理由
- /reviews本文 @レビュアー名(review_id: XXXX)→ 見送り理由
完了報告(ステップ7):
対応完了:
- スレッド xxxx(先頭コメント概要)→ 対応内容
- /reviews本文 @レビュアー名(review_id: XXXX)→ 対応内容
見送り:
- スレッド xxxx(先頭コメント概要)→ 見送り理由
- /reviews本文 @レビュアー名(review_id: XXXX)→ 見送り理由