コンテンツへスキップ

media AI活用の最前線

ツール比較・実践ガイド

【2026年最新】Claude Code×Docker活用ガイド

【2026年最新】Claude Code×Docker活用ガイド

結論: Claude CodeをDockerのdevcontainerで動かすと、コマンドの実行をコンテナ内に閉じ込められるため、--dangerously-skip-permissions による無人実行を使いやすくなります。ただし、コンテナ内で読める情報の持ち出しまでは防げないため、信頼できるリポジトリに限って使うのが前提です。Anthropic公式の参照用devcontainerは、リポジトリをクローンしてVS Codeの「Reopen in Container」で開けば試せます。

この記事の要点:

  • 要点1: 公式devcontainerはファイアウォール付き。外部通信をホワイトリスト制御できる
  • 要点2: VS Code Dev Containers拡張と組み合わせると、チーム全員が同じ環境で使える
  • 要点3: CI/CDパイプラインには、公式のGitHub Action(claude-code-action)を使えば、コンテナを自作しなくてもClaude Codeを組み込める

対象読者: Claude CodeをDockerで使いたいエンジニア、チームで統一された開発環境を整備したいテックリード

読了後にできること: Claude Code用のdevcontainerを今日から構築し、安全なAI開発環境を整備できる

「Claude Codeがホストマシンのファイルを書き換えるのが怖いんだけど、何か対策ある?」

これ、よく聞かれます。確かに、Claude Codeは便利ですが「AIがファイルを自動で変更する」という点で不安を感じる方も多いですよね。先日もあるスタートアップのCTOから「本番環境のコードベースでAIに権限を与えるのはリスクがある」という話を聞きました。

その解決策がDocker devcontainerです。コンテナの中でClaude Codeを動かすことで、AIが実行するコマンドはホストマシンではなくコンテナの中で動きます(ただし、プロジェクトのファイルへの変更は手元のリポジトリにそのまま反映されます)。さらにAnthropicが公式で提供しているdevcontainer設定にはファイアウォール機能まで内蔵されています。

この記事では、Claude Code × Dockerの構築方法を、コピペで使えるコード例つきで全公開します。

まず5分で動かす:公式devcontainerを使う

難しい設定は後で解説するとして、まず動かしましょう。

公式devcontainerを動かす5ステップの流れ図。拡張インストールからClaude Code起動まで
公式devcontainerはそのまま使える形で提供されています。初回はDockerイメージのビルドに2〜3分かかります。
# ステップ1: VS Code と Dev Containers拡張をインストール
# VS Code: https://code.visualstudio.com/
# Dev Containers拡張: ms-vscode-remote.remote-containers

# ステップ2: Claude Codeのリポジトリをクローン
git clone https://github.com/anthropics/claude-code.git
cd claude-code

# ステップ3: VS Codeで開く
code .

# ステップ4: コマンドパレット(Cmd+Shift+P)を開いて
# "Dev Containers: Reopen in Container" を選択
# → 初回はDockerイメージのビルドに2〜3分かかります

# ステップ5: コンテナ内でClaude Codeを起動
claude

これだけです。公式のdevcontainerはそのまま使える形で提供されています。

AIエージェントとセキュリティの関係についての全体像はAIエージェント導入完全ガイドを参照いただくとして、ここではClaude Code×Docker特有の話に集中します。

DockerでClaude Codeを使う3つのメリット

DockerでClaude Codeを使う3つのメリットの図。ホスト環境の保護・再現性・安全な自動実行
ホスト環境の保護、再現性のある環境、devcontainer内なら確認なしの自動実行を使いやすくなること。この3つがDockerで使う理由です。

メリット1:ホスト環境の保護(最重要)

コンテナ内のClaude Codeは、マウントしたディレクトリのみアクセスできます。~/.ssh/や~/.aws/などの個人設定ファイルはコンテナから見えません。

# コンテナ内からホストの重要ファイルへアクセスできない例
# (devcontainerが正しく設定されている場合)

