development·

Claude Code × Docker活用ガイド|環境構築からCI/CD・IaC自動化まで

Claude CodeをDocker環境で安全に動かす方法と、Dockerfile生成・CI/CDパイプライン構築・Terraform自動化などDevOps活用を解説。DevContainer・Docker Sandbox・docker-composeの比較、GitHub Actions連携、セキュリティ対策まで網羅します。

Claude Code × Docker活用ガイド|環境構築からCI/CD・IaC自動化まで

Claude Codeを使い始めたとき、「ホストマシンのファイルを自由に書き換えられるのは怖い」と感じたことはないでしょうか。逆に、「Dockerfileをもっと速く書きたい」「CI/CDパイプラインの構築をAIに任せたい」と考えたことはないでしょうか。

Claude Code × Dockerには、実は2つの活用軸があります。1つ目は「Claude CodeをDocker環境内で安全に動かす」こと。2つ目は「Claude CodeでDockerfile・CI/CD・インフラコードを自動生成する」こと。多くの記事は前者だけを扱いますが、本記事では両方を体系的に解説します。

Claude Codeの基本についてはClaude Codeとは?できること・料金・始め方を、全体像はClaude Code完全ガイドを参照してください。

この記事のポイント

  • Claude CodeはDevContainer・Docker Sandbox・docker-composeの3方式でDocker内実行が可能
  • Claude CodeにDockerfile・docker-compose.ymlの生成・最適化を任せられる
  • GitHub Actionsワークフローの自動生成でCI/CDパイプラインを効率的に構築できる
  • Terraform等のIaCコード生成にも対応し、インフラ構築を加速できる
  • コンテナセキュリティ(イメージスキャン・シークレット管理・ネットワーク分離)はDocker活用の必須要素

Claude Code × DevOpsとは — 2つの活用軸を理解する

Claude Code × DevOpsとは、AIコーディングエージェントであるClaude Codeを、Docker環境構築・CI/CDパイプライン・インフラコード管理などのDevOps業務に活用するアプローチです。

DevOpsの現場では、Dockerの採用が加速しています。Docker公式ブログで発表された「2025 State of Application Development Report」によると、IT業界におけるDocker採用率は92%に達しました。同時に、DORAの「2025 Accelerate State of DevOps Report」(約5,000人のソフトウェア開発専門家を対象)では、調査回答者の90%がAIを業務で使用していると報告されています。

こうした背景の中、Claude CodeをDevOps文脈で活用する動きが広がっています。Claude Codeはターミナルで直接dockerコマンドやterraformコマンドを実行でき、設定ファイルの読み書きも行えるため、DevOpsの各工程をAIで効率化できる立場にあります。

本記事では、以下の2軸で解説を進めます。

内容対象読者
環境編Claude CodeをDocker内で安全に動かす全エンジニア
活用編Claude CodeでDevOpsインフラを自動化するDevOps / SRE / テックリード

Claude CodeをDocker環境で動かす3つの方法

Claude CodeをDocker環境で実行する方法は、DevContainer・Docker Sandbox・docker-composeの3つがあります。 それぞれ分離レベルと柔軟性が異なるため、チーム規模やセキュリティ要件に応じて選択してください。

方法1 — DevContainer(公式推奨)

DevContainerは、VS CodeやGitHub Codespacesと連携して、コンテナ内に統一された開発環境を構築する仕組みです。Anthropicが公式にDevContainer Feature を提供しており、最も手軽にClaude Codeをコンテナ化できます。

基本的な設定ファイルは以下の通りです。

// .devcontainer/devcontainer.json
{
  "name": "Claude Code Dev",
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
  },
  "postCreateCommand": "claude --version",
  "remoteUser": "vscode"
}

VS Codeの「Reopen in Container」を実行するだけで、Claude Codeがインストールされたコンテナ環境が起動します。チーム全員が同じ環境で作業できるため、「自分の環境では動くのに」という問題がなくなります。DevContainerの設定ファイルはリポジトリにコミットできるため、新メンバーのオンボーディングも容易です。

方法2 — Docker Sandbox(MicroVM分離)

