はじめに
Claude Code を GitHub Actions で使う場合、従来は ANTHROPIC_API_KEY(API 従量課金キー)が必要でした。しかし、CLAUDE_CODE_OAUTH_TOKEN を使うことで、Claude Code のサブスクリプション(Pro / Max / Team)のトークンを CI/CD 上でも活用できます。
この記事では、claude setup-token で取得した OAuth トークンを GitHub Actions で使う方法を解説します。
背景: 認証方式の比較
| 認証方式 | 環境変数 | 課金体系 | 有効期限 | CI/CD 向き |
|---|---|---|---|---|
| API キー | ANTHROPIC_API_KEY |
API 従量課金(別契約) | 無期限 | ✅ |
OAuth トークン (auth login) |
CLAUDE_CODE_OAUTH_TOKEN |
サブスクリプション内 | 8時間〜4日 | ❌ |
セットアップトークン (setup-token) |
CLAUDE_CODE_OAUTH_TOKEN |
サブスクリプション内 | 1年 | ✅ 推奨 |
なぜ CLAUDE_CODE_OAUTH_TOKEN か?
- 追加コストなし: サブスクリプションのトークンを使うため、API 従量課金が発生しない
-
公式サポート:
claude-code-actionのソースコードでANTHROPIC_API_KEYの代替として正式にサポートされている -
長期間有効:
claude setup-tokenで発行すれば 1 年間有効
前提条件
- Claude Code CLI がインストール済み・ログイン済みであること
- GitHub リポジトリの管理者権限があること
- Claude Code のサブスクリプション(Pro / Max / Team)に加入していること
セットアップ手順
Step 1: OAuth トークンの発行
ローカル環境で以下のコマンドを実行します。
claude setup-token
注意:
claude auth loginで取得するトークンは 8 時間〜4 日で失効するため、CI/CD には不向きです。必ずclaude setup-tokenを使ってください(1 年間有効)。
Step 2: GitHub Secrets に登録
- GitHub リポジトリの Settings → Secrets and variables → Actions を開く
- New repository secret をクリック
- 以下を入力:
-
Name:
CLAUDE_CODE_OAUTH_TOKEN - Value: Step 1 で取得したトークン
-
Name:
- Add secret をクリック
Step 3: ワークフローで使用
ワークフローファイルで、ANTHROPIC_API_KEY の代わりに CLAUDE_CODE_OAUTH_TOKEN を指定します。
使い方パターン
パターン 1: claude-code-action を直接使う(標準的な使い方)
anthropics/claude-code-action を使う場合、claude_code_oauth_token 入力パラメータとして渡します。
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: read
pull-requests: read
issues: read
id-token: write # OAuth 認証に必要
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run Claude Code
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
パターン 2: DevContainer 内で claude CLI を使う(カスタムワークフロー)
DevContainer を使ったカスタムワークフロー(ブラウザ動作確認、独自レビューなど)では、環境変数として渡します。
name: Auto Fix Issue with Claude Code
on:
issues:
types: [labeled]
jobs:
auto-fix:
if: github.event.label.name == 'auto-fix'
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: write
pull-requests: write
issues: write
id-token: write # OAuth 認証に必要
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run Claude Code in DevContainer
uses: devcontainers/ci@v0.3
env:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
runCmd: |
# DevContainer 内で claude CLI が CLAUDE_CODE_OAUTH_TOKEN を自動認識
claude --print "Fix the bug described in the issue"
ポイント: devcontainers/ci の env にトークンを渡すだけで、DevContainer 内の claude CLI が自動的に認識します。スクリプト側で特別な認証処理は不要です。
パターン 3: PR 自動レビュー
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
jobs:
claude-review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code Review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: 'Review this pull request for code quality and security issues.'
ANTHROPIC_API_KEY からの移行
既存のワークフローを移行する場合、変更は最小限です。
Before(API 従量課金)
permissions:
contents: write
pull-requests: write
issues: write
steps:
- uses: devcontainers/ci@v0.3
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
After(サブスクリプション)
permissions:
contents: write
pull-requests: write
issues: write
id-token: write # 追加
steps:
- uses: devcontainers/ci@v0.3
env:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} # 変更
変更点はたった 2 箇所:
-
permissionsにid-token: writeを追加 - 環境変数を
ANTHROPIC_API_KEY→CLAUDE_CODE_OAUTH_TOKENに変更
スクリプト内の claude コマンドの呼び出し方は一切変更不要です。
技術的な仕組み
なぜ claude CLI が CLAUDE_CODE_OAUTH_TOKEN を認識するのか
claude-code-action のソースコード(validate-env.ts)を確認すると、以下のロジックで認証が処理されています:
const anthropicApiKey = process.env.ANTHROPIC_API_KEY;
const claudeCodeOAuthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
if (!anthropicApiKey && !claudeCodeOAuthToken) {
errors.push(
"Either ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN is required."
);
}
つまり、ANTHROPIC_API_KEY と CLAUDE_CODE_OAUTH_TOKEN はどちらか一方があれば認証が成立します。claude CLI 自体もこの環境変数を直接読み取るため、DevContainer 内でも動作します。
id-token: write が必要な理由
OAuth トークンの検証に GitHub の OIDC (OpenID Connect) 連携が使われるため、id-token: write パーミッションが必要です。これがないとトークンの検証が失敗します。
トークン管理の注意点
有効期限
| コマンド | 有効期限 | 用途 |
|---|---|---|
claude auth login |
8 時間〜4 日 | ローカル開発用 |
claude setup-token |
1 年 | CI/CD 用 |
トークンの更新
claude setup-token のトークンは 1 年間有効ですが、期限が近づいたら再度 claude setup-token を実行し、GitHub Secrets を更新してください。
セキュリティ
- トークンは必ず GitHub Secrets に保存し、ワークフローファイルにハードコードしない
- リポジトリへの write 権限を持つユーザーのみがワークフローをトリガーできるよう制御する
- 必要最小限の
permissionsを設定する
トークン消費の最適化
OAuth トークンを使う場合、サブスクリプションのセッショントークンを消費します。以下の対策で消費を抑えられます。
自動レビューのトリガーを限定する
on:
pull_request:
types: [opened] # opened のみ。synchronize を含めると push ごとに実行される
max-turns を制限する
- uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
claude_args: "--max-turns 5" # 無制限にしない
手動トリガーと自動トリガーを分ける
- PR オープン時: 自動で軽量レビュー
-
追加レビュー:
@claudeメンションで手動トリガー
/install-github-app との関係
Claude Code CLI の /install-github-app コマンドは、GitHub App のインストールとワークフローの自動生成を行います。このコマンドを実行すると:
- Claude GitHub App がリポジトリにインストールされる
-
CLAUDE_CODE_OAUTH_TOKENが GitHub Secrets に自動設定される - サンプルのワークフローファイルが生成される
ただし、生成されるワークフローは claude-code-action を直接使うシンプルな構成です。DevContainer を使ったカスタムワークフローには、本記事のパターン 2 のように手動で設定する必要があります。
まとめ
| やること | コマンド / 操作 |
|---|---|
| トークン発行 | claude setup-token |
| GitHub Secrets 登録 |
CLAUDE_CODE_OAUTH_TOKEN として登録 |
| ワークフロー修正 |
ANTHROPIC_API_KEY → CLAUDE_CODE_OAUTH_TOKEN に変更 |
| パーミッション追加 |
id-token: write を追加 |
| スクリプト修正 | 不要(claude CLI が自動認識) |
CLAUDE_CODE_OAUTH_TOKEN を使うことで、API 従量課金なしに Claude Code の CI/CD 活用が可能になります。特に DevContainer と組み合わせたカスタムワークフローでも、環境変数を渡すだけで動作するため、既存のパイプラインからの移行も容易です。
リファレンス
- Claude Code GitHub Actions 公式ドキュメント
- anthropics/claude-code-action — GitHub Action 本体・ワークフロー例
- Claude Code 認証ドキュメント — トークン管理の詳細