--- name: pr-review description: >- PR をレビューし、結果を GitHub にインラインコメントとして投稿する。PR 番号を引数に取る。 argument-hint: "[PR number]" disable-model-invocation: true --- Before executing, read the [Claude Code / Codex runtime instructions](../../references/runtime.md). PR をレビューし、GitHub にインラインコメント付きレビューとして投稿する。 ## 1. PR 番号の解決 - `$ARGUMENTS` が指定されていればそれを PR 番号として使用する - 指定がなければ `gh pr list` で現在のリポジトリの PR 一覧を表示し、AskUserQuestion でユーザーにレビュー対象を選択させる ## 2. PR 情報の取得 以下を **並列で** 取得する: - `gh pr view ` でタイトル、説明、ステータスを取得 - `gh pr diff ` で差分を取得 - `gh pr view --json headRefOid` で head commit SHA を取得(レビュー投稿に必要) ## 3. サブエージェントによる並列レビュー 以下の 3 つのサブエージェントを **並列に** spawn する。Claude Code では Agent ツールと下記の `subagent_type` を使う。Codex では [runtime.md](../../references/runtime.md) に従い、対応する定義本文をそれぞれ汎用サブエージェントへ渡す。各エージェントには PR のタイトル・説明・差分をプロンプトとして渡す。 ### pr-review-bugs(subagent_type: github:pr-review-bugs) バグ・セキュリティ問題の検出。 ### pr-review-rules(subagent_type: github:pr-review-rules) AGENTS.md / CLAUDE.md / 参照される規約ファイルへの準拠チェック。 ### pr-review-quality(subagent_type: github:pr-review-quality) コード品質(DRY・一貫性・パフォーマンス)のレビュー。 **プロンプトに含める情報:** ``` PR #: ## 説明 <PR description> ## 変更ファイル一覧 <diff に含まれる全ファイルパスのリスト> ## 差分 <diff output> ``` **重要:** 各エージェントへのプロンプトに「変更ファイル一覧」を明示的に含めること。これにより、エージェントが差分内の全ファイルを漏れなくレビューできる。 ## 4. 結果の統合 全エージェントから返された JSON 配列をマージし、以下を行う: 1. 同一ファイル・同一行への重複指摘を統合(より高い severity を採用) 2. confidence 70 未満の指摘がもし含まれていれば除外 3. severity 順(Critical → Medium → Low)でソート ## 5. レビュー内容の確認 投稿前に、レビュー内容をチャットに表示する。表示形式: ``` ## レビュー結果 — PR #<number> **総合コメント:** (サマリテキスト) **インラインコメント (N件):** 1. [Critical] `path/to/file.ts` L42 (コメント内容) 2. [Medium] `path/to/file.ts` L78 (コメント内容) ``` 指摘がない場合は、レビューした内容の概要と良い点のみの総合コメントで LGTM とする旨を表示する。 その後 AskUserQuestion で以下の選択肢を提示する: - **投稿する** — そのまま GitHub に投稿 - **修正してから投稿** — ユーザーのフィードバックを受けて内容を調整 - **キャンセル** — 投稿せずに終了 ## 6. GitHub への投稿 **重要: `gh api` の `--field` は `comments` 配列を正しく扱えない(文字列として送信され 422 エラーになる)。必ず JSON ファイル + `--input` 方式を使うこと。** 1. Bash の `cat > <scratchpad>/pr-review.json << 'EOF'` で JSON ファイルを作成する。置き場所はセッションの scratchpad にする(無ければ `mktemp -d` で作ったディレクトリ)。`/tmp` 直下の固定名は、並行するセッションどうしで上書きし合う 2. `gh api ... --input <scratchpad>/pr-review.json` で投稿する ```bash # 1. JSON ファイルを作成 cat > <scratchpad>/pr-review.json << 'EOF' { "commit_id": "<head_commit_sha>", "body": "<総合コメント>", "event": "COMMENT", "comments": [ { "path": "<file>", "line": <line>, "side": "RIGHT", "body": "**[severity]** comment" } ] } EOF # 2. 投稿 gh api repos/{owner}/{repo}/pulls/{number}/reviews \ --method POST \ --input <scratchpad>/pr-review.json \ --jq '.html_url' ``` - `body`: 総合レビューコメント(サマリ + 各指摘の概要) - `comments`: インラインコメントの配列。各コメントに `path`、`line`、`side: "RIGHT"`、`body`(重要度プレフィックス付き)を含める - `event`: `"COMMENT"` - 指摘がない場合はインラインコメントなしで総合コメント(LGTM)のみ投稿する(`comments` を空配列 `[]` にするか省略する) ## 7. 完了報告 投稿が成功したら、レビューの URL をユーザーに表示する。