Claude Code を開発コンテナで:安全で再現可能なセットアップ
Dev Containers 拡張機能を入れ、Docker を起動し続け、公式 claude-code feature を足し、Reopen in Container し、ターミナルからサインインし、リビルドをまたいで認証を生かし続ける — 各ステップは Anthropic の dev container ドキュメントで検証済み。
要点まとめ
- Dev Containers 拡張機能を入れ、Docker を起動したまま、.devcontainer/ があるリポジトリで Reopen in Container — Claude Code とその実行するすべてのコマンドはコンテナ内で動き、手元のマシンでは動きません。
- 公式 feature — features ブロックの "ghcr.io/anthropics/devcontainer-features/claude-code:1.0" — はどんな devcontainer にも CLI をインストール。VS Code には拡張機能も入り、両者は同じ ~/.claude を共有します。
- サインインはコンテナのターミナルから。ブラウザのコールバックが届かないなら、プロンプトにコードを貼り付け。~/.claude ボリュームと containerEnv.CLAUDE_CONFIG_DIR で認証はリビルドを生き延びます。
- dev container は環境そのものを置き換えます(/sandbox は手元マシンで個々のコマンドを閉じ込める)。両者は組み合わせ可能 — 環境はコンテナ、振る舞いは sandbox と権限プロンプト。
Run Your AI Coding Agent in Dev Containers - Complete Beginner's Guide
チャンネル: Visual Studio Code15:39
Step-by-Step: Run Claude Code SAFELY in a Dev Container
チャンネル: Fuzz Puppy6:56
Development containers — official documentation
公式ドキュメント: code.claude.com/docs
このページのすべてのセットアップ手順、feature 名、認証情報パスは公式の development containers ドキュメントに対して検証しています。上の動画がビジュアルと事実のソースです。
スクリーンショットは各制作者に帰属し、該当タイムスタンプへ深リンクしています。顔出しフレームは使用していません。
dev container で Claude Code を動かす、ステップごとに
パート 1 — 前提:VS Code と Docker の出会い
- 1
Dev Containers 拡張機能をインストール
VS Code の Extensions ビューを開き、Microsoft の Dev Containers をインストール。この拡張機能がステータスバーのリモートインジケータ、Reopen in Container コマンド、Remote Explorer を追加します — 以下のワークフローはすべてこれを通ります。Docker はまだ要りません。

Reopen in Container を VS Code に足すのが Dev Containers 拡張機能 — まず Extensions ビューからインストールを。2:00 から視聴 - 2
Docker Desktop を入れて起動
dev container は本物のコンテナなので、何かが開く前にコンテナエンジンが動いている必要があります。macOS と Windows では Docker Desktop が定番、Linux なら Docker Engine。起動したら動かし続ける — 初回の「Opening Remote」が固まる原因の第 1 位は、エンジンが止まっていることです。

Docker Desktop は動いているだけでよく、空の Containers リストこそが健康な pre-container セットアップの姿です。2:12 から視聴 - 3
Claude Code にとって何が変わるかを知る
Reopen in Container の後、VS Code はサーバーをコンテナ内で動かします — そして Claude Code が実行するすべてのコマンドも。インストール、テスト実行、ファイル編集はコンテナ内にとどまり、ワークスペースフォルダはリポジトリへマウントし返されます。手元マシンに必要なのは VS Code と Docker だけで、ツールチェーンと依存はイメージ内に住み、エージェントの迷い実験が外へ触れることはありません。
パート 2 — 端から端まで動くコンテナ
- 4
既製の dev container を開く
仕掛けが動くのを見る最短経路:Remote Explorer で Go dev container などのサンプルを選びます。VS Code は github.com/microsoft/vscode-remote-try-go をクローンし、コンテナボリューム内で開く — まだあなたは 1 行も設定を書いていません。

Remote Explorer には既製サンプルが付属 — 選べば VS Code がリポジトリを直接コンテナボリュームへクローンします。2:30 から視聴 - 5
VS Code のビルドと接続を待つ
初回の接続はリポジトリをクローンし、コンテナイメージをレイヤーごとに引き、コンテナを起動します — ステータスバーは「Connecting to Dev Container」と告げる。回線が遅いとここがセットアップ最長の待ち時間。2 回目以降はイメージを再利用し、数秒で終わります。

