Claude Code はターミナル上で動くAIコーディングエージェントですが、ホストマシンのファイルシステムやターミナルに直接アクセスするため、環境を分離して安全に使いたいというニーズがあります。
この記事では、Windows 上で Claude Code を Docker コンテナ(DevContainer)に閉じ込めて安全に運用する方法を、実際に構築した手順に沿ってステップバイステップで解説します。
この記事で分かること
- Windows で Claude Code を環境分離する方法の選択肢
- Anthropic 公式推奨の WSL 2 + DevContainer 構成
- Cursor(VS Code フォーク)での DevContainer セットアップ手順
- 構築中に遭遇したエラーとその解決方法
- Remote Control でスマホからセッションを操作する方法
Windows での環境分離:3つの選択肢
Claude Code を Windows で動かす方法は複数あり、環境分離のレベルが異なります。
1. ネイティブ Windows + Git Bash(分離なし)
最も手軽な方法です。Git for Windows をインストールして PowerShell から直接使えますが、Claude Code がホストマシンのファイルシステムに自由にアクセスできるため、環境分離の観点では不十分です。
2. WSL 2 に直接インストール(中程度の分離)
WSL 2 上に Claude Code をインストールする方法です。WSL 2 はサンドボックスをサポートしており、Windows ホストからはある程度分離されます。手軽さと分離のバランスが良い選択肢です。
3. WSL 2 + DevContainer(公式推奨・高い分離)
Anthropic の公式セキュリティドキュメントが推奨する方法です。Docker コンテナ内に隔離された環境を作り、ファイアウォールでネットワーク通信も制限します。--dangerously-skip-permissions フラグを使った自動運用を安全に行いたい場合は、この方法一択です。
| 方式 | 分離レベル | パフォーマンス | 手軽さ |
|---|---|---|---|
| ネイティブ Windows + Git Bash | 低 | 普通 | ◎ |
| WSL 2 に直接インストール | 中 | 最速 | ○ |
| WSL 2 + DevContainer | 高 | 速い | ○ |
本記事では、公式推奨の WSL 2 + DevContainer 方式で構築します。
全体のアーキテクチャ
構築する環境の全体像は以下のとおりです。
🖥️ Windows Host
├── Cursor(Claude Code 拡張入り)
├── Docker Desktop(WSL 2 バックエンド)
│
└── 🐧 WSL 2 (Ubuntu)
└── ~/projects/my-project/
│
└── 🐳 DevContainer
├── Claude Code CLI
├── Node.js 20
├── Git / ZSH / fzf
├── 🔒 ファイアウォール(ホワイトリスト方式)
│ ├── ✅ api.anthropic.com
│ ├── ✅ github.com
│ ├── ✅ registry.npmjs.org
│ └── ❌ その他すべてブロック
├── /workspace(プロジェクトファイル)
└── Docker Volumes(認証情報・履歴の永続化)
ポイント:
- Windows のファイルシステムには触れない
- ホワイトリスト外のサーバーには通信できない
- コンテナを壊しても再ビルドするだけで復旧
- 認証情報とコマンド履歴は Docker Volume に永続化
前提条件
- Windows 10(Build 19041 以降)または Windows 11
- Docker Desktop インストール済み
- Cursor または VS Code インストール済み
Note: 本記事では VS Code フォークである Cursor を使用しています。VS Code の場合も手順はほぼ同じです。
Step 1:WSL 2 を有効にする
PowerShell を 管理者として 開いて以下を実行します。
wsl --install -d Ubuntu
既に WSL 2 が有効な場合はスキップしてください。以下のコマンドで確認できます。
wsl --list --verbose
VERSION 列が 2 になっていれば OK です。
Step 2:Docker Desktop の WSL 2 統合を有効にする
Docker Desktop を開き、以下の 2 箇所を確認します。
Settings → General
「Use the WSL 2 based engine」にチェックが入っていることを確認します。
Settings → Resources → WSL integration
Ubuntu ディストリビューションの トグルを ON にします。
WSL integration とは何か?
この設定は、WSL 2 内の Ubuntu ディストリビューションから docker コマンドを直接使えるようにするためのものです。
- OFF の場合: Docker エンジンは Windows 側でのみ動作。WSL 2 から
dockerコマンドが使えません。 - ON の場合: Docker Desktop が WSL 2 側に
dockerコマンドへのパスを自動的に通してくれます。
Docker エンジン自体が Ubuntu 内にインストールされるわけではなく、Windows 側の Docker Desktop エンジンにソケット経由でアクセスできる橋渡しをしているだけです。
⚠️ 重要: この設定を変更した場合は、Docker Desktop の再起動が必要です。タスクバーの Docker アイコンを右クリック → 「Restart」で再起動してください。
Step 3:Cursor に Dev Containers 拡張をインストール
Cursor の拡張機能タブ(Ctrl+Shift+X)で以下をインストールします。
- Cursor Dev Containers(Anysphere 製)
VS Code を使用している場合は、以下の 2 つをインストールしてください。
- Dev Containers(Microsoft 製)
- WSL(Microsoft 製)
Step 4:WSL 2 内で作業ディレクトリを準備
WSL 2 のターミナルを開きます(Windows Terminal から Ubuntu を選ぶか、PowerShell で wsl と入力)。
mkdir -p ~/projects/my-project
cd ~/projects/my-project
なぜ WSL 2 側にプロジェクトを置くのか?
Windows 側のパス(/mnt/c/Users/...)にプロジェクトを置くと、ファイルの読み書きが WSL 2 ↔ Windows 間のファイルシステム変換を経由するため、I/O が遅くなります。Claude Code は大量のファイル操作を行うので、体感速度にかなり影響します。
# ❌ 遅い(Windows 側のファイルシステム)
cd /mnt/c/Users/username/my-project
# ✅ 速い(WSL 2 側のファイルシステム)
cd ~/projects/my-project
~ とは?
~(チルダ)はログイン中ユーザーのホームディレクトリを指すショートカットです。ユーザー名が kenbun なら、~/projects は /home/kenbun/projects と同じ意味です。
WSL 2 のファイルはどこに保存されるのか?
WSL 2 のファイルシステムは、Windows 上の仮想ハードディスクファイル(.vhdx)内に格納されています。
C:\Users\(ユーザー名)\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx
Windows のエクスプローラーから中身を見たい場合は、アドレスバーに \\wsl$\Ubuntu と入力するとアクセスできます。
既存プロジェクトの移行
Windows 側に既存のプロジェクトがある場合は、WSL 2 側にコピーします。
# 方法1:直接コピー
cp -r /mnt/c/Users/(ユーザー名)/(プロジェクトのパス) ~/projects/my-project
# 方法2:Git リポジトリならクローンの方がクリーン
cd ~/projects
git clone (リポジトリのURL) my-project
Step 5:WSL 2 で Git 認証を設定する
WSL 2 は Windows とは独立した環境のため、Git の認証情報が設定されていません。Windows 側の Git Credential Manager を共有する設定を行います。
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
Note: パスが見つからない場合は、
ls "/mnt/c/Program Files/Git/mingw64/bin/"で実際のファイル名を確認してください。git-credential-manager-core.exeという名前の場合もあります。
Step 6:公式 DevContainer 設定を取得
Anthropic が提供する公式のリファレンス実装をクローンし、.devcontainer ディレクトリをプロジェクトにコピーします。
# 公式リポジトリをクローン
git clone https://github.com/anthropics/claude-code.git ~/claude-code-ref
# .devcontainer をプロジェクトにコピー
cp -r ~/claude-code-ref/.devcontainer ~/projects/my-project/
# 確認
ls ~/projects/my-project/.devcontainer/
以下の 3 ファイルが表示されれば成功です。
| ファイル | 役割 |
|---|---|
devcontainer.json | コンテナ設定、拡張機能、ボリュームマウント |
Dockerfile | コンテナイメージの定義 |
init-firewall.sh | ネットワークセキュリティルール |
Step 7:DevContainer を起動
WSL 2 のターミナルから Cursor を開きます。
cd ~/projects/my-project
cursor .
Note:
cursorコマンドが使えない場合は、Cursor のコマンドパレット(Ctrl+Shift+P)→「Install ‘cursor’ command in PATH」を実行してください。VS Code の場合はcode .です。
Cursor が開いたら、以下のいずれかで DevContainer を起動します。
- 方法 A: 右下に表示される「Reopen in Container」通知をクリック
- 方法 B: コマンドパレット(
Ctrl+Shift+P)→Dev Containers: Reopen in Containerを選択
初回はイメージのビルドに数分かかります。
トラブルシューティング
エラー:docker info の Server が空
Failed to reopen folder in container: Error running `docker info`.
原因: Docker Desktop の WSL 2 統合設定を変更した後、再起動していない。
対処法: Docker Desktop をタスクバーアイコンから「Restart」で再起動し、docker info で Server 情報が表示されることを確認してから再度「Reopen in Container」を実行。
エラー:init-firewall.sh が失敗する
postStartCommand from devcontainer.json failed.
原因: コンテナに iptables を操作するための NET_ADMIN 権限がない。Docker Desktop + WSL 2 環境でよく発生します。
対処法①:権限を追加
devcontainer.json に以下を追加します。
"runArgs": ["--cap-add=NET_ADMIN"],
対処法②:ファイアウォールをスキップ
上記で解決しない場合は、devcontainer.json 内の以下の行を削除(またはコメントアウト)します。
"postStartCommand": "sudo /usr/local/bin/init-firewall.sh",
ファイアウォールを無効にしても DevContainer 自体のファイルシステム分離は有効なので、環境分離の効果は残ります。
変更後、コマンドパレットから Dev Containers: Rebuild Container を実行してください。
Step 8:Claude Code にログイン
DevContainer が起動すると、Cursor のターミナルが自動的にコンテナ内のシェルになります。ここで Claude Code を起動します。
claude
初回セットアップの流れ:
- カラースキーマを選択
- ログイン方式を選択 → Subscription を選ぶ
- 表示される URL をブラウザで開いてトークンを取得
- トークンを貼り付け
以下のコマンドで動作確認します。
# バージョン確認
claude --version
# 作業ディレクトリの確認(/workspace になっていれば OK)
pwd
# 試しにタスクを実行
claude "このディレクトリの構成を教えて"
2 回目以降の起動
Cursor で同じプロジェクトフォルダを開けば、左下の >< アイコンから「Reopen in Container」を選ぶだけです。認証情報やコマンド履歴は Docker Volume に永続化されているため、毎回ログインし直す必要はありません。
別プロジェクトへの適用
新しいプロジェクトでも .devcontainer フォルダをコピーするだけです。
cp -r ~/claude-code-ref/.devcontainer ~/projects/another-project/
cd ~/projects/another-project
cursor .
# → "Reopen in Container" をクリック
プロジェクトごとに独立したコンテナが作られるので、環境が混ざることはありません。
【おまけ】Remote Control でスマホから操作する
Claude Code の Remote Control 機能を使えば、DevContainer 内で動いているセッションをスマホや別のブラウザから操作できます。
使い方
DevContainer 内のターミナルで以下を実行します。
# 既存セッション内から
/remote-control
QR コードと URL が表示されるので、スマホの Claude アプリまたはブラウザからアクセスします。ローカル環境のファイルシステム、MCP サーバー、ツール、プロジェクト設定がすべてそのまま利用でき、Web・モバイル・ターミナルのどこからでもメッセージを送受信できます。
注意点
- Max プランまたは Pro プランが必要(Team・Enterprise は未対応)
- API キーは非対応
- コンテナからインターネットへの HTTPS 通信が必要(Anthropic のリレーサーバー経由)
まとめ
Windows で Claude Code を安全に使うには、WSL 2 + DevContainer が Anthropic 公式推奨の構成です。
- ファイルシステム分離: コンテナ内のファイル操作は Windows ホストに影響しない
- ネットワーク制限: ホワイトリスト方式のファイアウォールで不要な通信をブロック
- 永続化: 認証情報・コマンド履歴は Docker Volume で保持
- 再現性:
.devcontainerフォルダをコピーするだけで同じ環境を複製可能
初回の構築には多少の手間がかかりますが、一度セットアップすれば「Reopen in Container」をクリックするだけで安全な開発環境が立ち上がります。Claude Code を本格的に活用するなら、ぜひこの構成を試してみてください。