GitHub ActionsでClaude Code
@claudeで動かせるのは書き込み権限のある人だけです。GitHub App、シークレット、ワークフローの書き方が分かります。
- Claude Code GitHub Actions は、Issue や PR のコメントに @claude と書くと、Claude がコードを読んで答えたり変更をコミットしたりする GitHub Action です。
- 動かすには Claude GitHub App、シークレット(ANTHROPIC_API_KEY か CLAUDE_CODE_OAUTH_TOKEN)、anthropics/claude-code-action@v1 を呼ぶワークフローの3つが要ります。
- 手元の /install-github-app でまとめて準備でき、どちらの手順でもリポジトリの管理者の権限が必要です。
Claude Code GitHub Actions は、リポジトリのワークフローの中で Claude Code を動かす GitHub Action です。Issue や PR のコメントに @claude と書くと、Claude がコードを読んで答えたり、変更を作ってコミットしたりします。prompt を渡せば、スケジュールなどのイベントで自動で動かすこともできます。この記事では、セットアップ、動かし方、権限と安全、費用を抑える設定、うまく動かないときを順に説明します。費用の詳しい話はClaude Code×CIの費用と罠に任せます。編集部の検証環境(macOS、Claude Code 2.1.306、2026年10月22日)では、GitHub 上の操作、App のインストール、ワークフローの実行はしていません(未実行)。手元で確かめたのは、ワークフローの YAML の構文だけです。
仕組み
動かすには3つが要ります。
| 部品 | 役割 |
|---|---|
| Claude GitHub App | リポジトリのファイル、Issue、PR を読み書きする |
| シークレット | ANTHROPIC_API_KEY(Claude Console の API キー)か CLAUDE_CODE_OAUTH_TOKEN(Claude の契約のトークン) |
| ワークフローのファイル | .github/workflows/ に置く。anthropics/claude-code-action@v1 を呼ぶ |
どちらの手順でも、リポジトリの管理者の権限が必要です。
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
クイックセットアップ
手元の Claude Code で /install-github-app を実行すると、App のインストール、シークレットの登録、ワークフローの PR の準備までを進めてくれます(未実行)。
- 使えるのは github.com のリポジトリだけ
- 先に GitHub CLI を入れ、
gh auth loginで認証しておく - シークレットは、API キーなら
ANTHROPIC_API_KEY、契約のトークンならCLAUDE_CODE_OAUTH_TOKENという名前で登録される - 最後にワークフローの PR を作る画面が開く。マージすると
@claudeが使える
Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry を使う場合は、クイックセットアップではなく、クラウド向けの手順に従います。
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
手動のセットアップ
/install-github-app を使わない場合は、3つを自分で用意します(未実行)。
- Claude GitHub App(https://github.com/apps/claude )をリポジトリに入れる。Action が使うのは、Contents、Issues、Pull requests の読み書きの3つの権限。インストールのときは、ほかの Claude の機能が使う権限もまとめて付与される(一部だけを選ぶことはできない)
- シークレットを登録する。契約のトークンは、手元で
claude setup-tokenを実行して作る(Pro、Max、Team、Enterprise) examples/claude.ymlを.github/workflows/に置く
ワークフローでは、API キーは anthropic_api_key、契約のトークンは claude_code_oauth_token の入力に渡します。
公式の @claude に応えるワークフローの例です。
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
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 }}
id-token: write は GitHub App としての認証に、actions: read は PR の CI の結果を読むのに使います。if で、@claude の無いコメントではランナーを起動しません。
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
@claude で動かす
prompt を渡さないワークフローは、対話のモードで動きます。Issue や PR のコメント、PR のレビュー、新しく開いた Issue の本文やタイトルに @claude が出てくると、その依頼に応えます。結果はコメントで返ります。ダミーの todo アプリ(example-org/todo-app)なら、@claude fix the TypeError in the todo list component のように頼みます。
prompt で自動で動かす
prompt を渡すと、自動のモードになります。メンションを待たずに、cron のスケジュールを含むどんなイベントでも動きます。結果は既定ではコメントではなく、ワークフローの実行ログに出ます。プレーンなテキストの prompt では、Claude はシェルや GitHub の API を使えません。使わせたいツールは、claude_args の --allowedTools か、settings の permissions.allow で渡します。
公式の例をもとに、claude_args の --model の行を外して --max-turns を足した、毎朝のレポートのワークフローです(--model を省くと Claude Code の既定のモデルで動きます)。GitHub はスケジュールのワークフローを既定のブランチからだけ動かし、公開リポジトリでは60日間動きが無いとスケジュールを止めます。
name: Daily Report
on:
schedule:
- cron: "0 9 * * *"
jobs:
report:
runs-on: ubuntu-latest
permissions:
contents: read
issues: read
id-token: write
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "Generate a summary of yesterday's commits and open issues"
claude_args: |
--max-turns 5
--allowedTools "mcp__github__list_commits,mcp__github__list_issues"
記事の2つの YAML は、手元の Ruby 4.0.6 の YAML.safe_load で読めました。インデントを崩すと mapping values are not allowed in this context で止まります。GitHub 上での動作は未確認です(未実行)。claude -p の使い方そのものはclaude -pで自動化するにあります。
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
誰が動かせるか、秘密をどう扱うか
Issue や PR のイベントで動かせるのは、リポジトリへの書き込み権限がある人だけです。 書き込み権限の無い人を許すには、allowed_non_write_users を設定し、自分の github_token を渡します。bot は、allowed_bots に書かない限り動かせません。bot どうしで呼び合うのを防ぐためです。スケジュールの実行は、最後に cron を変えたユーザーなどの実行として扱われるので、それが bot なら allowed_bots に入れます。
API キーやトークンは、リポジトリにコミットせず、必ず GitHub のシークレットに入れます。権限は必要なものだけにし、変更はマージの前に確かめます。秘密情報の扱いはClaude Codeに秘密を渡さないにもまとめています。
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
費用を抑える設定
1回の実行で、GitHub Actions の実行時間と API のトークンを使います(契約のトークンなら契約の枠)。公式が挙げる抑え方です。
@claudeへの依頼を具体的に書き、少ないターンで終わらせるCLAUDE.mdを短く保つ。実行のたびに読まれるclaude_argsに--max-turnsを入れる- ワークフローにタイムアウトを設定する
- GitHub の concurrency で、並列の実行を絞る
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
うまく動かないとき
| 症状 | 確かめること |
|---|---|
@claude に反応しない | App が入っているか、ワークフローが有効か、シークレットがあるか、@claude が独立した単語か(/claude や @claude-bot ではないか)、書いた人に書き込み権限があるか |
| Claude のコミットで CI が動かない | 既定の GITHUB_TOKEN で作ったコミットではワークフローが起動しない。github_token: ${{ secrets.GITHUB_TOKEN }} を渡しているなら外して App として認証させる |
| 認証のエラー | 鍵やトークンが有効か、手元の claude で確かめる |
出典:https://code.claude.com/docs/en/github-actions 、2026-10-22確認
Anthropic のインフラで PR をレビューする Code Review との違いはClaude Codeでコードレビューにあります。
まとめ
- 必要なのは Claude GitHub App、シークレット、
anthropics/claude-code-action@v1を呼ぶワークフローの3つ - 手元の
/install-github-appで、App、シークレット、ワークフローの PR までを用意できる。github.com のリポジトリだけ promptが無ければ@claudeに応え、あれば自動で動く。自動のときはツールを--allowedToolsで渡す@claudeで動かせるのは書き込み権限のある人。bot はallowed_botsに書かない限り動かせない- 鍵はシークレットに入れ、
--max-turns、タイムアウト、concurrency で実行を絞る - 既定の
GITHUB_TOKENで作ったコミットでは CI が動かない