Docker Sandboxは、ネイティブハイパーバイザー(macOSではvirtualization.framework、WindowsではHyper-V)を利用したMicroVMで、各セッションに独立した実行環境を提供する方式です。通常のDockerコンテナよりも強力な分離を実現し、--dangerously-skip-permissionsフラグを安全に利用できます。

# Docker Sandboxの起動(プロジェクトディレクトリで実行)
docker sandbox run claude

Docker Sandboxでは、各セッションに専用のDockerデーモン・ファイルシステム・ネットワークが割り当てられ、ホストへの影響を防ぎます。自律的にClaude Codeを長時間実行させたい場合に適しています。

方法3 — docker-compose(カスタム構成)

既存のプロジェクトにdocker-compose.ymlがある場合、そこにClaude Code用のサービスを追加する方法です。データベースやキャッシュなどの周辺サービスと一緒にClaude Codeを動かせるため、統合テストやE2Eテストの実行環境として便利です。

# docker-compose.yml
services:
  claude-dev:
    build:
      context: .
      dockerfile: .devcontainer/Dockerfile
    volumes:
      - .:/workspace:cached
      - claude-config:/home/developer/.claude
    env_file: .env  # ANTHROPIC_API_KEYを.envファイルから読み込み
    working_dir: /workspace
    tty: true

  db:
    image: postgres:17
    environment:
      POSTGRES_DB: app_dev
      POSTGRES_PASSWORD: ${DB_PASSWORD}

volumes:
  claude-config:

claude-configボリュームでClaude Codeの認証情報を永続化しているため、コンテナを再作成しても毎回claude loginを実行する必要がありません。

【比較表】どの方式を選ぶべきか

項目DevContainerDocker Sandboxdocker-compose
分離レベルコンテナMicroVMコンテナ
セットアップ難度
VS Code連携ネイティブ限定的拡張機能で対応
自律実行(skip-permissions)非推奨安全に可能非推奨
複数サービス構成可能(compose併用)単体のみネイティブ
推奨シーンチーム開発の標準化自律的なAIエージェント実行既存compose環境への統合

判断の目安:

  • 個人開発・チーム開発 → DevContainer(環境統一と手軽さのバランス)
  • 自律AIエージェント運用 → Docker Sandbox(最高レベルの分離)
  • 既存プロジェクトへの追加 → docker-compose(周辺サービスとの統合)

エンタープライズでの導入検討が必要な場合は、セキュリティ要件に応じてDocker Sandboxを基本とし、組織のポリシーに沿った構成を検討してください。

Dockerfile・docker-compose.ymlの自動生成と最適化

Claude Codeは、プロジェクトの構成を分析してDockerfileやdocker-compose.ymlを自動生成できます。 既存のDockerfileの最適化も得意で、マルチステージビルドの導入やイメージサイズの削減を提案します。

基本的なDockerfile生成

プロジェクトのルートディレクトリでClaude Codeに依頼するだけで、言語・フレームワークを自動判別してDockerfileを生成します。

このNext.jsプロジェクト用の本番Dockerfileを作成して。
マルチステージビルドで、最終イメージはできるだけ軽量にして。

Claude Codeはpackage.json、next.config.ts、tsconfig.jsonなどを読み取り、プロジェクトに最適化されたDockerfileを生成します。.dockerignoreも同時に生成するため、不要なファイルがイメージに含まれることを防げます。

生成されたDockerfileをさらに改善したい場合も、自然言語で指示できます。

このDockerfileにヘルスチェックを追加して。
あと、非rootユーザーで実行するように変更して。

Claude CodeはHEALTHCHECK命令の追加とUSER命令による権限分離を同時に実現します。こうしたセキュリティベストプラクティスの適用は手動では忘れがちですが、AIに依頼することで漏れなく対応できます。

マルチステージビルドの最適化 — Before/After

既存のDockerfileをClaude Codeに渡して最適化を依頼すると、具体的な改善が得られます。

Before(単純な構成):

FROM node:22
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]

After(Claude Codeによる最適化後):

# ---- deps ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

# ---- build ----
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- runner ----
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/.next ./.next
COPY --from=build /app/public ./public
COPY --from=build /app/package.json ./
USER nextjs
EXPOSE 3000
CMD ["npm", "start"]