ls ~/.ssh/      # → 空、またはエラー
cat ~/.aws/credentials  # → 見えない

メリット2:再現性のある環境

「自分のMacでは動くのに、CIでは動かない」問題をゼロにできます。devcontainerの設定ファイルをGitで管理すれば、全チームメンバーが同じ環境でClaude Codeを使えます。

メリット3:–dangerously-skip-permissionsを安全に使える

通常、Claude Codeはファイル変更・コマンド実行のたびに確認を求めます。これを省略する --dangerously-skip-permissions フラグがありますが、ホスト環境では本当に危険です。

しかしdevcontainer内ならリスクを抑えて使えます。コンテナは非rootユーザーでClaude Codeを動かし、コマンドの実行をコンテナ内に閉じ込めます。Anthropic公式の参照用devcontainerには、外向き通信を許可した宛先だけに絞るファイアウォールも入っています。ただし公式ドキュメントは、コンテナ内で読める認証情報などの持ち出しまでは防げないと明記しています(2026年9月30日時点)。マウントした作業フォルダへの変更はホスト側にもそのまま反映されるため、信頼できるリポジトリに限って使ってください。

# devcontainer内での自動実行(CI/CD向け)
claude --dangerously-skip-permissions --print "テストを全部パスするようにコードを修正してください"

# ヘッドレス実行(コマンド1本で完結)
claude --print "READMEの英語部分を日本語に翻訳してください" > output.txt

公式devcontainerの設定解説

【2026年9月30日追記】以下の3つのコードは、構成を理解するために簡略化した例で、公式リポジトリの実物とは内容が異なります。公式の実物は remoteUser が node、Claude Codeは npm install -g @anthropic-ai/claude-code で導入、認証情報は名前付きボリュームに保存、ファイアウォールは postStartCommand で起動する構成です。自分のプロジェクトで使う時は、公式リポジトリの .devcontainer ディレクトリをコピーして調整してください。

Anthropicの公式devcontainerは3つのファイルで構成されています。

公式devcontainerを構成する3ファイルの関係図。設定・イメージ定義・ネットワーク制御の役割
Anthropicの公式devcontainerは、devcontainer.json・Dockerfile・init-firewall.shの3つのファイルで構成されています。

devcontainer.json(コンテナ全体の設定)

// .devcontainer/devcontainer.json
{
  "name": "Claude Code Dev Container",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".."
  },

  // ファイアウォールの設定に必要な権限(公式の参照用devcontainerと同じ)
  "runArgs": ["--cap-add=NET_ADMIN", "--cap-add=NET_RAW"],

  // マウント設定(認証情報と設定を名前付きボリュームに保存し、リビルド後も引き継ぐ)
  "mounts": [
    "source=claude-code-config-${devcontainerId},target=/home/user/.claude,type=volume"
  ],
  "containerEnv": {
    "CLAUDE_CONFIG_DIR": "/home/user/.claude"
  },

  // VS Code拡張(コンテナ内に自動インストール)
  "customizations": {
    "vscode": {
      "extensions": [
        "anthropic.claude-code"
      ],
      "settings": {
        "terminal.integrated.defaultProfile.linux": "zsh"
      }
    }
  },

  // コンテナ起動時にファイアウォールを初期化
  "postStartCommand": "sudo /init-firewall.sh",

  // 非rootユーザーで実行(セキュリティ強化)
  "remoteUser": "user"
}

Dockerfile(コンテナイメージの定義)

# .devcontainer/Dockerfile
FROM node:20-bullseye-slim

