ゼスト Tech Blog

ゼストは「護りたい。その想いを護る。」をミッションに、在宅医療・介護業界向けのSaaSを開発しています。

Claude Code Action Via Vertex AI 完全ガイド

Claude Code 流行っていますね!ZESTでも絶賛利用しています!

Claude Codeはローカル環境での実行がメインな利用方法になるかと思いますが、開発元のAnthropicからGitHub Actionsで利用できるClaude Code Actionも提供されています。 Claude Code Actionを利用することで

  • GitHub上のIssueを起点にClaude Codeを実行し、PRを作成
  • 作成したPRに対して、Claude Codeからコードレビューを実施

等のGitDevin/GitHub Copilot Code Review等で実行させていたことをClaude Codeでも実現できます。

ZESTではメインのクラウド環境としてGoogle Cloudを利用しているため、今回はVertex AI経由でClaude Code Actionを実行する方法を紹介します。*1

Vertex AIとは?

Vertex AIは、Google Cloudが提供する生成AIのためのフルマネージドの統合AI開発環境プラットフォームです。

AI アプリケーションの構築やML Ops向けの機能等、生成AIを構築、活用するための様々な機能が提供されています。

今回はその中で、Vertex AI上で様々なLLMを利用できるModel Gardenを利用します。

cloud.google.com

Claude Code Action Via Vertex AI 構築ガイド

実はAnthropicのドキュメントでVertex AIやAWS Bedrock経由で利用する方法について、既に記載してくれています。

docs.anthropic.com

このドキュメント通りに構築すれば、問題なく利用できるようになるのですが、今回はよりセキュアに利用できる方法として少し公式ドキュメントから手順を変更しています。

手順としては下記の流れになります。

  1. カスタム GitHub Appsを作成*2
  2. Vertex AI上でAnthropicのLLMを有効化する
  3. Google Cloud 上でWorkload Identity 連携を設定する*3
  4. Claude Code Actionを設定する

1. カスタムGitHub Appsを作成

GitHub Appsとは?については、過去に記事を作成しているので、ご参照ください。

techblog.zest.jp

GitHub上で、Organization -> Settings -> Developer settings -> GitHub Apps -> New GitHub Appから新規GitHub Appsを作成します。
新規作成画面で下記の通り設定します。

  • GitHub App name: ユニークな名前を入力します。(XXXOrg Claude Assistant等)
  • Homepage URL: リポジトリのURLや自社サイトのURL等
  • Webhooks: 「Active」のチェックを外します
  • 必要な権限を設定します
    • Repository permissions
      • Contents: Read & Write
      • Issues: Read & Write
      • Pull requests: Read & Write

Generalから「Generate a private key」をクリックしてダウンロードした.pemファイルを保存します。

App IDについてメモしておきます。

最後に作成したアプリをリポジトリにインストールします。

  • アプリの設定ページから、左サイドバーの「Install App」をクリック
  • アカウントまたは組織を選択
  • 「Only select repositories」を選択し、特定のリポジトリを選択
  • 「Install」をクリック

2. Vertex AI上でAnthropicのLLMを有効化する

Google CloudのVertex AIでModel Gardenを選択します。 すべてのパートナーから「Anthropic」を選択します。

Anthropicが提供しているモデルが表示されるので、利用しているモデルを有効化します。現在なら、Claude Opus 4やClaude Sonnet 4になるかと思います。複数有効化しても問題なく、後ほどClaude Code Actionから利用するモデルを選択することができます。

有効化するためには、利用規約に同意する必要があるので、必要事項を入力します。

以上の手順でVertex AI上でAnthropicのモデルが利用できるようになります。

3. Google Cloud 上でWorkload Identity 連携を設定する

外部サービスからGoogle Cloudのサービスを利用する場合にはサービスアカウントキー等を利用する必要がありました。ただしキーによる認証/認可にはキーの漏洩によるセキュリティリスクが懸念されます。
Workload Identityを利用することで、OIDCやSAML等により安全に連携することができるようになります。

cloud.google.com

Workload Identityを紹介している記事ではよく下記の方法を紹介しています。

  1. Workload Identity Poolの作成
  2. プロバイダーの設定
  3. サービスアカウントの作成
  4. サービスアカウントに権限を付与

Workload Identity経由でサービスアカウントの権限を利用することで、Google Cloudのサービスにアクセスすることができます。(Workload Identity Federation through a Service Account)

今回はWorkload IdentityのPrincipalに直接権限を付与する方法を利用します。(Direct Workload Identity Federation)
この方法によりサービスアカウントを作成することなく、Workload Identityから直接Google Cloudのサービスにアクセスすることができます。*4
こちらの方法は後ほど利用するGoogleが提供しているGitHub Actionの google-github-actions/auth でも推奨されている方法になります。

github.com

IAMと管理 -> Workload Identity連携に移動し、IDプールを作成します。

名前には分かりやすい名前を入力します。