初回ビルドはコンテナイメージをレイヤーごとにダウンロード。ステータスバーが dev container への接続を追跡します。2:52 から視聴 - 6
ターミナルがコンテナ内にあることを確認
新しいターミナルを開き、ツールチェーンのバージョンを表示(ここでは go version)。出力はコンテナの OS とアーキテクチャを名乗り、ノート PC のものではありません。このターミナルこそ claude を起動する場所 — そしてその実行はすべてコンテナ内にとどまります。

go version が表示するのはコンテナのツールチェーンであってノート PC のものではない — このターミナルで claude を動かせば、それもコンテナ内にとどまります。3:50 から視聴 - 7
devcontainer.json を読む
.devcontainer/devcontainer.json は環境全体を定義します:ベースイメージ(または Dockerfile)、コンテナ内へ入れる VS Code 拡張機能、フォワードするポート、postCreateCommand のセットアップ手順、remoteUser。Claude Code にとってこのファイルは公式 feature と認証ボリュームの置き場所でもあります — ステップ 9 と 13 で扱います。

コンテナの構成要素はすべて .devcontainer/devcontainer.json に:イメージ、拡張機能、フォワードポート、post-create コマンド。4:40 から視聴 - 8
エージェントをワークスペースへ向ける
エージェントパネルで @workspace を付け、プロジェクトの説明を尋ねます。説明と、その背後のすべてのコマンドはコンテナ内で実行。CLI がイメージに入ってしまえば Claude Code も同じです:@workspace 型のコンテキストに、コンテナを出ないコマンド。

@workspace 経由でプロジェクト説明を依頼 — 実行されるコマンドはすべてコンテナ内です。5:20 から視聴 - 9
公式の Claude Code feature に差し替え
手動インストールは不要:devcontainer.json の features ブロックに "ghcr.io/anthropics/devcontainer-features/claude-code:1.0" を足してリビルド。feature は CLI をインストールし、コンテナが VS Code で開いた場合は Claude Code 拡張機能も入り、ターミナルと同じ ~/.claude を共有します。ベースイメージに Node.js がなければ「Failed to install Node.js and npm」が出るので、上に Node feature を足します。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC や DISABLE_AUTOUPDATER のような環境設定は containerEnv の下へ、mounts で手元の他リポジトリをコンテナへ引き込むこともできます。
- 10
アプリを動かし、フォワードされたポートを使う
コンテナ内からアプリを起動(デバッグパネル、npm run dev、go run — スタックの流儀どおり)すると、VS Code はリッスン中のポートを検出:ローカルブラウザで開くか通知してくれます。サーバーはコンテナから出ず、フォワーディングが localhost を普段どおりに振る舞わせるだけ。

アプリはコンテナ内のポート 9000 で動作。VS Code がフォワードするので localhost はいつもどおりです。6:08 から視聴
パート 3 — 自分のリポジトリとサインイン
- 11
自分のプロジェクトに dev container を足す
どのリポジトリでも、コマンドパレットかリモートインジケータから Dev Containers: Add Dev Container Configuration Files を実行し、「Add configuration to workspace folder」を選択。コードと一緒にコミットされた設定は、チームメイトに — そして Codespaces に — 同一環境を無料で与えます。

devcontainer.json がまだ? VS Code がテンプレートから生成してくれます — git が共有できるようワークスペースに置きましょう。9:00 から視聴 - 12
テンプレートと features を選ぶ
VS Code はスタックに合うテンプレート(Node.js、Python、Go…)を提案し、次に features リスト — Git LFS や GitHub CLI のような再利用可能なインストーラー — を示します。ステップ 9 の claude-code feature が差し込まれるのもこのリスト。デフォルトを受け入れ(または生成ファイルの改良をエージェントに任せ)、コンテナで再オープン。

