.wslconfigとwsl.confの違い — WSL2の2つの設定ファイルを正しく使い分ける¶
対象: WSL2を使っていて設定ファイルの使い分けに迷っている開発者
この記事のポイント¶
- .wslconfig = VM全体の制御 Windows側に置き、メモリ・CPU・ネットワークモードを設定
- wsl.conf = ディストリ個別の設定 Linux側の/etc/に置き、systemd・マウント・ユーザーを設定
- 反映方法は共通 どちらも
wsl --shutdown→再起動で反映
「どっちに書けばいい?」を1分で解決する¶
WSL2の設定を変えたいとき、.wslconfigとwsl.confのどちらに書くべきか迷う場面は多い。
判断基準はシンプルだ。 VM自体の設定か、その中で動くLinuxの設定か。メモリを4GBに制限したいなら.wslconfig。systemdを有効にしたいならwsl.conf。役割は完全に分かれている。
| 比較軸 | .wslconfig | /etc/wsl.conf |
|---|---|---|
| 置き場所 | Windows側 C:\Users\<名前>\.wslconfig | Linux側 /etc/wsl.conf |
| 適用範囲 | 全ディストリビューション共通 | そのディストリのみ |
| 制御対象 | VM自体(CPU・RAM・ネットワーク) | ディストリ内の動作(マウント・systemd・ユーザー) |
| WSL 1対応 | 非対応(WSL 2専用) | 対応(WSL ½両方) |
この比較表だけで8割のケースは判断できる。残りの具体的な設定項目を見ていこう。
.wslconfig — Windows側でVM全体を制御する¶
.wslconfigはデフォルトでは存在しない。手動でC:\Users\<ユーザー名>\.wslconfigに作成する。
主要な設定項目¶
[wsl2]セクションに記述する。
[wsl2]
memory=4GB
processors=2
swap=2GB
localhostForwarding=true
nestedVirtualization=true
| キー | デフォルト | 説明 |
|---|---|---|
memory | 物理メモリの50% | VMに割り当てるメモリ量 |
processors | 論理プロセッサ全数 | VMに割り当てるCPU数 |
swap | 物理メモリの25% | スワップサイズ。0で無効 |
localhostForwarding | true | WSL内のポートをWindows側localhostで公開 |
networkingMode | NAT | ネットワークモード(後述) |
nestedVirtualization | true | WSL内でのVM実行を許可 |
よくあるユースケースはRAM制限だ。WSL2はデフォルトで物理メモリの50%を使う。メモリ8GBのPCでは4GBがWSLに取られる計算だ。memory=4GB程度に絞ると、ホストOS側の動作も安定する。
mirroredモード(Windows 11 22H2以降)¶
VPN環境でWSL2のネットワークが不安定な場合、networkingMode=mirroredが有効だ。
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
mirroredモードではWindowsのネットワーク設定がLinux側にそのままミラーリングされる。VPN・プロキシ環境でのDNS問題が大幅に改善される。
experimentalセクション¶
メモリの自動回収やVHDの自動縮小といった実験的機能もある。
[experimental]
autoMemoryReclaim=gradual
sparseVhd=true
autoMemoryReclaim=gradualはアイドル時にキャッシュメモリを段階的に解放する。メモリが限られた環境で効果的だ。
/etc/wsl.conf — Linux側でディストリ個別に設定する¶
wsl.confもデフォルトでは存在しない場合がある。sudo nano /etc/wsl.confで作成・編集する。
主要なセクションと設定¶
[boot]
systemd=true
[user]
default=devuser
[automount]
enabled=true
options="metadata,umask=022"
[network]
generateResolvConf=false
[interop]
enabled=true
appendWindowsPath=true
| セクション | 主な設定 | 用途 |
|---|---|---|
[boot] | systemd=true, command | systemd有効化、起動時コマンド実行 |
[user] | default=<ユーザー名> | デフォルトログインユーザーの変更 |
[automount] | enabled, root, options | Windowsドライブのマウント設定 |
[network] | generateResolvConf, generateHosts | DNS・hosts自動生成の制御 |
[interop] | enabled, appendWindowsPath | Windows連携の制御 |
複数ディストリを使い分けている場合、「ディストリ個別」の特性が活きる。 Ubuntu用とDebian用で異なるデフォルトユーザーやsystemd設定を持てる。
よくある設定例¶
DNS自動生成を止めてカスタムDNSを使う:
[network]
generateResolvConf=false
この設定後、/etc/resolv.confを手動で作成する。
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
社内DNSやVPN環境で名前解決が失敗する場合に有効だ。
Windowsドライブのマウント先を変更する:
[automount]
root=/
デフォルトの/mnt/cが/cになる。パス入力が短くなるが、既存スクリプトとの互換性に注意が必要だ。
設定変更の反映方法¶
どちらのファイルを変更した場合も、同じ手順で反映する。
wsl --shutdown
その後WSLを再度起動する。ターミナルを閉じるだけでは不十分で、WSLのバックグラウンドプロセスが約8秒間残り続ける。wsl --shutdownで確実に全プロセスを終了させよう。
特定のディストリだけを再起動したい場合は以下を使う。
wsl --terminate Ubuntu
まとめ¶
.wslconfigはVM全体、wsl.confはディストリ個別 — これだけ覚えれば迷わない- RAM制限・ネットワークモードは
.wslconfig、systemd・ユーザー・マウントはwsl.conf - 反映は
wsl --shutdownで共通
設定を変えても反映されないときは、まずwsl --shutdownを確実に実行すること。それでも効かない場合はファイルの置き場所を間違えている可能性が高い。.wslconfigがLinux側に、wsl.confがWindows側にある — 取り違えは意外と多い。