🦔

Google Vertex AI経由でClaude Code Actionを実行する完全ガイド

に公開

概要

Claude Code GitHub ActionsをGoogle Vertex AI経由で実行することで、エンタープライズ環境でのデータの所在地と請求を制御しながら、AIを活用した自動化機能を利用できます。

前提条件

1. Google Cloud Platform の準備

  • Vertex AIが有効なGoogle Cloudプロジェクト
  • GitHub Actions用のWorkload Identity Federation設定
  • 必要な権限を持つサービスアカウント
  • Claude Sonnet 3.7とClaude Haiku 3.5へのアクセス権

2. リージョン要件

  • 現在、us-east5リージョンのみサポート
  • プロジェクトにこのリージョンでのクォータが割り当てられていることを確認

セットアップ手順

ステップ1: GCP認証の設定

1.1 標準的なGCP認証情報の設定

gcloud auth application-default login

1.2 Workload Identity Federationの設定(GitHub Actions用)

GCPコンソールまたはCLIで以下を設定:

  • Workload Identity Poolの作成
  • GitHub OIDCプロバイダーの追加
  • サービスアカウントへのロールバインディング

ステップ2: 環境変数の設定

2.1 基本的な環境変数

# Google Vertex AI接続設定
export ANTHROPIC_VERTEX_PROJECT_ID="your-gcp-project-id"
export ANTHROPIC_VERTEX_REGION="us-east5"

# モデル設定(オプション)
export CLAUDE_CODE_ENDPOINT="vertex"
export CLAUDE_CODE_PRIMARY_MODEL="claude-opus-4-20250514"
export CLAUDE_CODE_ASSISTANT_MODEL="claude-sonnet-4-20250514"

2.2 プロンプトキャッシング無効化時の追加設定

export ANTHROPIC_VERTEX_ENABLE_PROMPT_CACHING=false

ステップ3: GitHubアプリの作成(推奨)

3.1 カスタムGitHubアプリの作成

  1. https://github.com/settings/apps/newにアクセス

  2. 以下の情報を入力:

    • GitHub App名: 一意の名前(例:「YourOrg Claude Assistant」)
    • ホームページURL: 組織のウェブサイトまたはリポジトリURL
    • Webhooks: 「Active」のチェックを外す
  3. 必要な権限を設定:

    • Contents: Read & Write
    • Issues: Read & Write
    • Pull requests: Read & Write
  4. アプリを作成後:

    • 秘密鍵(.pemファイル)を生成してダウンロード
    • App IDをメモ

3.2 アプリのインストール

  1. アプリ設定ページから「Install App」をクリック
  2. 対象のリポジトリを選択してインストール

ステップ4: GitHubシークレットの設定

リポジトリの設定 → Secrets and variables → Actionsで以下を追加:

4.1 GCP認証用シークレット

  • GCP_WORKLOAD_IDENTITY_PROVIDER: Workload Identity ProviderのID
  • GCP_SERVICE_ACCOUNT: サービスアカウントのメールアドレス

4.2 GitHubアプリ用シークレット(カスタムアプリ使用時)

  • APP_ID: GitHubアプリのID
  • APP_PRIVATE_KEY: 秘密鍵(.pem)の内容

ステップ5: GitHub Actionsワークフローの作成

.github/workflows/claude-vertex.ymlファイルを作成:

name: Claude Code with Vertex AI

on:
  issue_comment:
    types: [created]
  pull_request_comment:
    types: [created]

jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    
    permissions:
      id-token: write
      contents: write
      issues: write
      pull-requests: write
    
    steps:
      # カスタムGitHubアプリトークンの生成
      - name: Generate GitHub App Token
        id: app-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
      
      # リポジトリのチェックアウト
      - uses: actions/checkout@v4
        with:
          token: ${{ steps.app-token.outputs.token }}
      
      # GCP認証
      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
          service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
      
      # Claude Code Actionの実行
      - uses: anthropics/claude-code-action@v1
        env:
          # Vertex AI設定
          ANTHROPIC_VERTEX_PROJECT_ID: ${{ vars.GCP_PROJECT_ID }}
          ANTHROPIC_VERTEX_REGION: us-east5
          CLAUDE_CODE_ENDPOINT: vertex
          
          # モデル設定(オプション)
          CLAUDE_CODE_PRIMARY_MODEL: claude-opus-4-20250514
          CLAUDE_CODE_ASSISTANT_MODEL: claude-sonnet-4-20250514
          
          # プロンプトキャッシング設定(オプション)
          ANTHROPIC_VERTEX_ENABLE_PROMPT_CACHING: true
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          prompt: |
            @claudeメンションのコメントに基づいて対応してください。
            リポジトリのCLAUDE.mdファイルのガイドラインに従ってください。
          max_turns: 10
          timeout_minutes: 30
          allowed_tools: |
            - 'Bash(npm install)'
            - 'Bash(npm test)'
            - 'str_replace_editor'

高度な設定

プロキシ経由での接続

プロキシサーバー経由で接続する場合:

env:
  ANTHROPIC_VERTEX_BASE_URL: "https://your-proxy-server.com/vertex"
  # プロキシが独自の認証を管理する場合
  CLAUDE_CODE_SKIP_VERTEX_AUTH: true

設定ファイルでの管理

環境変数の代わりに設定ファイルを使用する場合、.claude-code/config.jsonを作成:

{
  "env": {
    "ANTHROPIC_VERTEX_PROJECT_ID": "your-project-id",
    "ANTHROPIC_VERTEX_REGION": "us-east5",
    "CLAUDE_CODE_ENDPOINT": "vertex"
  }
}

APIキーヘルパーの設定(動的認証)

起動時に動的にトークンを取得する場合:

{
  "apiKeyHelper": "path/to/your/auth-script.sh",
  "env": {
    "CLAUDE_CODE_API_KEY_HELPER_TTL_MS": "3600000"
  }
}

セキュリティのベストプラクティス

1. 明示的なツール許可

ワイルドカードを避け、具体的なコマンドを指定:

allowed_tools: |
  - 'Bash(npm install)'
  - 'Bash(npm test)'
  - 'str_replace_editor'
# 避けるべき例: 'Bash(*)'

2. 適切な権限の設定

GitHub Actionsのpermissionsを必要最小限に:

permissions:
  id-token: write  # GCP認証用
  contents: write  # コード変更用
  issues: write    # Issue操作用
  pull-requests: write  # PR操作用

3. タイムアウトとターン数の制限

max_turns: 10  # 過剰な繰り返しを防ぐ
timeout_minutes: 30  # 暴走を防ぐ

トラブルシューティング

1. 認証エラー

  • GCPプロジェクトIDとリージョンが正しいか確認
  • サービスアカウントに必要な権限があるか確認
  • Workload Identity Federationが正しく設定されているか確認

2. モデルアクセスエラー

  • Claude Sonnet 3.7とClaude Haiku 3.5の両方にアクセス権があるか確認
  • us-east5リージョンでクォータが割り当てられているか確認

3. レート制限

  • Googleにレート制限の引き上げを依頼
  • ワークフローの同時実行を制限

使用例

課題をPRに変換

@claude この課題の説明に基づいて実装を作成し、PRを作成してください。

コードレビュー

# プルリクエスト作成時の自動レビュー
on:
  pull_request:
    types: [opened, synchronize]

バグ修正

@claude このエラーを修正して、テストが通るようにしてください。

コスト最適化

  1. 特定の@claudeコマンドを使用して不要なAPI呼び出しを削減
  2. max_turnsを適切に設定して過剰な繰り返しを防ぐ
  3. プロンプトキャッシングを有効化してコストを削減
  4. CLAUDE.mdファイルでプロジェクト固有のガイドラインを定義

参考リンク

Discussion