主な改善ポイントは次の通りです。

  • Alpineベースイメージでサイズを大幅削減(node:22の約1.1GB → node:22-alpineの約60MB)
  • マルチステージビルドで本番イメージにビルドツールが含まれない
  • 非rootユーザー(nextjs)でセキュリティ向上
  • npm ci で再現性のあるインストール

docker-compose.ymlの構築支援

複数環境(開発・ステージング・本番)のcompose設定もClaude Codeに生成を任せられます。ベースとなるcompose.ymlにoverride設定を重ねるパターンが推奨です。

このプロジェクトのdocker-compose.ymlを作成して。
開発環境用のoverride設定(ホットリロード、デバッグポート)も別ファイルで用意して。

CI/CDパイプラインの自動構築 — GitHub Actions編

Claude Codeは、GitHub ActionsのワークフローYAMLを自動生成し、CI/CDパイプラインの構築を効率化します。 テスト・ビルド・デプロイの各ステップを自然言語で指示するだけで、実用的なワークフローが得られます。

GitHub ActionsワークフローYAMLの自動生成

プロジェクトの構成を読み取らせた上で、ワークフローの生成を依頼します。

このNext.jsプロジェクト用のGitHub Actionsワークフローを作成して。
PRが作成されたらlint・型チェック・テストを実行し、
mainにマージされたらDockerイメージをビルドしてGHCRにプッシュするようにして。

Claude Codeが生成するワークフローの例を示します。

name: CI/CD Pipeline

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm test

  build-and-push:
    needs: check
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v6
        with:
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}

ワークフロー生成後、Claude Codeに「このワークフローにセキュリティスキャンのステップを追加して」と依頼すれば、Trivyやdependency-reviewのステップを追加してくれます。

Claude Code ActionによるPR自動レビュー

GitHub ActionsでClaude Codeを動かし、PRの自動レビューやテスト生成を行うことも可能です。PRがオープンされた際にClaude Codeが差分を分析し、レビューコメントを投稿するワークフローを構築できます。

- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: |
      PRの差分をレビューして、以下の観点でコメントしてください:
      - セキュリティリスク
      - パフォーマンスの問題
      - テストカバレッジの不足

Claude Code Hooksと組み合わせることで、ローカルでのコミット前チェックとCIでのPRレビューを二重に実施できます。Hooksの設定方法はClaude Code Hooksの自動化設定を参照してください。

デプロイパイプラインの構築

ステージング環境と本番環境への段階的デプロイも、Claude Codeに設計させられます。環境変数による分岐、承認ゲート(environmentrequired_reviewers)、ヘルスチェックを含むワークフローを生成できます。

ステージング環境へのデプロイをmainマージ時に自動実行し、
本番環境へのデプロイは手動承認後に実行するワークフローを作成して。
ヘルスチェックが失敗したら自動でロールバックする仕組みも入れて。

PRの自動化についてはClaude CodeのPR自動化ガイドも参考にしてください。

インフラコード(IaC)の生成と管理

Claude Codeは、TerraformやCloudFormationなどのインフラコード生成にも対応しています。 クラウドリソースの定義をAIに任せることで、IaCの初期構築を大幅に効率化できます。

TerraformコードをClaude Codeで生成する

Terraform用のスキルやMCPサーバーを活用すると、Claude Codeがベストプラクティスに基づいたIaCを生成します。

AWSにNext.jsアプリをデプロイするためのTerraform設定を作成して。
ECS Fargate + ALB + RDS PostgreSQLの構成で、
環境ごと(dev/staging/prod)にワークスペースで分離してほしい。

Claude Codeが生成するTerraform設定の例を示します。

resource "aws_ecs_service" "app" {
  name            = "${var.env}-app"
  cluster         = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.app.arn
  desired_count   = var.desired_count
  launch_type     = "FARGATE"

  network_configuration {
    subnets          = var.private_subnets
    security_groups  = [aws_security_group.ecs.id]
    assign_public_ip = false  # セキュリティ: パブリックIP付与を無効化
  }
}

リソース命名規則の統一、セキュリティグループの最小権限設定、IAMロールの適切なスコープ、変数のモジュール化といったベストプラクティスが自動で適用されます。

IaCのセキュリティ検証