# 必要ツールのインストール
RUN apt-get update && apt-get install -y \
    git \
    curl \
    zsh \
    fzf \
    iptables \
    iproute2 \
    && rm -rf /var/lib/apt/lists/*

# 非rootユーザーの作成(セキュリティ強化)
RUN useradd -m -s /bin/zsh user && \
    echo "user ALL=(ALL) NOPASSWD: /init-firewall.sh" >> /etc/sudoers

USER user

# Claude Codeのネイティブインストール
RUN curl -fsSL https://claude.ai/install.sh | bash

# PATHの設定
ENV PATH="/home/user/.local/bin:$PATH"

WORKDIR /workspace

init-firewall.sh(ネットワークアクセス制御)

#!/bin/bash
# .devcontainer/init-firewall.sh

# 必要なサービスのみ許可(ホワイトリスト)
ALLOWED_HOSTS=(
  "api.anthropic.com"       # Claude API
  "registry.npmjs.org"      # npm
  "github.com"              # GitHub
  "raw.githubusercontent.com"
  "pypi.org"                # Python
  "objects.githubusercontent.com"
)

for host in "${ALLOWED_HOSTS[@]}"; do
  iptables -A OUTPUT -d "$host" -j ACCEPT
done

# DNS(53番ポート)は常に許可
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

# ローカルホスト通信は許可
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT

# 許可ルールを入れ終えてから、それ以外のアウトバウンドを全部ブロック
# (先にブロックすると、上のホスト名をDNSで引けなくなる)
iptables -P OUTPUT DROP

echo "Firewall initialized. External connections restricted to allowlist."

docker-compose.ymlで開発環境を丸ごと管理

【2026年9月30日追記】docker-composeでの手順は公式ドキュメントに記載がなく、下のコードは本記事の構成例です。例ではホストの ~/.claude を読み取り専用でマウントしていますが、公式ドキュメントは、~/.claude へのマウントだけではサインイン状態を保てない(OAuthアカウントは ~/.claude.json に保存される)としています。認証を引き継ぐ場合は、公式が案内している名前付きボリュームと CLAUDE_CONFIG_DIR の組み合わせを使ってください。

# docker-compose.yml
version: '3.8'

services:
  # Claude Code開発環境
  app:
    build:
      context: .
      dockerfile: .devcontainer/Dockerfile
    volumes:
      # プロジェクトをマウント
      - .:/workspace:cached
      # Claude Code認証情報を引き継ぎ(読み取り専用)
      - ${HOME}/.claude:/home/user/.claude:ro
    environment:
      - NODE_ENV=development
    cap_add:
      # ファイアウォール設定に必要
      - NET_ADMIN
    working_dir: /workspace
    command: sleep infinity  # コンテナを起動したままにする

  # 開発用DBは別コンテナで管理(Claude Codeから直接アクセスさせない)
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: devdb
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpass
    # ホストに公開しない(他コンテナからのみアクセス)
    expose:
      - "5432"
# 使い方
docker-compose up -d
docker-compose exec app claude

# コンテナ内でClaude Codeを使う
# ホストのファイルシステムはマウント分のみアクセス可能

VS Code Dev Containersとの連携

Claude CodeのDockerコンテナ設定については、Claude Code インストール方法|全OS対応【2026年9月】のインストール手順を先に確認しておくと理解しやすくなります。

# ステップ1: VS Codeに Dev Containers拡張をインストール
code --install-extension ms-vscode-remote.remote-containers

# ステップ2: コマンドパレット(Cmd+Shift+P)で
# "Dev Containers: Open Folder in Container" を選択

# または、ルートに.devcontainer/があるフォルダを開くと
# 自動で「コンテナで開く?」の通知が表示される

# ステップ3: コンテナ内でそのままClaude Codeを使う
# VS Codeのターミナルで:
claude

一番助かるのが新メンバーのオンボーディングです。今まで「Macに必要なツールを全部インストールして…」という説明書を作っていた手間が、devcontainerを用意するだけでゼロになります。想定シナリオとして、新エンジニア3名を迎えるチームなら、従来3時間ほどかかっていた開発環境の構築が30分程度で済む見込みです(実測値ではありません)。

# チームメンバーへの共有コマンド(これだけ渡せばOK)
git clone https://github.com/your-org/your-project.git
cd your-project
code .
# 「コンテナで開く?」→「はい」を選ぶだけ

この記事の内容を社内で使うなら

要点と手順をまとめた資料を無料で受け取れます。研修4,000名以上・支援100社以上の実績をもとに、自社の業務に当てはめる相談も30分から受け付けています。

Claude Code × ビジネス活用 実践ガイド無料で受け取る →AI顧問に相談する(30分・無料)→

CI/CDでClaude Codeを活用する

CI/CDでClaude Codeを使う流れ図。プルリクエストからレビュー投稿とテスト自動生成まで
Claude Code入りのDockerイメージをCIのコンテナに使い、コードレビューとテスト自動生成を回します。

GitHub ActionsでClaude Codeを使う

【2026年9月30日追記】下の2つのワークフローは、自作のDockerイメージで claude –print を動かす本記事の構成例です。Anthropicの公式手順は、GitHub Action「anthropics/claude-code-action@v1」をワークフローに組み込む方法で、Claude Codeで /install-github-app を実行すると設定できます(2026年9月30日時点)。

# .github/workflows/ai-code-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  claude-review:
    runs-on: ubuntu-latest
    container:
      # Claude Code入りのDockerイメージを使用
      image: ghcr.io/your-org/claude-code-env:latest
      options: --cap-add NET_ADMIN

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: ファイアウォール初期化
        run: sudo /init-firewall.sh

      - name: Claude Codeでコードレビュー
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          # 変更ファイルのリストを取得
          CHANGED_FILES=$(git diff --name-only origin/main HEAD)

          # Claude Codeでレビュー
          echo "$CHANGED_FILES" | xargs -I {} claude --print \
            "このファイルの潜在的なバグとセキュリティリスクを指摘してください: {}" \
            > review_output.txt

      - name: レビュー結果をPRコメントに投稿
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs')
            const review = fs.readFileSync('review_output.txt', 'utf8')
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## Claude Code自動レビュー\n\n${review}`
            })

テスト自動生成パイプライン

# .github/workflows/generate-tests.yml
name: AI Test Generation

on:
  push:
    paths:
      - 'src/**/*.ts'

