Claude Code GitHub Actions で PR レビューを自動化するには、Claude Code の中で /install-github-app を実行し、作られた workflow の PR をマージするだけです。この GitHub Action(anthropics/claude-code-action@v1)は、GitHub のランナーで Claude Code を動かします。PR が開かれるたびに差分を読み、問題ごとにインラインコメントを付けます。コメントに @claude と書けば、修正のコミットも頼めます1。この記事では、セットアップの 2 つの方法、actionlint で検証した workflow の YAML、権限とシークレットの安全な扱い、費用の抑え方を順に説明します(2026 年 10 月時点。アクションの最新リリースは v1.0.241 です2)。
Claude Code GitHub Actions は、GitHub Actions の workflow の中で Claude Code を実行する公式の GitHub Action です1。リポジトリは anthropics/claude-code-action で、Claude Agent SDK の上に作られています。
動き方は 2 通りあり、workflow に prompt 入力があるかどうかで自動的に決まります1。
| モード | 条件 | 動き |
|---|
| 対話モード | prompt を書かない | コメントや PR レビューの @claude を待って応える |
| 自動モード | prompt を書く | イベント(PR の作成、cron など)で毎回実行する |
PR レビューの自動化は自動モード、「@claude この関数を直して」のような依頼は対話モードで使います。全体の流れは次の図のとおりです。
開発者の PR や @claude コメントをきっかけに GitHub Actions が起動し、claude-code-action が Claude Code を実行して PR にコメントを返す流れ図: 筆者作成。出典: Claude Code Docs「Claude Code GitHub Actions」
似た名前の製品に、Anthropic が運用する Code Review があります。こちらは workflow を書かずに PR を自動でレビューするマネージドのサービスで、Team と Enterprise 向けの研究プレビューです3。自分で YAML を書いてモデルや条件を決めたいなら、この記事の GitHub Action を使います。
いちばん早いのは、Claude Code の /install-github-app に任せる方法です1。前提は次の 3 つです。
- リポジトリの管理者権限がある
- リポジトリが github.com にある(GitLab や Bitbucket では使えない)
- GitHub CLI(
gh)が入っていて、gh auth login が済んでいる
手順は次のとおりです。
- 対象のリポジトリで
claude を起動する
/install-github-app を実行し、案内に従って Claude GitHub App をインストールする
- 認証方法を選ぶ。API キーなら
ANTHROPIC_API_KEY、サブスクリプションなら CLAUDE_CODE_OAUTH_TOKEN という名前でリポジトリのシークレットに保存される
- 入れる workflow(
@claude 用と、レビュー用)を選ぶ
- Claude Code がブランチを push し、PR 作成画面をブラウザで開くので、PR を作ってマージする
マージした時点で、@claude とレビューが使えるようになります。途中でやめたいときは Esc を押します1。以前のバージョンで作った workflow は、/install-github-app をもう一度実行して「Update workflow file with latest version」を選ぶと新しくできます1。
自分で細かく決めたいときは、GitHub App・シークレット・workflow を自分で用意します1。
- Claude GitHub App をリポジトリにインストールする
- シークレットを追加する。API キーなら
ANTHROPIC_API_KEY(Claude Console で発行)、サブスクリプションなら claude setup-token で発行した CLAUDE_CODE_OAUTH_TOKEN
.github/workflows/ に workflow の YAML を置く
CLAUDE_CODE_OAUTH_TOKEN は Pro・Max・Team・Enterprise のプランで使えます1。ただし、トークンは発行した人のサブスクリプションに結びつきます。組織の複数のリポジトリで共有するなら、API キーを使うよう公式ドキュメントは勧めています1。
次の YAML は、公式のレビューの例をもとに、費用を抑える設定を足したものです。PR の作成・更新・レディ化・再オープンで動き、Claude が PR にインラインコメントを付けます。
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
paths-ignore:
- "**/*.md"
- "docs/**"
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
plugin_marketplaces: "https://github.com/anthropics/claude-code.git"
plugins: "code-review@claude-code-plugins"
prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
claude_args: |
--model claude-sonnet-5-5
--allowedTools "mcp__github_inline_comment__create_inline_comment"
ポイントは次のとおりです。
plugins と prompt: Anthropic の code-review プラグインを入れ、そのスキルを実行します。--comment を付けると結果が PR に投稿され、付けないと workflow のログにだけ出ます1
--allowedTools: インラインコメント用の MCP ツールを名前で許可します。スキル側にも同じ指定がありますが、この行が無いとコメント用の MCP サーバーが起動しません1
id-token: write: アクションが GitHub App として認証するために必要です1
paths-ignore・concurrency・timeout-minutes・if: 筆者が足した費用対策です。後の節で説明します
Claude は、下書きや閉じた PR、自動生成のような小さな PR、すでに Claude がコメントした PR を飛ばします1。
対話モードの workflow は、prompt を書かずにアクションを呼びます1。
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
claude:
if: contains(github.event.comment.body, '@claude')
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: |
--model claude-sonnet-5-5
--max-turns 10
if で @claude を含むコメントだけに絞ると、関係ないコメントでランナーが起動しません。actions: read は、Claude が PR の CI の結果を読むために使います1。使い方は、PR や issue に次のように書くだけです。
@claude この PR の TypeError を直して
@claude このエンドポイントの認証の実装方針を提案して
Claude は同じ PR や issue にコメントで返事をし、作業に合わせて更新します。既定では Claude が自分で PR を作ることはありません。新しいブランチにコミットし、PR 作成画面へのリンクを返すので、人が確認してから PR を作ります4。
workflow は、push する前に actionlint(GitHub Actions 用の静的チェッカー)で確かめると安全です5。上の 2 つのファイルを actionlint 1.7.12 で検証したところ、エラーは 0 件でした。権限名を 1 文字間違えると、次の GIF のように指摘されます。
actionlint で 2 つの workflow が通り、pull-requests を pull-request と書き間違えた行が unknown permission scope として指摘される実行結果筆者が macOS で actionlint 1.7.12 を実行した出力
go install github.com/rhysd/actionlint/cmd/actionlint@latest
actionlint
安全に使うための基本は、シークレットに鍵を置き、workflow の権限を最小にし、外部からの入力を信じないことです。
- API キーや OAuth トークンを YAML に直接書かず、必ず GitHub のシークレットに置いて
${{ secrets.ANTHROPIC_API_KEY }} で参照する1
- 組織で使うなら、組織レベルの Actions シークレットにまとめられる1
- 長期の鍵を置きたくない場合は、ワークロード ID フェデレーションを使う。GitHub の OIDC トークンを Claude API の認証と交換する方式で、
anthropic_federation_rule_id と anthropic_organization_id を指定する16
- シークレットを消しても鍵自体は有効なまま。使わなくなった API キーは Claude Console でも削除する1
アクションは Claude を起動する前に 2 つを確かめます14。
- 書き込み権限: issue や PR のイベントでは、操作した人がリポジトリへの書き込み権限を持っている必要がある
- 人間かどうか: ボットは
allowed_bots に書かない限り起動できない。ボット同士のループを防ぐため
書き込み権限の無い人にも使わせる allowed_non_write_users という入力もあります。セキュリティ文書は「大きなリスク」と明記し、ラベル付けのような権限の小さい workflow に限るよう求めています4。
プロンプトインジェクションとは、入力の中に AI への隠れた指示を混ぜて、意図しない動きをさせる攻撃です。外部の人が書いた PR や issue には、HTML コメントや見えない文字で指示が隠されていることがあります4。アクションはこうした文字を取り除きますが、新しい回避方法が出る可能性があるとしています4。
対策は次のとおりです。
- 公開リポジトリでは
include_comments_by_actor で、Claude に渡すコメントの書き手を絞る6
pull_request_target や workflow_run で使うときは、PR の head をワークスペースのルートにチェックアウトしない。これらのイベントは元のリポジトリのシークレットで動くため47
show_full_output は有効にしない。ツールの実行結果にシークレットが含まれ、公開のログに出る恐れがある6
--allowedTools で、Claude に使わせるツールを必要なものだけにする
公開リポジトリでは、フォークからの PR の実行には GitHub がシークレットを渡しません。そのため上のレビューの workflow は、同じリポジトリのブランチからの PR でだけ動きます1。AI が書いたコードの安全性については AI 生成コードのセキュリティ でも詳しく扱っています。
Claude GitHub App は、GitHub Actions・Code Review など Claude の GitHub 連携すべてで共通です。そのため、このアクションが使わない権限も含まれています(Actions・Workflows の書き込みなど)1。必要な権限だけにしたい組織は、Contents・Issues・Pull requests だけを持つ独自の GitHub App を作る方法が案内されています1。
費用は、GitHub Actions の実行時間と、Claude の API トークン(またはサブスクリプションの利用枠)の 2 つです1。OAuth トークンで認証すると、API の従量課金ではなくサブスクリプションの利用枠を使います1。
API キーで使う場合のトークン単価は、モデルで大きく変わります8。
Claude API の料金(USD / 100 万トークン、標準の速度)データを表で見る
Claude API の料金(USD / 100 万トークン、標準の速度)| モデル | 入力($) | 出力($) |
|---|
| Opus 5.5 | 4 | 20 |
|---|
| Sonnet 5.5 | 2 | 10 |
|---|
| Haiku 4.5 | 1 | 5 |
|---|
出典: Anthropic, Claude Platform Docs「Pricing」(2026-10-05 参照)
計算の例として、1 回のレビューで入力 100,000 トークン・出力 5,000 トークンを使うとします(トークン数は説明のための仮の値です)。
- Sonnet 5.5: (100,000 × $2 + 5,000 × $10) ÷ 1,000,000 = $0.25
- Opus 5.5: (100,000 × $4 + 5,000 × $20) ÷ 1,000,000 = $0.50
実際のトークン数は PR の大きさとリポジトリで大きく変わります。なお、マネージドの Code Review は 1 回の平均が $15〜25 と公表されています。こちらは複数のエージェントで検証まで行うサービスで、使用クレジットで別に請求されます3。
費用を抑える設定は次のとおりです。上の 2 つの workflow にはすでに入れてあります。
| 設定 | 効果 |
|---|
claude_args の --model claude-sonnet-5-5 | 単価が Opus 5.5 の半分。指定しないと Claude Code の既定のモデルになる1 |
claude_args の --max-turns | 1 回の実行のやり取りの回数に上限を付ける1 |
timeout-minutes | 止まらない job を打ち切る1 |
concurrency と cancel-in-progress | 同じ PR に続けて push したとき、古いレビューを止める |
paths-ignore | ドキュメントだけの変更ではレビューしない |
if: ... draft == false | 下書きの PR ではランナーを起動しない |
短い CLAUDE.md | 毎回読まれるので、短いほど入力トークンが減る1 |
モデルの選び方は Claude Opus 5.5 と Sonnet 5.5 の使い分けと料金 で詳しく比べています。
- @claude に反応しない: GitHub App のインストール、workflow の有効化、シークレットの有無を確かめます。
@claude は単語として書く必要があり、/claude や @claude-bot では動きません。書き込み権限の無い人のコメントでも動きません1
- Claude のコミットで CI が動かない:
github_token: ${{ secrets.GITHUB_TOKEN }} を渡していると、GitHub の仕様でそのコミットからは workflow が起動しません。入力を外して GitHub App として認証させます1
- レビューが PR に出ず、ログにだけ出る:
--comment か、--allowedTools のインラインコメントのツールが抜けています1
@beta の workflow が動かない: @v1 に変え、mode を削除し、direct_prompt を prompt に、model や max_turns を claude_args に移します1
- 定期実行が止まった: 公開リポジトリでは、60 日間活動が無いと GitHub が schedule を止めます1
ほかの AI エージェントの CI 連携と比べたい場合は、Codex CLI と Claude Code の比較 も参考になります。
anthropics/claude-code-action@v1 は、GitHub Actions で Claude Code を動かす公式のアクション。最新は v1.0.241(2026-10-03)
- 最速は
/install-github-app。手動なら GitHub App・シークレット・workflow の 3 つを用意する
- PR の自動レビューは
prompt に /code-review:code-review --comment を渡す自動モード、修正依頼は @claude の対話モード
- 鍵はシークレットか OIDC に置き、権限は最小に。外部の入力はプロンプトインジェクションを疑う
- 費用は Sonnet 5.5・
--max-turns・timeout-minutes・concurrency で抑える
次にやることは、テスト用のリポジトリで /install-github-app を実行し、小さな PR を 1 つ作ってレビューを試すことです。
アクション自体に料金はかかりません。ただし GitHub Actions の実行時間と、Claude の API トークンかサブスクリプションの利用枠を使います1。API キーで Sonnet 5.5 を使う場合、単価は 100 万トークンあたり入力 $2・出力 $10 です8。
使えます。claude setup-token で発行した OAuth トークンを CLAUDE_CODE_OAUTH_TOKEN としてシークレットに置き、claude_code_oauth_token 入力に渡します1。Pro・Max・Team・Enterprise で使えます。組織で共有するなら API キーが勧められています。
claude_args に --model claude-sonnet-5-5 のように書きます1。指定しないと、Claude Code の既定のモデル(Anthropic API では Opus 5.5)が使われます。
公開リポジトリでは、フォークからの PR の実行に GitHub がシークレットを渡さないため、pull_request の workflow ではレビューできません1。pull_request_target を使う方法もありますが、元のリポジトリのシークレットで動くため、PR の head をワークスペースのルートにチェックアウトしないなどの注意が要ります4。
Code Review は Anthropic が運用するマネージドのレビューで、workflow を書かずに使えます。Team と Enterprise 向けの研究プレビューで、1 回平均 $15〜25 です3。claude-code-action は自分の GitHub Actions で動かすもので、モデル・条件・プロンプトを自分で決められます1。
uses を @v1 に変え、mode 入力を消し、direct_prompt を prompt に、max_turns や model を claude_args に移します。custom_instructions は --append-system-prompt になります1。