Claude Code GitLab CI/CD
Claude Code を GitLab CI/CD で開発ワークフローに統合する方法を学びます
Claude Code for GitLab CI/CD は現在ベータ版です。機能と機能性は、エクスペリエンスを改善する際に進化する可能性があります。
この統合は GitLab によって保守されています。サポートについては、以下の GitLab issue を参照してください。
この統合は Claude Code CLI and Agent SDK の上に構築されており、CI/CD ジョブとカスタム自動化ワークフローで Claude をプログラム的に使用できます。
GitLab で Claude Code を使用する理由
- インスタント MR 作成: 必要なことを説明すると、Claude は変更と説明を含む完全な MR を提案します
- 自動実装: 単一のコマンドまたはメンションで issue を実行可能なコードに変換します
- プロジェクト対応: Claude は
CLAUDE.mdガイドラインと既存のコードパターンに従います - シンプルなセットアップ:
.gitlab-ci.ymlに 1 つのジョブとマスクされた CI/CD 変数を追加します - エンタープライズ対応: Claude API、Amazon Bedrock、または Google Cloud の Agent Platform を選択して、データレジデンシーと調達のニーズを満たします
- デフォルトでセキュア: GitLab ランナーで実行され、ブランチ保護と承認が適用されます
仕組み
Claude Code は GitLab CI/CD を使用して AI タスクを分離されたジョブで実行し、MR 経由で結果をコミットバックします。
-
イベント駆動型オーケストレーション: GitLab は選択したトリガー(例えば、issue、MR、またはレビュースレッドで
@claudeをメンションするコメント)をリッスンします。ジョブはスレッドとリポジトリからコンテキストを収集し、その入力からプロンプトを構築し、Claude Code を実行します。 -
プロバイダー抽象化: 環境に適したプロバイダーを使用します。
- Claude API(SaaS)
- Amazon Bedrock(IAM ベースのアクセス、クロスリージョンオプション)
- Google Cloud の Agent Platform(GCP ネイティブ、Workload Identity Federation)
-
サンドボックス実行: 各インタラクションは厳密なネットワークとファイルシステムルールを持つコンテナで実行されます。Claude Code はワークスペーススコープの権限を適用して書き込みを制限します。すべての変更は MR を通じてフローするため、レビュアーは diff を確認でき、承認が引き続き適用されます。
地域エンドポイントを選択して、既存のクラウド契約を使用しながらレイテンシーを削減し、データソブリンティ要件を満たします。
Claude にはどのようなことができますか?
GitLab パイプラインでは、Claude Code は以下のことができます:
- issue の説明またはコメントから MR を作成および更新する
- パフォーマンス低下を分析し、最適化を提案する
- ブランチに機能を直接実装してから MR を開く
- テストまたはコメントで特定されたバグおよび低下を修正する
- フォローアップコメントに応答して、リクエストされた変更を反復する
セットアップ
クイックセットアップ
最速で始める方法は、.gitlab-ci.yml に最小限のジョブを追加し、API キーをマスク変数として設定することです。
-
マスク CI/CD 変数を追加する
- Settings → CI/CD → Variables に移動します
ANTHROPIC_API_KEYを追加します(マスク、必要に応じて保護)
-
.gitlab-ci.ymlに Claude ジョブを追加する
stages:
- ai
claude:
stage: ai
image: node:24-alpine3.21
# ジョブをトリガーする方法に合わせてルールを調整します:
# - 手動実行
# - マージリクエストイベント
# - '@claude' を含むコメント時の web/API トリガー
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
GIT_STRATEGY: fetch
before_script:
- apk update
- apk add --no-cache git curl bash
- curl -fsSL https://claude.ai/install.sh | bash
# インストーラーは claude を ~/.local/bin に配置しますが、このイメージの PATH には含まれていません
- export PATH="$HOME/.local/bin:$PATH"
script:
# オプション:セットアップが提供する場合は GitLab MCP サーバーを起動します
- /bin/gitlab-mcp-server || true
# コンテキストペイロード付きの web/API トリガー経由で呼び出す場合は AI_FLOW_* 変数を使用します
- echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"
- >
claude
-p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug
ジョブと ANTHROPIC_API_KEY 変数を追加した後、CI/CD → Pipelines からジョブを手動で実行してテストするか、MR からトリガーして Claude が提案した更新をブランチで実装し、必要に応じて MR を開くことができます。
Claude API の代わりに Amazon Bedrock または Google Cloud の Agent Platform で実行する場合は、認証と環境セットアップについて下記の Amazon Bedrock と Google Cloud を使用する セクションを参照してください。
手動セットアップ(本番環境に推奨)
より制御されたセットアップが必要な場合またはエンタープライズプロバイダーが必要な場合:
-
プロバイダーアクセスを設定する:
- Claude API:
ANTHROPIC_API_KEYを作成してマスク CI/CD 変数として保存します - Amazon Bedrock:Configure GitLab → AWS OIDC を設定し、Amazon Bedrock 用の IAM ロールを作成します
- Google Cloud の Agent Platform:Configure Workload Identity Federation for GitLab → GCP を設定します
- Claude API:
-
GitLab API 操作用のプロジェクト認証情報を追加する:
- デフォルトで
CI_JOB_TOKENを使用するか、apiスコープを持つ Project Access Token を作成します - PAT を使用する場合は
GITLAB_ACCESS_TOKEN(マスク)として保存します
- デフォルトで
-
.gitlab-ci.ymlに Claude ジョブを追加する:Claude API の場合は クイックセットアップ ジョブを使用するか、設定例 からプロバイダージョブを使用します -
(オプション)メンション駆動トリガーを有効にする:
- 「Comments (notes)」のプロジェクト webhook をイベントリスナー(使用している場合)に追加します
- コメントに
@claudeが含まれている場合、リスナーがAI_FLOW_INPUTやAI_FLOW_CONTEXTなどの変数を使用してパイプライントリガー API を呼び出すようにします
使用例
Issue を MR に変換する
Issue コメント内:
@claude implement this feature based on the issue description
Claude は Issue とコードベースを分析し、ブランチで変更を記述して、レビュー用の MR を開きます。
実装サポートを取得する
MR ディスカッション内:
@claude suggest a concrete approach to cache the results of this API call
Claude は変更を提案し、適切なキャッシング機能を備えたコードを追加し、MR を更新します。
バグを素早く修正する
Issue または MR コメント内:
@claude fix the TypeError in the user dashboard component
Claude はバグを特定し、修正を実装し、ブランチを更新するか新しい MR を開きます。
Amazon Bedrock と Google Cloud での使用
エンタープライズ環境では、Claude Code をクラウドインフラストラクチャ全体で実行でき、同じ開発者体験を得られます。
前提条件
Amazon Bedrock で Claude Code をセットアップする前に、以下が必要です。
- 目的の Claude モデルへの Amazon Bedrock アクセス権を持つ AWS アカウント
- AWS IAM で OIDC アイデンティティプロバイダーとして設定された GitLab
- Amazon Bedrock 権限を持つ IAM ロールと、GitLab プロジェクト/refs に制限されたトラストポリシー
- ロール引き受けのための GitLab CI/CD 変数:
AWS_ROLE_TO_ASSUME(ロール ARN)AWS_REGION(Amazon Bedrock リージョン)
セットアップ手順
GitLab CI ジョブが OIDC 経由で IAM ロールを引き受けることを許可するよう AWS を設定します(静的キーは不要)。
必須セットアップ:
- Amazon Bedrock を有効にし、目的の Claude モデルへのアクセスをリクエストします
- まだ存在しない場合は、GitLab 用の IAM OIDC プロバイダーを作成します
- GitLab OIDC プロバイダーによって信頼され、プロジェクトと保護された refs に制限された IAM ロールを作成します
- Amazon Bedrock invoke API に対する最小権限パーミッションをアタッチします
Amazon Bedrock ジョブの例を使用して、実行時にジョブの OIDC トークンを一時的な AWS 認証情報と交換します。
前提条件
Google Cloud's Agent Platform で Claude Code をセットアップする前に、以下が必要です。
- 以下を備えた Google Cloud プロジェクト:
- Google Cloud's Agent Platform API が有効化されている
- GitLab OIDC を信頼するよう設定された Workload Identity Federation
- 必要な Google Cloud's Agent Platform ロールのみを持つ専用サービスアカウント
- GitLab CI/CD 変数:
GCP_WORKLOAD_IDENTITY_PROVIDER(//iam.googleapis.com/プレフィックスなしのプロバイダーリソース名。例:projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider)GCP_SERVICE_ACCOUNT(サービスアカウントメール)GCP_PROJECT_ID(Google Cloud プロジェクト ID)
セットアップ手順
Workload Identity Federation 経由で GitLab CI ジョブがサービスアカウントを偽装することを許可するよう Google Cloud を設定します。
必須セットアップ:
- IAM Credentials API、STS API、および Google Cloud's Agent Platform API を有効にします
- GitLab OIDC 用の Workload Identity Pool とプロバイダーを作成します
- Google Cloud's Agent Platform ロールを持つ専用サービスアカウントを作成します
- WIF プリンシパルにサービスアカウントを偽装するパーミッションを付与します
Agent Platform ジョブの例を使用して、キーを保存することなく認証します。
設定例
以下は、パイプラインに適応させることができる、すぐに使用できるスニペットです。
Amazon Bedrock ジョブの例(OIDC)
前提条件:
- Amazon Bedrock が有効化され、選択した Claude モデルへのアクセスが可能
- GitLab OIDC が AWS で設定され、GitLab プロジェクトと refs を信頼するロールが存在
- Amazon Bedrock 権限を持つ IAM ロール(最小権限を推奨)
必須 CI/CD 変数:
AWS_ROLE_TO_ASSUME:Amazon Bedrock アクセス用の IAM ロールの ARNAWS_REGION:Amazon Bedrock リージョン(例:us-west-2)
GitLab は id_tokens: ブロックからジョブの OIDC トークンを生成し、GITLAB_OIDC_TOKEN として公開します。aud を AWS の IAM OIDC アイデンティティプロバイダーで設定したオーディエンス値(例:GitLab インスタンス URL)に設定します。
stages:
- ai
claude-bedrock:
stage: ai
image: node:24-alpine3.21
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
id_tokens:
GITLAB_OIDC_TOKEN:
aud: https://gitlab.example.com
before_script:
- apk add --no-cache bash curl jq git aws-cli
- curl -fsSL https://claude.ai/install.sh | bash
# The installer places claude in ~/.local/bin, which isn't on PATH in this image
- export PATH="$HOME/.local/bin:$PATH"
# Exchange the job's OIDC token for AWS credentials
- export AWS_WEB_IDENTITY_TOKEN_FILE="/tmp/oidc_token"
- printf "%s" "$GITLAB_OIDC_TOKEN" > "$AWS_WEB_IDENTITY_TOKEN_FILE"
- >
aws sts assume-role-with-web-identity
--role-arn "$AWS_ROLE_TO_ASSUME"
--role-session-name "gitlab-claude-$(date +%s)"
--web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"
--duration-seconds 3600 > /tmp/aws_creds.json
- export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"
- export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"
- export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"
script:
- /bin/gitlab-mcp-server || true
- >
claude
-p "${AI_FLOW_INPUT:-'Implement the requested changes and open an MR'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug
variables:
AWS_REGION: "us-west-2"
CLAUDE_CODE_USE_BEDROCK: "1"
Amazon Bedrock のモデル ID にはリージョン固有のプレフィックスが含まれます(例:us.anthropic.claude-sonnet-4-6)。ワークフローがサポートしている場合は、ジョブ設定またはプロンプトを通じて目的のモデルを渡します。
Agent Platform ジョブの例(Workload Identity Federation)
前提条件:
- Google Cloud の Agent Platform API が GCP プロジェクトで有効化
- Workload Identity Federation が GitLab OIDC を信頼するように設定
- Google Cloud の Agent Platform 権限を持つサービスアカウント
必須 CI/CD 変数:
GCP_WORKLOAD_IDENTITY_PROVIDER://iam.googleapis.com/プレフィックスなしのプロバイダーリソース名(例:projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider)GCP_SERVICE_ACCOUNT:サービスアカウントメールGCP_PROJECT_ID:Google Cloud プロジェクト IDCLOUD_ML_REGION:Google Cloud の Agent Platform リージョン(例:us-east5)
GitLab は id_tokens: ブロックからジョブの OIDC トークンを生成し、GITLAB_OIDC_TOKEN として公開します。aud を Workload Identity Pool プロバイダーで設定したオーディエンス値(例:GitLab インスタンス URL)に設定します。ジョブはトークンをファイルに書き込み、認証情報設定の credential_source エントリは Google の認証ライブラリにそこから読み込むよう指示します。GOOGLE_APPLICATION_CREDENTIALS を認証情報設定ファイルに設定すると、Application Default Credentials を通じて Claude Code で利用可能になります。
stages:
- ai
claude-vertex:
stage: ai
image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
id_tokens:
GITLAB_OIDC_TOKEN:
aud: https://gitlab.example.com
before_script:
- apt-get update && apt-get install -y git && apt-get clean
- curl -fsSL https://claude.ai/install.sh | bash
# The installer places claude in ~/.local/bin, which isn't on PATH in this image
- export PATH="$HOME/.local/bin:$PATH"
# Write the job's OIDC token where credential_source expects it
- printf "%s" "$GITLAB_OIDC_TOKEN" > /tmp/oidc_token
# Write the WIF credential configuration to a file (no downloaded keys)
- |
cat > /tmp/cred.json <<EOF
{
"type": "external_account",
"audience": "//iam.googleapis.com/${GCP_WORKLOAD_IDENTITY_PROVIDER}",
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
"token_url": "https://sts.googleapis.com/v1/token",
"credential_source": {
"file": "/tmp/oidc_token"
},
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT}:generateAccessToken"
}
EOF
# Expose the credentials to Claude Code via Application Default Credentials
- export GOOGLE_APPLICATION_CREDENTIALS=/tmp/cred.json
# Authenticate the gcloud CLI with the same credential configuration
- gcloud auth login --cred-file=/tmp/cred.json
- gcloud config set project "$GCP_PROJECT_ID"
script:
- /bin/gitlab-mcp-server || true
- >
CLOUD_ML_REGION="${CLOUD_ML_REGION:-us-east5}"
claude
-p "${AI_FLOW_INPUT:-'Review and update code as requested'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug
variables:
CLOUD_ML_REGION: "us-east5"
CLAUDE_CODE_USE_VERTEX: "1"
ANTHROPIC_VERTEX_PROJECT_ID: "$GCP_PROJECT_ID"
Workload Identity Federation では、サービスアカウントキーを保存する必要がありません。リポジトリ固有の信頼条件と最小権限のサービスアカウントを使用します。
ベストプラクティス
CLAUDE.md 設定
リポジトリのルートに CLAUDE.md ファイルを作成して、コーディング標準、レビュー基準、プロジェクト固有のルールを定義します。Claude はランの実行中にこのファイルを読み込み、変更を提案する際にあなたの規約に従います。
セキュリティに関する考慮事項
API キーやクラウド認証情報をリポジトリにコミットしないでください。常に GitLab CI/CD 変数を使用してください:
ANTHROPIC_API_KEYをマスク変数として追加します(必要に応じて保護してください)- 可能な限りプロバイダー固有の OIDC を使用します(長期的なキーは不要)
- ジョブの権限とネットワーク出力を制限します
- Claude の MR を他のコントリビューターと同じようにレビューします
パフォーマンスの最適化
CLAUDE.mdを焦点を絞った簡潔なものに保ちます- 明確なイシュー/MR の説明を提供して、反復を減らします
- ランナーで npm とパッケージのインストールをキャッシュします(可能な場合)
CI コスト
Claude Code を GitLab CI/CD で使用する場合、関連するコストに注意してください:
-
GitLab ランナー時間:
- Claude はあなたの GitLab ランナーで実行され、コンピュート分を消費します
- 詳細については、GitLab プランのランナー課金を参照してください
-
API コスト:
- Claude との各インタラクションは、プロンプトと応答のサイズに基づいてトークンを消費します
- トークン使用量はタスクの複雑さとコードベースのサイズによって異なります
- 詳細については、Anthropic 価格を参照してください
-
コスト最適化のヒント:
- 特定の
@claudeコマンドを使用して、不要なターンを減らします - 適切な
--max-turnsとジョブtimeout値を設定します - 並列実行を制御するために同時実行を制限します
- 特定の
トラブルシューティング
Claude が @claude コマンドに応答しない
- パイプラインがトリガーされていることを確認してください(手動、MR イベント、またはノート イベント リスナー/webhook 経由)
ANTHROPIC_API_KEYまたはクラウドプロバイダー変数が存在することを確認してください- コメントに
@claudeが含まれていること(/claudeではなく)、メンション トリガーが設定されていることを確認してください
ジョブがコメントを書き込めない、または MR を開けない
CI_JOB_TOKENがプロジェクトに対して十分な権限を持っていることを確認するか、apiスコープを持つプロジェクト アクセス トークンを使用してくださいmcp__gitlabツールが--allowedToolsで有効になっていることを確認してください- ジョブが MR のコンテキストで実行されているか、
AI_FLOW_*変数を経由して十分なコンテキストを持っていることを確認してください
認証エラー
- Claude API の場合:
ANTHROPIC_API_KEYが有効で期限切れでないことを確認してください - Amazon Bedrock または Google Cloud の Agent Platform の場合: OIDC/WIF 設定、ロール偽装、シークレット名を確認してください。リージョンとモデルの可用性を確認してください
高度な設定
一般的なパラメータと変数
これらの CLI フラグ、GitLab キーワード、および変数を使用して、ジョブ内の Claude Code 実行を制御します。
-p: インラインで指示を提供します。例えばclaude -p "Review this MR"--max-turns: バックアンドフォース反復の回数を制限しますtimeout: GitLab のジョブレベルのtimeoutキーワードで総ジョブ実行時間を制限します。例えばtimeout: 30mANTHROPIC_API_KEY: Claude API に必要です(Amazon Bedrock または Google Cloud の Agent Platform では使用されません)- プロバイダー固有の環境:
AWS_REGION、Google Cloud の Agent Platform のプロジェクト/リージョン変数
正確なフラグとパラメータは @anthropic-ai/claude-code のバージョンによって異なる場合があります。ジョブ内で claude --help を実行して、サポートされているオプションを確認してください。
Claude の動作をカスタマイズする
Claude をガイドする方法は 2 つあります。
- CLAUDE.md: コーディング標準、セキュリティ要件、およびプロジェクト規約を定義します。Claude は実行中にこれを読み、ルールに従います。
- カスタムプロンプト: ジョブ内の
-pを使用してタスク固有の指示を渡します。異なるジョブに異なるプロンプトを使用します(例えば、レビュー、実装、リファクタリング)。