生成されたIaCコードをそのまま適用するのではなく、セキュリティ検証を挟むことが重要です。Claude Codeに「このTerraform設定のセキュリティリスクをチェックして」と依頼すれば、セキュリティグループの過剰な許可、暗号化の欠落、パブリックアクセスの設定ミスなどを指摘します。

tfsecやcheckovなどの静的解析ツールと組み合わせることで、IaCのセキュリティをCI/CDパイプラインの中で自動的にチェックすることも可能です。

既存IaCのリファクタリング

新規作成だけでなく、既存のTerraformコードの改善もClaude Codeの得意分野です。たとえば、ハードコードされた値の変数化、モジュール分割、命名規則の統一といったリファクタリングを依頼できます。

このTerraform設定をリファクタリングして。
リージョンとインスタンスタイプをvariablesに切り出して、
ネットワーク設定をモジュールに分離してほしい。

Claude Codeは既存のリソース定義を読み取り、依存関係を維持しながら安全にリファクタリングを実行します。terraform planで変更が「No changes」であることを確認すれば、リファクタリングが既存インフラに影響を与えていないことを検証できます。このように、IaCのリファクタリングでは「動作を変えずに構造を改善する」という原則がソフトウェア開発と同様に適用されます。

コンテナセキュリティの自動化

Docker環境でClaude Codeを活用する際、セキュリティはオプションではなく必須要素です。 イメージスキャン・シークレット管理・ネットワーク分離の3つを確実に実装してください。

Dockerイメージのセキュリティスキャン

Trivy(Aqua Security提供のOSSスキャナ)をCI/CDパイプラインに組み込み、DockerイメージのCVE(既知の脆弱性)を自動検出します。

# GitHub Actionsでのスキャン例
- name: Run Trivy vulnerability scanner
  uses: aquasecurity/trivy-action@v0.31.0
  with:
    image-ref: ghcr.io/${{ github.repository }}:${{ github.sha }}
    severity: CRITICAL,HIGH
    exit-code: 1

exit-code: 1を設定することで、CRITICALまたはHIGHの脆弱性が検出された場合にCIを失敗させます。Claude Codeに「Trivyのスキャン結果を分析して修正方法を提案して」と依頼すれば、ベースイメージの更新や依存パッケージのバージョンアップを具体的に指示してくれます。

シークレット管理のベストプラクティス

Docker環境でClaude Codeを動かす際、APIキーや認証情報の管理は重要です。

  • 環境変数でAPIキーを渡す: ANTHROPIC_API_KEYはdocker-compose.ymlのenvironmentセクションか、--env-fileで渡す
  • .envファイルを.gitignoreに追加する: シークレットがリポジトリに混入するのを防ぐ
  • 本番環境ではSecrets Managerを使う: AWS Secrets Manager、GCP Secret Manager、HashiCorp Vaultなどの専用サービスで管理する
  • DockerfileにARGENVでシークレットを埋め込まない: ビルド履歴にシークレットが残る

ネットワーク分離とファイアウォール設定

Claude Codeが外部に不要なリクエストを送信しないよう、ネットワークを制限します。公式DevContainerにはinit-firewall.shが含まれており、Anthropic APIへの通信のみを許可する設定が可能です。

公式DevContainerリポジトリのinit-firewall.shは、ipsetを使ってCDN等の複数IPに対応し、DNS解決用のUDP 53番ポートの許可も含む完全な設定です。自作する場合は以下の点に注意してください。

  • DNS解決を許可するルール(UDP 53番ポート)を必ず追加する — これがないとドメイン名の解決ができず、API通信も不可能になる
  • ipsetを使って対象ドメインの複数IPアドレスに対応する
  • コンテナにNET_ADMINNET_RAWケーパビリティを付与する
  • 公式のinit-firewall.shをベースにカスタマイズすることを推奨

ホストのDockerソケット(/var/run/docker.sock)をコンテナにマウントしないことも重要です。Dockerソケットへのアクセスがあると、コンテナから特権コンテナを起動してサンドボックスを回避できてしまいます。

セキュリティ設計の詳細はClaude Codeのセキュリティ対策と社内導入ガイドを参照してください。

トラブルシューティング — よくあるエラーと解決策

