コンテンツにスキップ

.wslconfigとwsl.confの違い — WSL2の2つの設定ファイルを正しく使い分ける

対象: WSL2を使っていて設定ファイルの使い分けに迷っている開発者

この記事のポイント

  • .wslconfig = VM全体の制御 Windows側に置き、メモリ・CPU・ネットワークモードを設定
  • wsl.conf = ディストリ個別の設定 Linux側の/etc/に置き、systemd・マウント・ユーザーを設定
  • 反映方法は共通 どちらもwsl --shutdown→再起動で反映

「どっちに書けばいい?」を1分で解決する

WSL2の設定を変えたいとき、.wslconfigwsl.confのどちらに書くべきか迷う場面は多い。

判断基準はシンプルだ。 VM自体の設定か、その中で動くLinuxの設定か。メモリを4GBに制限したいなら.wslconfig。systemdを有効にしたいならwsl.conf。役割は完全に分かれている。

比較軸.wslconfig/etc/wsl.conf
置き場所Windows側 C:\Users\<名前>\.wslconfigLinux側 /etc/wsl.conf
適用範囲全ディストリビューション共通そのディストリのみ
制御対象VM自体(CPU・RAM・ネットワーク)ディストリ内の動作(マウント・systemd・ユーザー)
WSL 1対応非対応(WSL 2専用)対応(WSL ½両方)

この比較表だけで8割のケースは判断できる。残りの具体的な設定項目を見ていこう。

.wslconfig — Windows側でVM全体を制御する

.wslconfigはデフォルトでは存在しない。手動でC:\Users\<ユーザー名>\.wslconfigに作成する。

主要な設定項目

[wsl2]セクションに記述する。

C:\Users\<UserName>\.wslconfig
[wsl2]
memory=4GB
processors=2
swap=2GB
localhostForwarding=true
nestedVirtualization=true
キーデフォルト説明
memory物理メモリの50%VMに割り当てるメモリ量
processors論理プロセッサ全数VMに割り当てるCPU数
swap物理メモリの25%スワップサイズ。0で無効
localhostForwardingtrueWSL内のポートをWindows側localhostで公開
networkingModeNATネットワークモード(後述)
nestedVirtualizationtrueWSL内でのVM実行を許可

よくあるユースケースはRAM制限だ。WSL2はデフォルトで物理メモリの50%を使う。メモリ8GBのPCでは4GBがWSLに取られる計算だ。memory=4GB程度に絞ると、ホストOS側の動作も安定する。

mirroredモード(Windows 11 22H2以降)

VPN環境でWSL2のネットワークが不安定な場合、networkingMode=mirroredが有効だ。

.wslconfig
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

mirroredモードではWindowsのネットワーク設定がLinux側にそのままミラーリングされる。VPN・プロキシ環境でのDNS問題が大幅に改善される。

experimentalセクション

メモリの自動回収やVHDの自動縮小といった実験的機能もある。

.wslconfig
[experimental]
autoMemoryReclaim=gradual
sparseVhd=true

autoMemoryReclaim=gradualはアイドル時にキャッシュメモリを段階的に解放する。メモリが限られた環境で効果的だ。

/etc/wsl.conf — Linux側でディストリ個別に設定する

wsl.confもデフォルトでは存在しない場合がある。sudo nano /etc/wsl.confで作成・編集する。

主要なセクションと設定

/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, commandsystemd有効化、起動時コマンド実行
[user]default=<ユーザー名>デフォルトログインユーザーの変更
[automount]enabled, root, optionsWindowsドライブのマウント設定
[network]generateResolvConf, generateHostsDNS・hosts自動生成の制御
[interop]enabled, appendWindowsPathWindows連携の制御

複数ディストリを使い分けている場合、「ディストリ個別」の特性が活きる。 Ubuntu用とDebian用で異なるデフォルトユーザーやsystemd設定を持てる。

よくある設定例

DNS自動生成を止めてカスタムDNSを使う:

/etc/wsl.conf
[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ドライブのマウント先を変更する:

/etc/wsl.conf
[automount]
root=/

デフォルトの/mnt/c/cになる。パス入力が短くなるが、既存スクリプトとの互換性に注意が必要だ。

設定変更の反映方法

どちらのファイルを変更した場合も、同じ手順で反映する。

PowerShellで実行
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側にある — 取り違えは意外と多い。

関連記事