cc-pr-review-ci について
cc-pr-review-ciは、12の領域からプルリクエストを審査し、構造化された指摘を生成する単一エージェント用スキルです。審査結果の作成とGitHubのインラインコメント投稿を分離し、CIでは投稿を行いません。
主な機能
- 0112領域を順に審査
- 02却下済み指摘の読み込みと除外
- 03指摘をreview.jsonに出力
- 04別スクリプトでGitHubインラインコメントを投稿
- 05ローカル実行ではorigin/mainと比較
活用シーン
- 01CIで構造化されたPRレビューを実行
- 02ローカル変更をorigin/mainと比較して審査
- 03コード変更がない却下済み指摘の再掲を回避
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ adrianbrowning/ agent-skills --skill cc-pr-review-ciインストール後、Claude Code で/cc-pr-review-ciを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
post-review.jsreferences/bug.mdcomments.mddevops.mdduplication.mdformat.mdholistic.mdperformance.mdreact-ts.mdscope.mdsecurity.mdtest-validity.mdtesting.mdthermo.md詳細
PR レビュー(単一エージェント、CI 対応)
12 のドメインにわたって PR を順番にレビューし、その後 review.json を作成します。別の投稿スクリプトが JSON を GitHub のインラインレビューコメントに変換します。
PR 番号が指定されていない場合は、origin/main と比較し、JSON を標準出力に出力します。
ステップ 0 — 過去の却下を読み込む(PR の実行時のみ)
PR 番号が指定されていない場合はスキップします。
この PR に対する既存のボットレビューをすべて取得します。
gh api repos/{owner}/{repo}/pulls/$PR_NUMBER/reviews \
--jq '[.[] | select(.body | test(""; "i")) | {id: .id, commit_id: .commit_id, submitted_at: .submitted_at}]'
見つかったボットレビューごとに、そのインラインコメントを取得します。
gh api repos/{owner}/{repo}/pulls/$PR_NUMBER/reviews/$REVIEW_ID/comments \
--jq '[.[] | {id: .id, body: .body, path: .path, line: (.line // .original_line), reactions: .reactions}]'
それらのインラインコメントに対する返信スレッドも取得します。
gh api repos/{owner}/{repo}/pulls/$PR_NUMBER/comments \
--jq '[.[] | select(.in_reply_to_id != null) | {id: .id, in_reply_to_id: .in_reply_to_id, body: .body}]'
却下された指摘ごとに 1 つのエントリ { id, path, line, commit_id } を含む SUPPRESSED_FINDINGS を作成します。commit_id は、過去のレビューが投稿されたコミットです。
過去のインラインコメントが次のいずれかに該当する場合、指摘は却下されたものとします。
- 👎 のリアクション(
.reactions["-1"] > 0)、または - 人間による返信に却下を示す表現が含まれている("intentional", "by design", "won't fix", "false positive", "ignore", "not applicable", "expected")
過去のコメント本文から指摘の id を抽出します。スクリプトが投稿する各インラインコメントの最初の行には、HTML コメント `` が含まれています。
例外処理 — 却下後にコードが変更されている場合は再評価します。 PR の差分には、PR で変更されたすべての行が常に含まれるため、代わりに過去のレビューのコミットと比較します。
HEAD_SHA=$(gh pr view $PR_NUMBER --json headRefOid --jq .headRefOid)
gh api repos/{owner}/{repo}/compare/$COMMIT_ID...$HEAD_SHA \
--jq '[.files[] | {filename: .filename, previous_filename: .previous_filename, patch: .patch}]'
commit_id ごとに 1 回実行します。path がファイルの filename または previous_filename と一致し、次のいずれかに該当する場合は、SUPPRESSED_FINDINGS からエントリを削除します。
- ハンクが指摘と重複している。各ハンクヘッダー
@@ -start,count +...について、旧側の区間はstartからstart + max(count, 1) - 1までです(countが省略されている場合は 1)。この区間がline - 5からline + 5までと交差する場合、重複とみなします。startだけでなく区間全体を確認してください。指摘よりかなり前から始まるハンクでも、指摘の行を含むことがあります。 - エントリに
lineがない(ファイル単位の指摘)。 - ファイルに
patchがない(バイナリまたはサイズが大きすぎて差分を取得できない)。
比較の呼び出しが失敗した commit_id に対するエントリもすべて削除します(例:コミットが強制プッシュによって消えている場合)。
過去のレビューがない場合、または却下された指摘がない場合は、SUPPRESSED_FINDINGS は空です。
ステップ 1 — 差分と PR のメタデータを取得する
- PR 番号が指定されている場合 →
gh pr view $PR_NUMBER(タイトルと本文。スコープドメインで使用)およびgh pr diff $PR_NUMBER - PR 番号が指定されていない場合 →
git diff origin/main(メタデータなし。スコープドメインでは PR の作法チェックをスキップ)
ステップ 2 — 12 のドメインレビューを順番に実行する
各ドメインの参照ファイルを読み込み、差分を分析します。指摘には正確なファイルパスと行番号を記録します。
指摘を記録する前に、その計算された id({domain}-{kebab-title})がステップ 0 の後も SUPPRESSED_FINDINGS に含まれている場合は、何も出力せずにスキップします。
- セキュリティ —
Read .claude/skills/cc-pr-review-ci/references/security.md - パフォーマンス —
Read .claude/skills/cc-pr-review-ci/references/performance.md - React/TypeScript —
Read .claude/skills/cc-pr-review-ci/references/react-ts.md - テスト —
Read .claude/skills/cc-pr-review-ci/references/testing.md - テストの妥当性 —
Read .claude/skills/cc-pr-review-ci/references/test-validity.md - DevOps/CI —
Read .claude/skills/cc-pr-review-ci/references/devops.md - 全体的なレビュー —
Read .claude/skills/cc-pr-review-ci/references/holistic.md - 重複 —
Read .claude/skills/cc-pr-review-ci/references/duplication.md - バグの検出 —
Read .claude/skills/cc-pr-review-ci/references/bug.md - スコープ/作法 —
Read .claude/skills/cc-pr-review-ci/references/scope.md - 保守性 —
Read .claude/skills/cc-pr-review-ci/references/thermo.md - コメント —
Read .claude/skills/cc-pr-review-ci/references/comments.md
ステップ 3 — review.json を作成する
-
正確なスキーマについて、
.claude/skills/cc-pr-review-ci/references/format.mdを読みます。 -
すべてのドメインの指摘を単一の
findings配列にまとめます。{domain}-{kebab-title}形式に従って、各指摘に安定したidを割り当てます。 -
判定を決定します:
criticalが1つでもある場合 →CHANGES_REQUESTEDhighのみの場合 →APPROVED_WITH_SUGGESTIONSobservationsのみ、または指摘がない場合 →APPROVED
-
JSON を出力します:
- PR 実行時:
$REVIEW_OUTPUT_PATHに出力します(デフォルトは/tmp/review.json) - ローカル実行時(PR 番号なし):標準出力に出力します
- PR 実行時:
gh を呼び出して投稿しないでください。 GitHub への書き込みは、ワークフローの post-review.js ステップが処理します。