Claude Code × Docker環境で遭遇しやすい問題と、その解決方法をまとめます。

コンテナ再作成のたびにclaude loginが求められる

原因は~/.claudeディレクトリが永続化されていないことです。docker-compose.ymlのvolumesで名前付きボリュームをマウントするか、DevContainerのmounts設定で対応します。

// devcontainer.jsonに追加
"mounts": [
  "source=claude-config,target=/home/vscode/.claude,type=volume"
]

ボリュームマウントの権限エラー(Permission denied)

コンテナ内のユーザーID(UID)とホスト側のファイル所有者が異なる場合に発生します。DevContainerの場合、remoteUserとDockerfileのUSERを一致させてください。Linux環境では--user $(id -u):$(id -g)でコンテナを起動するか、Dockerfileでchownを設定します。

ファイアウォールでClaude Code APIの通信がブロックされる

init-firewall.shで許可するドメインにAnthropicのAPIエンドポイント(api.anthropic.com)が含まれているか確認してください。企業のプロキシ環境では、HTTPS_PROXY環境変数の設定も必要です。

M1/M2 Macでイメージのビルドが失敗する

ARM64アーキテクチャに対応していないベースイメージを使っている場合に発生します。--platform linux/amd64を指定してエミュレーション実行するか、ARMネイティブのベースイメージを選択してください。

Docker Composeのサービスが起動順序の問題で失敗する

依存するサービス(データベースなど)が起動完了する前にアプリケーションが接続を試みるケースです。depends_onだけでは起動完了を保証しないため、healthcheckcondition: service_healthyを組み合わせる必要があります。Claude Codeに「docker-composeのサービス起動順序の問題を解決して」と依頼すれば、ヘルスチェック付きの設定を生成します。

Claude Codeがコンテナ内のファイルを編集できない

DevContainer環境で発生しやすい問題です。ワークスペースのマウント設定(workspaceMount)が正しいか、コンテナ内のユーザーがファイルへの書き込み権限を持っているかを確認してください。devcontainer.jsoncontainerUserremoteUserを明示的に設定することで解消するケースが多いです。

FAQ

Docker SandboxとDevContainerの違いは?

上記の比較表に示した通り、分離レベル(MicroVM vs コンテナ)とVS Code連携の有無が主な違いです。補足として、Docker Sandboxは2025年時点でDocker Desktop 4.40以降が必要で(最新の要件はDocker公式ドキュメントを確認してください)、各セッションに専用のDockerデーモンが割り当てられるため、コンテナ内でさらにDockerを使うことも可能です。コスト面では、Docker Desktop Proライセンスが必要になる場合があります。

--dangerously-skip-permissionsを安全に使うには?

Docker Sandbox内での利用が公式に推奨されています。Sandbox以外の環境(通常のDockerコンテナやホスト直接実行)では、Claude Codeがファイルシステムとネットワークに無制限にアクセスできるため推奨されません。なお、Docker Sandboxではネットワーク分離も自動で適用されるため、ファイアウォールの手動設定は不要です。

Claude CodeでDockerfileを自動生成できますか?

はい、可能です。上記セクションで示したように、マルチステージビルドやAlpineベースイメージの適用を含む最適化済みのDockerfileを生成します。.dockerignoreも同時に生成されるため、不要なファイルのイメージ混入も防げます。

Claude CodeをCI/CD(GitHub Actions)に組み込む方法は?

Anthropicが提供するclaude-code-actionをGitHub Actionsのワークフローに追加する方法が標準的です。PRのオープン時にClaude Codeが自動レビューを行ったり、CI失敗時に修正を提案する仕組みを構築できます。APIキーはGitHub Secretsに保存し、ワークフロー内で参照します。

Claude CodeでTerraformやIaCコードを生成できますか?

はい、Terraform・CloudFormation・Pulumi等のIaCコード生成に対応しています。Terraformスキルやterraform MCPサーバーを導入すると、HashiCorpのベストプラクティスに基づいたコードを生成でき、命名規則・セキュリティ設定・モジュール化も考慮されます。ただし、生成されたIaCは必ずtfsecやcheckovで静的解析し、terraform planで変更内容を確認してから適用してください。

関連記事