Claude CodeをDevContainerで使う方法|安全な隔離環境
先に結論: DockerのDevContainerでコマンド実行をコンテナ内に隔離すると、—dangerously-skip-permissionsを比較的安全に使えます。導入は公式のDev Container Featureを追加するのが最短です。
Claude Codeにファイル編集やコマンド実行を任せていると、権限確認のプロンプトが何度も表示され作業のテンポが崩れることがあります。かといって確認を全部スキップすると、ホストへの影響も気になります。この悩みを解決するのがDevContainer(開発コンテナ)です。
Dockerで隔離環境を用意すれば、Claude Codeが自律的にコマンドを実行してもホストのファイルやシステムには直接触れません。本記事では、DevContainerを使う理由から公式リファレンスの試し方、自前プロジェクトへの組み込み方、ネットワーク制限や認証情報の注意点まで解説します。
基本的な使い方は「Claude Codeの使い方完全ガイド」もあわせてご覧ください。
この記事の要点
- DevContainerでコマンド実行をコンテナ内に隔離すると、—dangerously-skip-permissionsフラグを比較的安全に使いやすくなります。
- 公式リファレンス実装はdevcontainer.json・Dockerfile・init-firewall.shの3ファイルで構成されています。
- 自前プロジェクトへの導入は、featuresに ghcr.io/anthropics/devcontainer-features/claude-code:1.0 を追加するのが最短です。
- init-firewall.shはGitHub・Anthropic API・npmレジストリなど許可されたドメイン以外への通信をブロックします。
- —dangerously-skip-permissionsはroot権限のコンテナでは拒否されるため、remoteUserを非rootに設定する必要があります。
前提・動作環境
本記事は2026年8月時点の公式ドキュメント(code.claude.com/docs)の内容に基づいています。手元に以下を用意してください。
- Docker Desktop(Windows/Mac/Linuxいずれか)
- VS Code + Dev Containers拡張機能(
ms-vscode-remote.remote-containers) - Claude Codeのアカウント(Anthropic、またはBedrock/Vertex AI/Foundryなどの利用契約)
DevContainerの仕様自体はVS Code専用ではなく、GitHub CodespacesやJetBrains IDEなど「Dev Containers仕様」に対応したエディタなら利用できます。本記事ではVS Codeを例に説明します。
なぜ隔離環境でClaude Codeを動かすのか
Claude Codeは通常、ファイル編集やコマンド実行のたびに確認を求めてきます。安全のための仕組みですが、大量のタスクを任せたいときは煩わしく感じることもあります。
DevContainer内で動かせば、実行されるコマンドはすべてコンテナの中に閉じ込められ、ホストマシンのファイルシステムやプロセスには影響しません。
この隔離があるからこそ、確認プロンプトを省略する--dangerously-skip-permissionsフラグを比較的安全に使えます。
ただし過信は禁物です。公式ドキュメントも「大きな保護になるが、あらゆる攻撃を防げるわけではない」と明記しています。bypassモードで動かすと、コンテナ内からアクセスできる範囲のものは悪意あるプロジェクトによって持ち出される可能性があります。
信頼できるリポジトリでのみ使いましょう。権限管理の全体像は「権限管理の仕組みと設定方法」で詳しく解説しています。
公式リファレンスDevContainerを試す
anthropics/claude-codeリポジトリには、ファイアウォールや永続ボリューム、Zshベースのシェルまで組み込んだリファレンス実装の.devcontainer/が用意されています。まずはこれを試すのが近道です。
- VS CodeとDev Containers拡張機能をインストールする
anthropics/claude-codeリポジトリをクローンし、VS Codeで開く- 表示される「Reopen in Container」をクリック(またはコマンドパレットから
Dev Containers: Reopen in Containerを実行) - コンテナのビルド完了後、ターミナルで以下を実行してサインインする
claude
リファレンスはdevcontainer.json・Dockerfile・init-firewall.shの3ファイルで構成されています。自分のプロジェクトに流用する場合は.devcontainer/ごとコピーし、Dockerfileをツールチェーンに合わせて調整してください。
自前プロジェクトへの組み込み方
既存プロジェクトにゼロからDevContainerを導入する場合は、Anthropic公式が提供するClaude Code Dev Container Featureを使うのが最短です。
リポジトリ直下に.devcontainer/devcontainer.jsonを作成します。
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
}
}
imageの行はベースイメージに置き換えるか、Dockerfileを使っている場合は削除してください。このFeatureはNode.jsが無ければ自動導入し、最新のClaude Codeをインストールします。保存後はDev Containers: Rebuild Containerを実行し、ターミナルでclaudeを起動してサインインすれば完了です。
コンテナは既定でホームディレクトリが再構築のたびに破棄されるため、毎回サインインが必要になります。継続利用するなら~/.claudeに名前付きボリュームをマウントし、CLAUDE_CONFIG_DIRを同じパスに設定しましょう。
"mounts": ["source=claude-code-config,target=/home/node/.claude,type=volume"],
"containerEnv": { "CLAUDE_CONFIG_DIR": "/home/node/.claude" }
ファイアウォールでネットワークを制限する
リファレンス構成に含まれるinit-firewall.shスクリプトは、コンテナからの送信先をClaude Codeや開発ツールに必要なドメインだけに絞り込みます。
GitHub・Anthropic API・npmレジストリ・statsig・sentryなど許可ドメイン以外への通信はすべてブロックされる仕組みです。これにより、コンテナ内で不審なコマンドが実行されても外部への情報持ち出しや不要な通信を大幅に抑えられます。
動かすには追加権限が必要なため、devcontainer.jsonのrunArgsでNET_ADMINとNET_RAWを付与しています。必須ではなく、自前のネットワーク制御があれば省略しても構いません。
隔離という発想は、複数セッションを並列で動かす「git worktreeで並列作業する方法」とも近いものです。worktreeがファイル変更の衝突を防ぐのに対し、DevContainerはコマンド実行そのものをホストから切り離します。
組み合わせれば隔離コンテナ内で複数worktreeの並行運用も可能です。
認証情報とボリュームマウントの注意点
DevContainerは強力な保護を提供しますが、設定次第では意味が薄れます。~/.sshやクラウドの認証情報ファイルをそのままコンテナにマウントしないようにし、リポジトリ単位や有効期限付きの短命なトークンを使いましょう。
コンテナ内のワークスペースはホストのリポジトリとバインドマウントされているため、Claudeが行った変更はそのままホスト側にも反映されます。無関係なディレクトリまで広くマウントしないことも大切です。
なお--dangerously-skip-permissionsはrootコンテナでは拒否されるため、remoteUserを非rootに設定しておく必要があります。
つまずきポイント/よくあるエラー
Failed to install Node.js and npmと表示される: ベースイメージにNode.jsが含まれていません。featuresブロックに"ghcr.io/devcontainers/features/node:1": {}を追加して再ビルドしてください。- 再ビルドのたびにサインインを求められる:
~/.claudeへの名前付きボリュームマウントとCLAUDE_CONFIG_DIRの設定漏れが原因です。両方セットで設定しないと.claude.jsonが保存されません。 - ブラウザ認証が完了してもコンテナ側に反映されない: ポートフォワーディングがlocalhostコールバックを中継できていない場合があります。表示されたコードをターミナルに貼り付ければ手動で認証できます。
--dangerously-skip-permissionsが拒否される: rootで実行している可能性があります。remoteUserを非rootアカウントに変更してください。
よくある質問
DevContainerを使えばpermissions設定は不要になりますか?
いいえ。DevContainerはホストへの影響を遮断する仕組みで、Claude Codeの権限モードや承認ルールとは役割が異なります。組み合わせることでより安全な運用になります。
VS Code以外のエディタでも使えますか?
Dev Containers仕様に対応したツールであれば利用できます。GitHub Codespaces、JetBrains IDE、Cursorなどが該当します。
ファイアウォールを設定しないとどうなりますか?
init-firewall.shは必須ではなく、設定しなくてもコンテナは動作します。ただし送信先の制限がなくなり、想定外の通信リスクは高まります。
まとめ
DevContainerを使えば、Claude Codeのコマンド実行やファイル編集をDockerコンテナ内に閉じ込めつつ、開発チーム全員で同じ環境を再現できます。
公式のClaude Code Dev Container Featureをdevcontainer.jsonに追加するだけで導入でき、リファレンス実装ならファイアウォールや永続ボリュームまで含めた構成もすぐに試せます。
--dangerously-skip-permissionsで自律実行させたい場合ほど恩恵は大きくなりますが、認証情報のマウント範囲やバインドマウントの扱いには引き続き注意が必要です。
権限管理の詳細は「権限管理の仕組みと設定方法」、複数セッションの並列運用は「git worktreeで並列作業する方法」、基本操作は「Claude Codeの使い方完全ガイド」もあわせてご覧ください。