Claude Codeのサンドボックス機能をWindowsで使うにはWSL2が必須だった話

概要

今回はClaude Codeのサンドボックス機能をWindowsで有効化する手順について紹介していきます。

普段Claude Codeを使っていると、Bashコマンドを実行するたびに「実行していいですか」の確認が挟まって、テンポが崩れることがありますよね。

自分の場合、作業フォルダ配下は基本的に全部自分のプロジェクトなので、いちいち確認されるより手放しで動いてくれたほうがありがたいと思っていました。

そこでサンドボックス機能を調べてみたところ、想定より大掛かりな話になったので、実際にやった手順をまとめておきます。

それではやっていきましょう!

目次

サンドボックス機能とは

Claude Codeのサンドボックス機能は、Bashコマンドの実行をOSレベルで隔離する仕組みです。

触れるファイルやアクセスできるネットワーク先をあらかじめ決めておき、その範囲内であれば個別の確認なしにコマンドを実行できるようになります。

  • macOS
    • 標準搭載のSeatbeltフレームワークを使うため追加インストール不要
  • Linux
    • bubblewrap(隔離の本体)とsocat(ネットワーク中継)が必要
  • WSL2
    • Linuxと同じ仕組み(bubblewrap + socat)で動作する
ネイティブWindowsは非対応
公式ドキュメントには「サンドボックスはmacOS・Linux・WSL2で動作し、ネイティブWindowsは非対応。 Windowsで使うにはWSL2内でClaude Codeを実行すること」と明記されています。 WSL1も、bubblewrapが要求するカーネル機能が無いため対象外です。

つまり、C:ドライブ上で直接Claude Codeを動かしている限り、サンドボックス機能そのものにたどり着けないということになります。

自分の環境(Windows 11 Home)ではWSLは有効になっていたものの、WSL2の実体(Ubuntuなどのディストロ)はまだ何も入っていませんでした。

WSL2にUbuntu-24.04を用意する

まずはPowerShellから、WSL2上にUbuntu-24.04をインストールします。

PowerShell

1
wsl --install -d Ubuntu-24.04

インストール後、初回起動でユーザー作成を求められるのが通常の流れですが、今回はここをスキップして起動できてしまいました。

これが後になって、Claude Code拡張が起動エラーになる別のトラブルにつながりました。

続けて、サンドボックスに必要なbubblewrapsocatをUbuntu側にインストールします。

Ubuntu

1
2
sudo apt-get update
sudo apt-get install -y bubblewrap socat

インストール後、実際にbubblewrapが動くかどうかを簡単なコマンドで確認しておきます。

動作確認

1
bwrap --ro-bind / / --dev /dev --proc /proc --unshare-all echo SANDBOX_OK

SANDBOX_OKが返ってくれば、隔離実行そのものは問題なく動く状態です。

ちなみにUbuntu 24.04以降では、AppArmorの制限でbubblewrapがユーザー名前空間を作れないケースがあると言われています。 自分の環境では`sysctl kernel.apparmor_restrict_unprivileged_userns`が「該当キーなし」だったため追加対応は不要でしたが、環境によっては別途AppArmorプロファイルの追加が必要になるようです。

Claude Code CLIをWSL2側にインストール

サンドボックスの動作確認ができたら、Node.jsとClaude Code CLIをUbuntu側に入れます。

Ubuntu

1
2
3
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
sudo apt-get install -y nodejs
npm install -g @anthropic-ai/claude-code

ここでのポイントは、Claude Code本体もWSL2側(Linux)にインストールすることです。

Windows側のVS Code拡張だけを使っていても、サンドボックスの恩恵は受けられません。

settings.jsonでサンドボックスを有効化する

最後に、Claude Codeの設定ファイル(~/.claude/settings.json)にサンドボックス設定を書きます。

~/.claude/settings.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": true,
"failIfUnavailable": false,
"filesystem": {
"allowWrite": ["/mnt/c/Programming"]
},
"network": {
"allowedDomains": [
"github.com",
"*.github.com",
"registry.npmjs.org",
"*.npmjs.org"
]
}
}
}
  • sandbox.enabled
    • サンドボックス自体のON/OFFスイッチ
  • filesystem.allowWrite
    • サンドボックスの外でも書き込みを許可したいパスを追加できる
  • network.allowedDomains
    • ここに無いドメインへの初回アクセス時だけ確認が入る仕組み

このファイルはユーザー単位の設定なので、どのプロジェクトフォルダを開いてもこの設定が引き継がれるのが便利なポイントです。

ちなみにこのsettings.jsonをClaude自身に直接書き換えさせようとしたところ、安全機構に弾かれる場面がありました。

このあたりの経緯はClaude Codeは自分自身の権限設定ファイルを書き換えられない、を実際に確認した🔗 shinpinoshi.comにまとめています。

まとめ

WindowsでClaude Codeのサンドボックスを使うには、WSL2の中にClaude Code本体を入れて動かす必要があるというのが結論です。

手順自体は、WSL2のセットアップさえ終われば、パッケージのインストールとsettings.jsonの追記だけなので、思ったより短時間で終わりました。

もしこの記事でつまずいたら設定ごとクロードにお願いすればやってくれるので、それでも大丈夫です。

以上となります。
これで夢の安心安全完全自動クロードが使えるってわけです(^^
それではお疲れさまでした。