概要

Windowsでコーディングエージェントを使うとき、「WSLで動かす」か「ネイティブWindowsで動かす」かで挙動が変わる。ここでは WSL3 を前提に、OpenCodeとCodex CLIを例に違いを整理する。

結論を先に言うと、「エージェントはLinux/POSIX前提で作られていることが多く、WSLはその前提に合わせやすい。ただしリポジトリの置き場所を間違えると極端に遅くなる」 というのが要点である。


エージェントがLinuxを好む理由

一般的なコーディングエージェントは、bash、grep、find、git といったUnixコマンドを前提に訓練・設計されていることが多い。そのため:

  • シェル操作: Linuxネイティブのシェル環境のほうがエラーが起きにくい
  • パス: Windowsの \ と / の混在、大文字小文字の扱いの差を回避できる
  • 権限: パーミッション(実行ビットなど)の整合性が取れる
  • ビルド: make、docker、各種Linuxツールチェーンがそのまま使える

ObsidianのClaudianのようなWindowsネイティブアプリからは、WSL内部のバイナリは自動検出されない(Windowsホスト側の実行パスを探すため)。この点は Obsidianプラグイン「Claudian」とローカルAIエージェント で扱った。


OpenCodeの場合

OpenCodeの公式ドキュメントは、WindowsではWSLの利用を推奨している。理由として、ファイルシステム性能・フルターミナル機能・依存ツールとの互換性を挙げている。ネイティブでも動くが、WSLのほうが快適という位置づけである。

  • 設定・セッションはWSL内の ~/.local/share/opencode/ に保存される
  • opencode web はPowerShellではなくWSLから起動したほうがファイルアクセスとターミナル統合が良い
  • Windows側ドライブのプロジェクトでも動く(/mnt/c/ 経由)が、リポジトリをWSLのファイルシステム(例: ~/code/)に置くのが最も快適

Codexの場合(サンドボックスの違い)

Codexは2026年8月時点で、ネイティブWindowsのサンドボックスを既定とし、必要に応じてWSL2を選ぶ、という方針になっている。ここは変化が早い領域なので注意。

ネイティブWindowsWSL2
サンドボックス方式Windowsサンドボックス(elevated / unelevated、MXC)Linuxサンドボックス(bubblewrap)
ファイル隔離ACL・サンドボックスユーザー境界名前空間の分離
ネットワーク既定オフオフ
セットアップ管理者プロンプトが1回必要(elevated)WSL導入+bubblewrap
リポジトリの速度ネイティブLinux FS上ならネイティブ
LinuxツールチェーンWindowsにある分だけネイティブ

WSL1は非対応。Codex 0.115 でLinuxサンドボックスが bubblewrap に移行したため、WSL1では動かない。wsl --set-version でWSL2へ変換するか、ネイティブ経路を使う。


最大の落とし穴:/mnt/c 問題

最も多い失敗がこれ。WSLからWindowsドライブ(/mnt/c/...)のファイルを読むと、翻訳レイヤ(9Pプロトコル)を毎回通るため3〜5倍遅い。エージェントはファイルを頻繁に読むので、体感は「壊れている」レベルになる。

対策:

  • リポジトリをWSLのファイルシステム内(~/code/ など)にcloneする
  • Windows側のツールから参照したい場合は \\wsl$ 共有経由で見る

WSL3ではvirtiofsが既定になり、この辺りのクロスOSアクセスが最大2倍改善されている。→ WSL3とはなにか


WSL3コンテナでエージェントを隔離する

WSLコンテナ を使うと、エージェントの実行環境をコンテナとして隔離できる。ツールや依存関係を固定でき、危険な操作を閉じ込められるため、サンドボックスとしての相性が良い。GPUアクセスも非特権ユーザーから可能で、ローカルLLMと組み合わせたエージェント実行にも向く。


まとめ

  • エージェントはLinux前提のものが多く、WSLはその前提に合わせやすい。
  • OpenCodeはWSL推奨。Codexはネイティブ既定だが、Linuxツールチェーンが要るならWSL2。
  • 何よりリポジトリを /mnt/c に置かない。これが速度問題の大半を占める。
  • WSL3コンテナはエージェントの隔離実行基盤として有望。

関連ノート


参考資料