jobs:
  generate-tests:
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/your-org/claude-code-env:latest

    steps:
      - uses: actions/checkout@v4

      - name: テストのないファイルを検出してテスト生成
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          for file in $(find src -name "*.ts" -not -name "*.test.ts"); do
            test_file="${file%.ts}.test.ts"
            if [ ! -f "$test_file" ]; then
              claude --dangerously-skip-permissions --print \
                "@$file のユニットテストをJestで書いてください。不足している情報があれば仮定として明記してください。" \
                > "$test_file"
              echo "Generated: $test_file"
            fi
          done

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

# ✅ 推奨設定チェックリスト

# 1. 非rootユーザーで実行
# Dockerfile: USER user(rootで実行しない)

# 2. マウントは最小権限で
# 必要なディレクトリのみマウント
volumes:
  - ./src:/workspace/src:cached  # srcのみ
  - claude-code-config:/home/user/.claude  # 認証情報は名前付きボリュームへ(CLAUDE_CONFIG_DIR も同じパスに設定)

# 3. 環境変数でシークレットを渡さない
# ❌ NG: docker-compose.ymlにAPIキーを直書き
# ✅ OK: .env.localやシークレット管理ツールを使用

# 4. ファイアウォールで外部通信を制限
# init-firewall.shでホワイトリスト制御

# 5. イメージのバージョンを固定
# ❌ FROM node:latest  (いつの間にか変わる)
# ✅ FROM node:20.18.1-bullseye-slim  (バージョン固定)

【要注意】Docker×Claude Codeの失敗パターン4選

Docker×Claude Codeの失敗4パターンと解決策の対比図。マウント設定漏れやroot実行への対処
4つの失敗はどれも設定で防げます。マウント設定、非rootユーザー、devcontainer内での実行、ファイアウォールを確認してください。

失敗1:認証情報のマウント設定を忘れる

# ❌ よくある失敗: コンテナをリビルドするたびにサインインが必要
# 原因: コンテナのホームディレクトリはリビルドで消える
#       ~/.claude にボリュームを置くだけでは足りない(OAuthアカウントは ~/.claude.json に保存されるため)