features リストこそ、テンプレートの提案の隣に Claude Code feature の行が差し込まれる場所。9:48 から視聴 - 13
コンテナ内でサインイン
統合ターミナルで claude を実行し、サインイン先(Claude サブスクリプションか Anthropic Console)を選びます。ブラウザはホスト側で開くので、コールバックがコンテナへ届かないときは、ブラウザのコードをコピーして「Paste code here if prompted」プロンプトに貼り付け。リビルドを生き延びさせるには ~/.claude にボリュームをマウントし、containerEnv.CLAUDE_CONFIG_DIR を同じパスに — アカウントファイル ~/.claude.json はそのフォルダの外に住むため、両方の半分が効くのです。ヘッドレス実行や Codespaces 向けには、claude setup-token でトークンを生成し ANTHROPIC_API_KEY か CLAUDE_CODE_OAUTH_TOKEN で渡します。
dev container vs /sandbox:どちらの分離が必要か?
Claude Code は 2 つの分離の答えを積んでおり、解決する問題が違います。dev container はエージェントの作業環境を置き換え、内蔵の sandboxing は現在のマシンで実行するコマンドを閉じ込めます。公式ドキュメントは両者を補完関係と位置づけ — リファレンスの devcontainer は egress 制限スクリプトすら同梱しています。
- 1スコープ。dev container は環境全体 — OS、ツールチェーン、依存 — を devcontainer.json に定義されたものへ丸ごと入れ替えます。sandboxing は手元マシンを保ちつつ、各 bash コマンドが読み・書き・ネットワーク到達できるものを制限します。
- 2要件。dev container には Docker(Desktop か Engine)と Dev Containers 拡張機能が要ります。sandboxing は Claude Code に内蔵で、どちらも不要。
- 3チームの仕組み。devcontainer.json はコミットされるので、全チームメイトと全 Codespace が同一環境をビルドします。sandbox ポリシーは Claude Code 設定に住み、リポジトリでなくユーザーに付いて回ります。
- 4爆発半径。コンテナ内なら、悪い rm -rf も暴走インストールも使い捨てのファイルシステムに当たり、ホストは無傷。sandbox はコマンドごとに同じ結果を狙います — コンテナ境界なしで。
- 5プロジェクト自体が環境を必要とするなら dev container:複数ランタイム、クリーンなオンボーディング、クラウド開発。手元マシンのセッションの日常ガードレールなら sandbox。両者は組み合わせ可能 — dev container 内で Claude Code を動かしつつ、sandboxing と権限プロンプトはオンのまま。
もう 1 行で違いが付きます:/sandbox は会話の途中で調整できるセッションごとのポリシー、dev container はセッション開始前に決まるもの — 変更はリビルドを意味します。無人のバッチ実行は両方に寄りかかる:非 root のコンテナユーザー、制限された egress、そして --dangerously-skip-permissions はコンテナ内でのみ。
調子がおかしい? まずここから
Claude Code まわりの dev container の摩擦は、既知のパターンにほぼ収まります。以下の修正はすべて公式の development containers ドキュメント由来です。
- 1feature インストール中の「Failed to install Node.js and npm」:ベースイメージに Node.js がありません。features ブロックで claude-code feature の上に Node feature(ghcr.io/devcontainers/features/node:1)を足してリビルド。
- 2ブラウザではサインインが完了するのにコンテナがログアウトしたまま:OAuth コールバックがコンテナへ届いていません。ブラウザに表示されたコードをコピーし、ターミナルの「Paste code here if prompted」プロンプトへ貼り付け。
- 3リビルドのたびにログインと設定が消える:~/.claude を永続化するものがありません。そのパスに名前付きボリュームをマウントし、containerEnv.CLAUDE_CONFIG_DIR をそこへ — プロジェクトの分離を保つためボリューム名に devcontainerId 変数を含めましょう。Codespaces ではフォルダは stop/start を生き延びますがフルリビルドで消えるため、代わりに ANTHROPIC_API_KEY か claude setup-token の CLAUDE_CODE_OAUTH_TOKEN を secret として。
- 4Claude Code バージョンの驚き:claude-code:1.0 feature タグが固定するのはインストールスクリプトであって CLI ではありません — 最新リリースが入るうえ、コンテナ内で自動更新されます。バージョンを凍結したいなら Dockerfile で npm install -g @anthropic-ai/claude-code@X.Y.Z。
- 5「Is Docker running?」や固まる「Opening remote」:エンジンに届いていません — Docker Desktop(またはデーモン)を起動して再試行。--dangerously-skip-permissions が起動を拒むなら、コンテナが root で動いています。remoteUser を「vscode」のような非 root ユーザーに。組織は /etc/claude-code の managed-settings.json でバイパスモード自体を無効化できます。
リビルドは万能の再試行:コマンドパレット →「Dev Containers: Rebuild Container」が devcontainer.json を読み直し、編集後の features を再実行します。リビルドが新規クローンと挙動を違えるなら、コンテナを削除して再オープン — イメージと名前付きボリュームは削除を生き延びます。