プロバイダで下記の通り設定します。

最後に属性のマッピングと属性条件を指定します。

  • google.subject: assertion.sub
  • attribute.repository_owner: assertion.repository_owner
  • attribute.actor: assertion.actor
  • attribute.repository: assertion.repository

assertion.repository_owner == '<Your GitHub Organization Name>'

属性条件を指定しない場合、GitHubからのアクセスについては、全て許可されることになります。必ず、repository ownerやrepository nameで制限するようにしましょう。

作成したプールIDとプロバイダの表示名をメモしておきます。

IAMから下記で権限を付与します。

  • プリンシパル: principalSet://iam.googleapis.com/projects/<プロジェクト番号>/locations/global/workloadIdentityPools/<プールID>/attribute.repository/<GitHub Actionを実行するリポジトリ名(eg. <Your Org>/<Your Repo>)>
  • ロール: Vertex AI ユーザ

以上でGoogle Cloud上の作業は完了です。

4. Claude Code Actionを設定する

Claude Code Actionを利用するリポジトリで下記をシークレットに登録します。

  • APP_ID: 1で作成したGitHub AppsのApp ID
  • APP_PRIVATE_KEY: 1で作成したGitHub Appsのprivate key
  • GCP_WORKLOAD_IDENTITY_PROJECT_ID : 3で作成したWorkload Identityを作成したGoogle CloudのプロジェクトID
  • GCP_WORKLOAD_IDENTITY_PROVIDER: projects/<Google Cloudのプロジェクト番号>/locations/global/workloadIdentityPools/<Workload Identity プール ID>/providers/<Workload Identity プロバイダの表示名またはID>

Claude Code Actionのワークフローとして下記のyamlファイルを.github/workflows配下に作成します。

name: Claude Code Action

permissions:
  contents: write
  pull-requests: write
  issues: write
  id-token: write

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]    

jobs:
  claude-pr:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Authenticate to Google Cloud
        id: auth
        uses: google-github-actions/auth@v2
        with:
          project_id: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROJECT_ID }}
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}

      - uses: anthropics/claude-code-action@beta
        with:
          trigger_phrase: "@claude"
          timeout_minutes: "60"
          github_token: ${{ steps.app-token.outputs.token }}
          use_vertex: "true"
          model: "claude-sonnet-4@20250514"
        env:
          ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}
          CLOUD_ML_REGION: us-east5
          BASE_BRANCH: main

このワークフローを設定することで、issueやPRのコメントで@claudeをメンションするだけで、Claude Codeを実行できます。

各ステップについていくつか補足します。

      - name: Authenticate to Google Cloud
        id: auth
        uses: google-github-actions/auth@v2
        with:
          project_id: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROJECT_ID }}
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}

こちらのステップでGitHub ActionからWorkload Identityを呼び出し、認証しています。今回直接 Workload IdentityにIAM権限を付与しているため、project_idは必ず指定するようにしてください。

      - uses: anthropics/claude-code-action@beta
        with:
          trigger_phrase: "@claude"
          timeout_minutes: "60"
          github_token: ${{ steps.app-token.outputs.token }}
          use_vertex: "true"
          model: "claude-sonnet-4@20250514"
        env:
          ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}
          CLOUD_ML_REGION: us-east5
          BASE_BRANCH: main

メインのステップになります。

CLOUD_ML_REGIONには、us-east5を指定する必要があります。これはVertex AI上のAnthropicのモデルがus-east5でしかサポートされていないからです。

modelで利用するモデルを指定しています。Claude Opus 4を利用する場合は、こちらを変更します。

またwithには promptprompt_file を指定することで、プロンプトをカスタマイズすることもできます。

詳細については、下記を参照ください。

github.com

まとめ

Vertex AI経由でClaude Code Actionを利用する方法について紹介しました。

Claude CodeやCursor等の生成AIエージェントの進化は凄まじく、毎月のように何らかのアップデートがあります。

キャッチアップが大変な面はありつつも、利用することでの開発効率の向上は大きく、積極的に取り入れていく価値があると感じています。

ZESTでは今後もClaude Codeをはじめとした生成AIツールを活用し、より効率的な開発フローの構築に取り組んでいきます。

*1:Claude Code Max Plan経由でClaude Code Actionを実行する方法も存在しますが、Vertex AI経由で利用することにより、請求をクラウド利用料に統合できること、また各利用料の監視、制限も実施できるようになります。

*2:Anthropicが提供しているGitHub Appsでも利用できるようですが、ドキュメント上でも3rd Partyのプロバイダーを利用する際はカスタムで作成することが推奨されているため、本記事でもGitHub Appsを作成します

*3:公式ドキュメントではサービスアカウントを作成する形ですが、本記事ではDirect Workload Identity Federationを利用します。

*4:サービスアカウントを作成すると意図しないキーの作成やリソースでの利用がされることがあります。極力作成しないことで、よりセキュアに利用できます。