GitHub Actions で Claude Code を動かす:claude-code-action の導入と使い方
公式の claude-code-action を使って、GitHub の Issue や PR で @claude にメンションするだけでコード修正やレビューを行う仕組みを作る手順を解説します。API キーの設定、ワークフローの書き方、権限の絞り方、自動レビューの構成を紹介します。
Issue に「@claude この不具合を直して」とコメントすると、Claude Code が修正を実装して PR を作る。PR が開かれると自動でレビューコメントが付く。こうした仕組みは、公式の claude-code-action を使うと 1 つのワークフローファイルで実現できます。
この記事では、セットアップから、メンション応答と自動レビューの 2 つの構成、権限とコストを絞る方法までを扱います。
KEY POINT
この記事で分かること
/install-github-appによるセットアップと API キーの登録@claudeメンションに応答するワークフロー- PR 作成時に自動レビューするワークフローと、権限・コストの制御
セットアップの流れ
- ローカルの Claude Code で
/install-github-appを実行します。ブラウザが開き、GitHub App のインストールとリポジトリの選択、ワークフローファイルの追加が案内されます。 - 認証用の Secret を登録します。API キーなら
ANTHROPIC_API_KEY(Claude Console で発行)、Claude のサブスクリプションを使うならCLAUDE_CODE_OAUTH_TOKEN(claude setup-tokenで生成)です。ワークフローでは前者をanthropic_api_key、後者をclaude_code_oauth_tokenに渡します。 - 追加されたワークフローファイル(
.github/workflows/claude.ymlなど)を確認し、コミットします。
手動で構成する場合は、GitHub App のインストールと Secrets の登録を自分で行い、次のワークフローを追加します。
用語解説
GitHub App と GITHUB_TOKEN: claude-code-action は、Claude のコメントや PR 作成に GitHub App の認証を使います。App を入れずに GITHUB_TOKEN だけで動かすこともできますが、その場合 Claude のコミットが別のワークフローをトリガーしないなどの制約があります。
構成 1:@claude メンションに応答する
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
jobs:
claude:
if: |
contains(github.event.comment.body, '@claude') ||
contains(github.event.issue.body, '@claude')
runs-on: ubuntu-latest
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 }}
actions: read は Claude が PR の CI 結果を読むために必要です。id-token: write は Action 既定の GitHub App 認証に必要です。
Issue や PR のコメントに @claude を含めると、その文脈(Issue 本文、PR 差分、コメントのスレッド)を読んで応答します。修正を伴う場合はブランチを切ってコミットし、PR を作成します。
指示の例:
- Issue で「@claude 再現手順を確認して修正案を PR にして」
- PR のレビューコメントで「@claude この関数のエラーハンドリングを追加して」
- PR で「@claude この変更で影響を受けるテストを追加して」
構成 2:PR 作成時に自動レビューする
prompt を渡すと、メンションを待たずに走る automation モード になります。PR が開かれたときの自動レビューはこの形です。
公式ドキュメントが示す現在の構成は、自由記述のプロンプトではなく code-review プラグインのスキルを呼ぶ形です。
name: Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
jobs:
review:
runs-on: ubuntu-latest
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: '--allowedTools "mcp__github_inline_comment__create_inline_comment"'
--comment を付けないとコメントは投稿されない
automation モードの結果は、既定ではワークフローの実行ログに出ます。公式ドキュメントは「By default, results appear in the workflow run log rather than a comment」と書いています。PR にコメントさせたいなら --comment が必要です。claude_args の --allowedTools も必須で、スキル側の allowed-tools に同じツールが書かれていても、Action はここに名前がある場合にだけインラインコメント用の MCP サーバーを起動します。
自由記述の prompt を使う場合は、Claude に必要なツールを自分で与える必要があります。公式ドキュメントは「For a plain-text prompt, Claude has no shell or GitHub API access until you grant the tools the prompt needs」と書いています。claude_args の --allowedTools か、settings 入力の permissions.allow で渡します。
claude_args には CLI と同じオプションを渡せます。レビューは読み取り中心なので、--max-turns を小さくし、--model claude-sonnet-5-5 のように軽いモデルを指定すると費用を抑えられます。
権限とコストを絞る
| 目的 | 方法 |
|---|---|
| 外部ユーザーのコメントで実行させない | Action 側で既にチェックされます(後述)。さらに絞るなら if: に github.event.comment.author_association の条件を足す |
| 書き込みを最小限にする | レビュー用ワークフローは contents: read にする |
| 使えるツールを限定する | claude_args に --allowedTools を渡す |
| 実行回数の上限 | --max-turns を渡す |
| リポジトリのルールを守らせる | リポジトリの CLAUDE.md は Action でも読み込まれるので、ここに書く |
用語解説
実行できる人は Action 側でもチェックされる: 公式ドキュメントによると、Action は実行前に 2 つのチェックを行い、どちらかで弾かれると実行は失敗します。1 つは書き込み権限で、Issue と PR のイベントでは、起動したユーザーがリポジトリへの書き込み権限を持っている必要があります(例外を作るには allowed_non_write_users と自前の github_token を使います)。もう 1 つは人間かどうかで、ボットは allowed_bots に列挙しない限り拒否されます。これは schedule 実行にも適用されます。
ワークフロー側でさらに絞るなら、次のように書けます。
if: |
contains(github.event.comment.body, '@claude') &&
contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association)
Secrets とフォークからの PR
フォークからの PR では、既定で Secrets が渡されません。そのため外部からの PR には自動レビューが走りません。意図的に有効にする場合は、pull_request_target の危険性(フォークのコードが Secrets 付きで実行される)を理解したうえで構成してください。
CLAUDE.md との関係
Action 内の Claude も、リポジトリの CLAUDE.md と .claude/settings.json を読み込みます。ローカルで使っている規約がそのまま CI でも効くので、レビュー基準や禁止事項はワークフローの prompt ではなく CLAUDE.md に書いておくと、二重管理になりません(CLAUDE.md の書き方)。
公式 Action を使わず、claude -p を直接呼び出す軽量な構成は 非対話モードの使い方 で解説しています。Codex を同じ用途で使う場合の比較は Codex クラウド版で GitHub のタスクを任せる を参照してください。
まとめ
/install-github-appで GitHub App とワークフローを導入し、ANTHROPIC_API_KEYを Secrets に登録する@claudeメンション応答と、PR 自動レビューの 2 構成が基本if:でコメント投稿者を制限し、--max-turnsと Sonnet 系モデルで費用を抑える- レビュー基準や禁止事項はワークフローではなく CLAUDE.md に書く
よくある質問
- claude-code-action は無料で使えますか?
- Action 自体は無料ですが、Anthropic API の利用料(従量課金)と GitHub Actions の実行時間が発生します。パブリックリポジトリなら Actions の実行時間は無料です。
- @claude と書けば誰でも実行できてしまいますか?
- 既定ではリポジトリへの書き込み権限を持つユーザーのコメントに反応します。外部からのコメントで実行されないよう、ワークフローの条件で制限してください。
- Claude が作った変更はどこに反映されますか?
- 新しいブランチにコミットされ、PR が作成されます(または既存の PR ブランチにコミットされます)。直接 main には書き込みません。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。