# ✅ 解決策: 名前付きボリュームを ~/.claude に置き、CLAUDE_CONFIG_DIR を同じパスにする
"mounts": [
  "source=claude-code-config-${devcontainerId},target=/home/user/.claude,type=volume"
],
"containerEnv": {
  "CLAUDE_CONFIG_DIR": "/home/user/.claude"
}

失敗2:rootユーザーでコンテナを動かす

# ❌ よくある失敗: Dockerfileにユーザー設定なし
# → コンテナ内のすべての操作がrootで実行される

# ✅ 解決策: Dockerfileで非rootユーザーを作成
RUN useradd -m -s /bin/bash developer
USER developer

失敗3:–dangerously-skip-permissionsをホスト環境で使う

# ❌ よくある失敗
# devcontainerなしのホスト環境で --dangerously-skip-permissions

# ✅ 正しいアプローチ
# 必ずdevcontainer内でのみ使用
# Anthropic公式: "devcontainer provides substantial protections"

失敗4:ファイアウォール設定なしでdevcontainerを使う

# ❌ よくある失敗: ファイアウォールなしで --dangerously-skip-permissions
# 悪意あるプロジェクトが実行された場合、コンテナ内のデータ漏洩リスクあり

# ✅ 解決策: init-firewall.shでアウトバウンド通信を制限
# Anthropic公式ドキュメント: "no system is completely immune to all attacks"
# → 信頼できるリポジトリのみでdevcontainerを使うことを推奨

まとめ:今日から始める3つのアクション

  1. 今日やること: git clone https://github.com/anthropics/claude-code.git して公式devcontainerを動かしてみる
  2. 今週中: 自分のプロジェクト用のdevcontainer.jsonを作成し、チームに共有する
  3. 今月中: CI/CDパイプラインにClaude Codeを組み込み、コードレビュー自動化を試験運用する


参考・出典


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。早稲田大学法学部在学中に生成AIの可能性に魅了され、X(@SuguruKun_ai)フォロワー約10万人。100社以上の企業向けAI研修・導入支援を展開。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

Claude Code活用のご相談はClaude Coachingまたはお問い合わせフォームからどうぞ。

2026年5月25日時点のdevcontainer運用補足

最終確認日: 2026-05-25

Claude Codeのdevcontainer運用とは、Claude CodeをホストOSではなく開発用コンテナの中で動かし、権限境界と再現性を揃えながらチーム開発に組み込む方法です。2026年5月25日にClaude Code Docsを確認すると、Anthropicはdevcontainerを参照実装として案内しており、--dangerously-skip-permissions を使う無人運用でも「信頼できるリポジトリだけで使う」前提を明示しています。

運用方式向いている場面注意点
ホストOSに直接導入個人検証、最速で試したいとき権限範囲が広く、チーム標準化もしにくい
devcontainer社内標準環境、VS Code運用、検証環境の統一隔離は強いが、コンテナ内で読める秘密情報の流出までは防げない
CIランナーレビュー自動化、GitHub Actions連携Secrets設計と対象リポジトリの信頼境界を別途定義する必要がある

Anthropicの公式devcontainer docsは、ネットワーク制御や隔離を強みとして案内していますが、同時に「コンテナ内でアクセスできるものは悪意あるプロジェクトに持ち出され得る」と注意しています。したがって、実務では devcontainer を「安全装置」ではなく「被害半径を小さくする構成」と捉え、秘密情報のマウント範囲と対象リポジトリの信頼判断を分けて管理するのが現実的です。

実装面では、Claude Code CLI feature を ghcr.io/anthropics/devcontainer-features/claude-code:1.0 として組み込めます。Linux環境を含む基礎セットアップは Claude Code Linux環境ガイド|WSL2、CIやチーム運用の全体像は Claude Code活用事例10選|実装プロンプトと工数削減【2026年9月】、導入戦略の上位設計は AI導入戦略ガイド も併せて参照してください。

よくある質問

Claude CodeはDockerコンテナの中で動かせますか?

