PR作成時にClaudeで自動コードレビューする(GitHub Actions)
pull_request で Actions による自動レビュー(A)と、スキル+Cursor/Claude Codeへの手動指示(B)の違いを整理したうえで、claude-code-action の手順を示す
まず知っておきたいこと(よくある勘違い)
次の2つは 別物である。
| やりたいこと | 仕組み |
|---|---|
| A. PR が作られたら GitHub 上で無人レビュー | GitHub Actions など、GitHub がイベントで起動する処理が必要(この記事の本編)。 |
| B. レビュー観点をスキルにまとめ、IDE で都度レビュー | GitHub Actions は不要。.claude/skills/.../SKILL.md にルールを書き、Cursor や Claude Code に対して人がプロンプトで指示する方式である。 |
「スキルを置いている」だけでは PR 作成時に自動では動かない。自動にしたい場合は本編の A を別途組む。
この記事でやること(自動レビュー=上表の A)
GitHub 上で Pull Request が作られたり更新されたりしたタイミングで、人が操作しなくても Claude にコードレビューさせる。
実現の主役は GitHub Actions(GitHubに組み込まれたCI/CD=継続的インテグレーション・継続的デリバリーのプラットフォーム。リポジトリのイベントをトリガーにワークフローを自動実行できる)である。PR のイベントは GitHub が検知するので、手元の PC を起動していなくても動かせる。
レビュー観点はリポジトリ内の 1ファイル(例: .claude/skills/pr-review/SKILL.md)に書き、ワークフローがその内容と PR の差分を Claude に渡す。
なぜ「手元の Claude Code だけ」では PR 作成時の自動にならないか
Claude Code は あなたのターミナル上で動くツールである。GitHub は「PRが作られた」と判断した瞬間に、勝手にあなたの PC 上の claude を起動することはできない。
そのため、
- PR 作成時に無人でレビューしたい
→ GitHub 上で動く処理(この記事では GitHub Actions)が必要になる。
**B(スキル+手動)**では、レビューするタイミングは 自分が Cursor / Claude Code に指示を出したときになる(後述の「手動レビュー用のスキル方式」)。
前提(自動レビュー用)
- リポジトリが GitHub にあり、PR が作れる。
- Settings → Actions → General で、このリポジトリで Actions が使える。
- claude-code-action で Anthropic API を直接使う場合、リポジトリの Settings → Secrets and variables → Actions に
ANTHROPIC_API_KEYを登録する(Anthropic Console 等で発行したキー)。
Bedrock(Amazon Bedrock、AWSが提供するマネージド型の生成AI基盤サービス)/ Vertex(Vertex AI、GCPが提供する機械学習プラットフォーム)等に切り替える場合は公式の別手順になる。 - (任意)Claude(GitHub App) を入れておくと、
@claude連携やトークン周りが楽になることがあるが、API キーと混同しないこと。
1. レビュー基準ファイルをコミットする
ワークフローの prompt から参照するファイルをリポジトリに置く。
- 例:
.claude/skills/pr-review/SKILL.md(Claude Code のスキル定義と兼用できる) - 別案:
docs/review-rules.md(11の記事と揃える場合)
中身は「どの観点で」「どの形式で」レビューするかを書く。
2. ワークフロー(PR イベントで自動実行)
.github/workflows/claude-pr-review.yml を追加する。
on: pull_request… PR の作成・更新で起動する(=自動レビューの心臓部)。anthropics/claude-code-action@v1… ランナー(GitHub Actionsのジョブを実行する仮想マシン環境)上で Claude を実行する。v1 ではプロンプト入力はprompt(旧direct_promptは廃止)。permissions: pull-requests: write… レビュー結果を PR にコメントする等で必要になることが多い。
name: claude-pr-review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch base branch for diff
run: git fetch origin ${{ github.base_ref }} --depth=1
- name: Run Claude PR Review
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
`.claude/skills/pr-review/SKILL.md` の内容を読んでレビュー基準を確認し、
`git diff origin/${{ github.base_ref }}...HEAD` でこのPRの差分を取得して、
レビュー結果を Markdown 形式で出力してください。on.pull_request.types の意味
| 種類 | いつ動くか |
|---|---|
opened | PR を新規作成したとき |
synchronize | PR のブランチに push が入り、PR が更新されたとき |
reopened | 一度閉じた PR を再度開いたとき |
SKILL.md のパスを変えたら、prompt 内のパスも同じに直す。
3. 動作確認(自動が本当に動いているか)
git add .github/workflows/claude-pr-review.yml .claude/skills/pr-review/SKILL.md
git commit -m "ci: add Claude PR review on pull_request"
git push -u origin HEADGitHub で 新しい PR を作成する(または既存 PR に push する)。Actions タブで claude-pr-review が PR イベントに応じて起動し、PR 上にレビューが付くか確認する。
手動レビュー用のスキル方式
GitHub Actions は使わない。そのため .github/workflows/claude-review.yml(や claude-pr-review.yml)は不要である。B だけなら削除してよい(A と併用する場合だけ残す)。
やることは次の2点だけである。
- レビュー観点・出力形式を
.claude/skills/pr-review/SKILL.md(など)に書いてリポジトリにコミットする。 - Cursor(AIアシスト機能を内蔵したVSCodeベースのコードエディタ)や Claude Code を開き、チャットに 人が 指示を出す。例:
- 「
.claude/skills/pr-review/SKILL.mdのスキルに従って、現在のブランチの変更をコードレビューして」 - 「この PR の差分をレビューして。観点はリポジトリの
SKILL.mdに従って」
- 「
スラッシュコマンド(例: /pr-review)をスキル側で定義している場合は、それを使ってもよい。いずれも「人が起動・人が指示」がトリガーであり、PR を GitHub に push しただけではレビューは走らない。
| A(本編の自動) | B(この節の手動) | |
|---|---|---|
| トリガー | pull_request イベント | 人のプロンプトやスラッシュコマンド |
| 課金のイメージ | Actions 用の API キー等が別途かかりやすい | IDE(Integrated Development Environment、統合開発環境)/ Claude Code の 契約プラン側の利用になりやすい(公式の範囲を確認) |
「PR 作成のたびに GitHub だけで完結した自動レビュー」が欲しいときは A。ルールをスキル化しつつ、まずは手元だけで回したいときは B で足りる。
ありがちな失敗
ANTHROPIC_API_KEYが未設定 … 認証エラーでジョブ失敗。usesがなくechoのみ … Actions は成功しても Claude は動いていない。direct_promptのまま … v1 ではpromptに変更する(Migration Guide)。- ジョブは走るが PR に何も出ない …
permissionsやアクション側の「PR への投稿」要件を公式ドキュメントで確認する。 - diff が空 …
fetch-depthやgit fetch origin ${{ github.base_ref }}を見直す。