mcpField
C
cc-pr-review-ci

cc-pr-review-ci

github.com/adrianbrowningテスト・品質0445 回インストール5 週間前に更新
リポジトリ

cc-pr-review-ci について

cc-pr-review-ciは、12の領域からプルリクエストを審査し、構造化された指摘を生成する単一エージェント用スキルです。審査結果の作成とGitHubのインラインコメント投稿を分離し、CIでは投稿を行いません。

主な機能

  1. 0112領域を順に審査
  2. 02却下済み指摘の読み込みと除外
  3. 03指摘をreview.jsonに出力
  4. 04別スクリプトでGitHubインラインコメントを投稿
  5. 05ローカル実行ではorigin/mainと比較

活用シーン

  1. 01CIで構造化されたPRレビューを実行
  2. 02ローカル変更をorigin/mainと比較して審査
  3. 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.js
references/
bug.md
comments.md
devops.md
duplication.md
format.md
holistic.md
performance.md
react-ts.md
scope.md
security.md
test-validity.md
testing.md
thermo.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 に含まれている場合は、何も出力せずにスキップします。

  1. セキュリティ — Read .claude/skills/cc-pr-review-ci/references/security.md
  2. パフォーマンス — Read .claude/skills/cc-pr-review-ci/references/performance.md
  3. React/TypeScript — Read .claude/skills/cc-pr-review-ci/references/react-ts.md
  4. テスト — Read .claude/skills/cc-pr-review-ci/references/testing.md
  5. テストの妥当性 — Read .claude/skills/cc-pr-review-ci/references/test-validity.md
  6. DevOps/CI — Read .claude/skills/cc-pr-review-ci/references/devops.md
  7. 全体的なレビュー — Read .claude/skills/cc-pr-review-ci/references/holistic.md
  8. 重複 — Read .claude/skills/cc-pr-review-ci/references/duplication.md
  9. バグの検出 — Read .claude/skills/cc-pr-review-ci/references/bug.md
  10. スコープ/作法 — Read .claude/skills/cc-pr-review-ci/references/scope.md
  11. 保守性 — Read .claude/skills/cc-pr-review-ci/references/thermo.md
  12. コメント — Read .claude/skills/cc-pr-review-ci/references/comments.md

ステップ 3 — review.json を作成する

  1. 正確なスキーマについて、.claude/skills/cc-pr-review-ci/references/format.md を読みます。

  2. すべてのドメインの指摘を単一の findings 配列にまとめます。{domain}-{kebab-title} 形式に従って、各指摘に安定した id を割り当てます。

  3. 判定を決定します:

    • critical が1つでもある場合 → CHANGES_REQUESTED
    • high のみの場合 → APPROVED_WITH_SUGGESTIONS
    • observations のみ、または指摘がない場合 → APPROVED
  4. JSON を出力します:

    • PR 実行時:$REVIEW_OUTPUT_PATH に出力します(デフォルトは /tmp/review.json)
    • ローカル実行時(PR 番号なし):標準出力に出力します

gh を呼び出して投稿しないでください。 GitHub への書き込みは、ワークフローの post-review.js ステップが処理します。

コメント