WSL2 とは - WSL2
Windows Subsystem for Linux の第 2 世代。Hyper-V 技術を基盤にした軽量 VM 上で本物の Linux カーネルを動かす方式で、WSL1 のエミュレーションとは根本的に別物。Docker Desktop の標準バックエンドでもある。
概念図
構文
bash
wsl --install -d Ubuntu-22.04
wsl --set-default-version 2実例
Ubuntu 22.04 を WSL2 でインストール
bash
wsl --install -d Ubuntu-22.04インストール済みディストリと WSL バージョンを一覧
bash
wsl --list --verbose既存ディストリを WSL2 に変換
bash
wsl --set-version Ubuntu-22.04 2すべての WSL2 VM を停止(設定変更後に使う)
bash
wsl --shutdown概要
WSL1 は Windows カーネルに Linux システムコール互換層を実装して Linux バイナリを動かす方式でした。
ファイルシステム互換性やシステムコール網羅性に限界があり、Docker のようなカーネル機能(cgroups, namespaces)に強く依存するソフトは動きません。
WSL2 はアプローチを根本から変え、Windows が提供する薄い Hyper-V(仮想化プラットフォーム)上に Microsoft 製の軽量 Linux カーネルを乗せた「本物の VM」を動かします。
ディストリビューション(Ubuntu、Debian、openSUSE 等)はそのカーネルの上のユーザーランドで、起動は数秒、メモリ消費も実使用分だけで済みます。
これにより Docker、systemd、eBPF といった本物の Linux 機能が Windows 上でそのまま使えるようになりました。
典型的な用途
- Windows を母艦にしながら Linux での開発(Ruby on Rails、Node.js、Python、Go 等)
- Docker Desktop / Rancher Desktop の実行基盤
- Linux ツールチェーン(make、gcc、man、apt 等)を Windows マシンで使う
- CI の挙動を手元で再現する(同じ Linux ディストリビューションを使える)
- Kubernetes ローカル開発(minikube、kind、k3d など)
コマンド例
# インストール(Windows 11 では 1 コマンドで完結)
wsl --install -d Ubuntu-22.04
# 既存バージョン確認
wsl --list --verbose
# NAME STATE VERSION
# * Ubuntu-22.04 Running 2
# 既存ディストリを WSL2 に変換
wsl --set-version Ubuntu-22.04 2
# カーネル更新
wsl --update
wsl --version
# 全 VM 停止(.wslconfig 等を変更した後)
wsl --shutdown
%USERPROFILE%\.wslconfig でメモリや CPU 上限を制御できる。
[wsl2]
memory=8GB
processors=4
swap=0
ベストプラクティス
- ホスト Windows 側にコードを置かず、作業リポジトリは WSL2 側の
~/projectsに配置する(ファイルシステム性能が段違い) %USERPROFILE%\.wslconfigでメモリ上限を設定し、ビルド時の暴走を防ぐ- VS Code は WSL 拡張経由で WSL2 内を開き、ターミナル・デバッグ・Git 操作をすべて Linux 側に寄せる
wsl --updateは定期的に実行。カーネル脆弱性修正や性能改善が頻繁に入る- 開発用と検証用でディストリビューションを分け、
wsl --export/wsl --importでスナップショット運用する
注意点
- WSL2 は仮想化が前提なので、BIOS で Intel VT-x / AMD-V を有効化しておく必要がある
- VMware Workstation や VirtualBox の古いバージョンは Hyper-V と競合する(新しいバージョンは共存可)
\\wsl$\Ubuntu-22.04\として Windows 側から WSL2 のファイルシステムを参照できるが、大量アクセスは遅い- USB デバイスや GPU の扱いは WSL1 と異なる。USB は
usbipd-win、GPU は WSLg + 対応ドライバが必要 - 企業環境では社内ファイアウォール / プロキシ / AV の設定で VM 側の通信が弾かれることがある
関連トピック
Docker Desktop- Docker Desktop for Windows は WSL2 をバックエンドとしてコンテナを動かす構成。`docker-desktop` 専用ディストリに dockerd を常駐させ、ユーザーのディストリからは統合機能で透過的に使える。 /mnt/c vs ~- WSL2 では `~/`(Linux 側 ext4)と `/mnt/c/`(Windows 側 NTFS)で IO 性能が 10 倍以上違うことがある。`9p` プロトコルを介した Windows FS アクセスが遅いため、作業ファイルの置き場所で体感が大きく変わる。 systemd- かつて WSL2 は独自 init を使っており systemd が動かなかったが、2022 年以降の WSL でネイティブサポートされた。`/etc/wsl.conf` に `systemd=true` を書き、`wsl --shutdown` で再起動するだけで有効になる。 