はい、Claude CodeはDockerの開発用コンテナ(devcontainer)の中で動かせます。Anthropicが参照用のdevcontainer設定をGitHubで公開しており、VS CodeのDev Containers拡張と組み合わせると、コンテナ内のターミナルで claude を起動できます。Claude Codeが実行するコマンドはコンテナの中で動き、プロジェクトのファイルへの編集は手元のリポジトリに反映されます。

Claude Codeの公式devcontainerはどこで入手できますか?

Claude Codeの公式devcontainerは、GitHubの anthropics/claude-code リポジトリの .devcontainer ディレクトリで公開されています。リポジトリをクローンしてVS Codeで開き、「Dev Containers: Reopen in Container」を選ぶと起動します。公式ドキュメントは、この参照用コンテナを保守されたベースイメージではなく動く見本として案内しており、自分のプロジェクトではディレクトリをコピーして調整します。

devcontainerなら –dangerously-skip-permissions を常に安全に使えますか?

いいえ、devcontainerの中でも –dangerously-skip-permissions を常に安全に使えるわけではありません。公式ドキュメントは、コンテナ内で読めるClaude Codeの認証情報やその他のファイルを、悪意あるプロジェクトが持ち出すことまでは防げないと明記しています。信頼できるリポジトリに限って使い、外向き通信の制限と組み合わせるのが前提です。rootで起動した場合、CLIはこのフラグを受け付けません。

devcontainerのClaude Code featureは何をしてくれますか?

Claude Codeのfeatureは、既存のdevcontainerにClaude Code CLIを組み込むための公式の部品です。devcontainer.json の features に ghcr.io/anthropics/devcontainer-features/claude-code:1.0 を足してリビルドすると、CLIが入ります。ベースイメージにNode.jsが無い場合はNode.jsも導入され、VS CodeではClaude Codeの拡張機能も追加されます。

Claude CodeをDockerで使う場合、まずどの構成から始めるべきですか?

チームで同じ環境をそろえたい場合は、devcontainerから始めるのが実務向きです。設定ファイルをリポジトリに入れてGitで管理すれば、メンバー全員が同じコンテナでClaude Codeを使えます。個人が一度試すだけであれば、ホストOSへ直接インストールする方法でも足ります。

CIとdevcontainerはどう使い分けますか?

devcontainerは人が作業する標準の開発環境に、CIはレビューや自動修正などの定型実行に向いています。どちらを使う場合も、渡すSecretsの範囲と、対象のリポジトリが信頼できるかどうかを先に決めておく必要があります。GitHub Actionsで動かす手順は、Claude Codeの公式ドキュメントに専用のページがあります。

今回確認した公式ソース

最終更新日: 2026-05-25

監修:株式会社Uravation(生成AI活用書籍シリーズ累計59,900部の著者チームが運営。自社7メディアの実運用でAI検索からの引用・流入を継続計測し、その知見に基づいて編集しています。仕様・料金が変わりやすい領域のため、重要な意思決定の前には各公式情報の最新版をご確認ください)

この記事の内容を社内展開する方へ: Claude Code × ビジネス活用 実践ガイド(無料・PDF 30ページ+Excel) をダウンロードできます。

佐藤傑
この記事を書いた人 佐藤傑

株式会社Uravation 代表取締役CEO/生成AIエバンジェリスト。法人向けAI研修・コンサルティングを手がけ、日経・SBクリエイティブ・GMO等のメディアで生成AIについて執筆。

執筆・監修:佐藤傑/下書き・図版・機械検査:当社のAI社員(人が確認してから公開しています)。記事の作り方と検査の方針

この記事をシェア

Contact お問い合わせ

30分の無料相談では、いま時間を取られている業務を伺い、稼働中のAI社員62体の事例の画面と一緒に近い進め方をお見せします。
売り込みはしません。

Claude Code 個別指導(1対1・12セッション)をご希望の方はこちら、Codex 個別指導はこちらから別途お申し込みください

Claude Code 個別指導 無料相談