6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code サブスクリプション(Pro/Max)を GitHub Actions の CI 上で利用する方法

6
Posted at

はじめに

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 に登録

  1. GitHub リポジトリの SettingsSecrets and variablesActions を開く
  2. New repository secret をクリック
  3. 以下を入力:
    • Name: CLAUDE_CODE_OAUTH_TOKEN
    • Value: Step 1 で取得したトークン
  4. 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/cienv にトークンを渡すだけで、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 箇所:

  1. permissionsid-token: write を追加
  2. 環境変数を ANTHROPIC_API_KEYCLAUDE_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_KEYCLAUDE_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 のインストールとワークフローの自動生成を行います。このコマンドを実行すると:

  1. Claude GitHub App がリポジトリにインストールされる
  2. CLAUDE_CODE_OAUTH_TOKEN が GitHub Secrets に自動設定される
  3. サンプルのワークフローファイルが生成される

ただし、生成されるワークフローは claude-code-action を直接使うシンプルな構成です。DevContainer を使ったカスタムワークフローには、本記事のパターン 2 のように手動で設定する必要があります。

まとめ

やること コマンド / 操作
トークン発行 claude setup-token
GitHub Secrets 登録 CLAUDE_CODE_OAUTH_TOKEN として登録
ワークフロー修正 ANTHROPIC_API_KEYCLAUDE_CODE_OAUTH_TOKEN に変更
パーミッション追加 id-token: write を追加
スクリプト修正 不要(claude CLI が自動認識)

CLAUDE_CODE_OAUTH_TOKEN を使うことで、API 従量課金なしに Claude Code の CI/CD 活用が可能になります。特に DevContainer と組み合わせたカスタムワークフローでも、環境変数を渡すだけで動作するため、既存のパイプラインからの移行も容易です。

リファレンス

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?