すべての PR をレビューする GitHub Action
上級
- Claude Code のヘッドレス実行を pull_request ワークフローに組み込み、diff をレビューしてコメントする
- permissions ブロックをコメント専用に設定し、contents: write が越えてはならない一線である理由を説明する
- プルリクエストの内容を、その実態どおり信頼できない入力として扱う
- diff が大きくなってもレビューのコストを一定の範囲に抑える
- コメントが折りたたまれずに読まれるよう、プロンプトを書く
価値の高い定番の自動化: Claude にすべてのプルリクエストをレビューさせ、その指摘をコメントとして投稿する — CI でヘッドレス実行します。ここでは全体像と、安全に保つためのガードレールを示します。
何をするか
PR ごとに: diff をチェックアウトし、バグ、エッジケース、規約の問題について Claude にレビューさせ、コメントを投稿します。判断は引き続き人間が行い、Claude は素早い一次チェックを提供するだけです。
Guided walkthrough1 of 4
- 浅いクローンではベースブランチが見えないため、diff が空になり、レビューは何もないものに対する自信満々の承認に見えてしまいます。フル深度で取得してください。
- ベース ref と HEAD の差分を取ってディスクに書き出します。シェル変数ではなくアーティファクトとして保持すると、非常に大きな diff でコマンドラインが壊れるのを防げます。
- プロンプト 1 回、パス 1 回、出力は Markdown として取得。ツールなし、リポジトリへの書き込みなし — このステップは読み取りとテキスト生成だけで済みます。
- gh CLI かアクションを使います。何らかの書き込み権限が必要なのはこのステップだけで、必要なのは pull-requests の書き込みだけです。
ワークフロー(スケッチ)
name: Claude PR review
on: pull_request
permissions:
contents: read
pull-requests: write # to comment — NOT write to code
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- name: Review the diff
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
git diff origin/${{ github.base_ref }}...HEAD > /tmp/diff.patch
claude -p "Review this diff for correctness bugs, missing edge cases, and
security issues. Report ONLY high-confidence findings as a Markdown
checklist with file:line. Diff:" < /tmp/diff.patch > /tmp/review.md
# then post /tmp/review.md as a PR comment (e.g. with the gh CLI or an action)
(正確なヘッドレスの呼び出し方は異なる場合があります — ドキュメントを参照してください。原則は、diff を渡し、Markdown を取得し、投稿する、です。)
ガードレール(自律実行の堅牢化を読んでください)
CI での最小権限
- コメントのみ。
pull-requests: writeを付与し、contents: writeは付与しない — ボットがコードを push してはいけません。 - トークンのスコープを絞る。信頼できない PR の内容を読むジョブには、デプロイやシークレットへのアクセスを決して公開しない。
- PR の内容は信頼できないものとして扱う — プロンプトインジェクションを含みうる。ジョブに重大な結果を伴う操作をさせない。
- コストに上限を設ける — 大きな diff はトークンを消費する。変更されたファイルだけをレビューすることを検討する。
騒がしくせず、役に立たせる
- 確信度の高い指摘だけを求める — 細かい指摘の山は無視されます。
- 一次チェックにとどめ、マージの判断は人間が行う。
The review prompt — tuned for a comment people actually read
Review this diff for correctness bugs, missing edge cases, and security issues. Rules for your output: - Report ONLY high-confidence findings. If you are unsure, leave it out. - One Markdown checklist item per finding, each starting with file:line. - State the concrete failure: what input or state leads to what wrong result. - No style nitpicks, no praise, no summary of what the diff does. - If you find nothing high-confidence, say exactly that in one line. Diff:
Check yourself
0/3- ジョブ全体は: フル深度のチェックアウト、diff をファイルに、ヘッドレスで 1 パス、Markdown を投稿。4 ステップのうち書き込みアクセスが必要なのは 1 つだけ。
- pull-requests: write と contents: read。コントリビューターが書いた内容を読むジョブでは、決して contents: write にしない。
- fetch-depth: 0 にしないと diff が空になり、レビューが健康診断書のように読めてしまう。
- PR の内容は信頼できず、プロンプトインジェクションを含みうる。制御は最小権限であり、プロンプトの言い回しは境界ではない。
- 確信度の高い指摘だけを、file:line 付きで求める。細かい指摘の山は折りたたまれ、自動化は無視されて死ぬ。
- diff が大きくなるにつれてコストに上限を設ける — 変更されたファイルだけをレビューするのが通常のレバー。
- これは一次チェック。マージの判断は引き続き人間が行う。