Windows Terminalを日常的に使っている人は、WSL(Windows Subsystem for Linux)でLinux環境を利用する機会も多いだろう。そこで今回はWindows Terminal本体の機能から少し離れて、WSL 2(Windows Subsystem for Linux 2)を導入する方法について取り上げたい。当初、WSL 2はWindows 10のバージョン2004(Windows 10 May 2020 Update)以降でしか利用できなかったが、今年8月のアップデートでバージョン1093および1909までサポート対象が拡大され、多くのユーザーがWSLからWSL 2に移行できるようになった。

WSL 2とは

WLS 2は、Windows上でLinux互換の機能を利用可能にするWSLの後継バージョンだが、その実装方法は大きく刷新されており、大幅にパフォーマンスが向上している。WSLの場合、LinuxのカーネルシステムコールをWindowsカーネルシステムコールに変換するという方式でLinuxのプログラムをWindows上で使えるようにしている。それに対してWSL 2では、Windows 10内の軽量な仮想マシンの上でLinuxカーネルを実行するという方式が使われている。

つまり、WSLが”Winsowsの上でLinuxのプログラムが動くようにしたもの”なのに対して、WSL 2は”Windowsの上で本物のLinuxが動いている”ということになる。WSLでは一部のLinuxの機能が使えなかったが、WSL 2では本物のLinuxが動いているので、Linuxが持つ機能を全て利用することができる。例えば、WSLではDockerのようなLinuxコンテナを使うことができなかったが、WSL 2ではしっかりサポートされている。それに加えて、ファイルシステムのパフォーマンスも大幅に向上している。

したがって、一般的にはWSL 2が使える環境であればWSL 2を導入したほうがいい。ただし、WindowsとWSL上のLinuxの間で頻繁にファイルを移動やコピーするような用途に限っては注意が必要だ。OSのファイルシステムをまたいだファイルの操作については、WSL 2のパフォーマンスはWSLに比べて大幅に低下しているためだ。Microsoftではこの問題の解決に取り組んでいるとのことだが、仮想マシン上でLinuxカーネルを動かすという前述の仕組み上、WSLほどのパフォーマンスは見込めないと思っていい。

WSL 2を導入できる条件

WSL 2は2020年5月にリリースされた大型アップデートの「Windows 10のバージョン2004」(通称「Windows 10 May 2020 Update」)で利用可能になった。ただし、本稿執筆時点ではバージョン2004が自動アップデートの対象になっているのは一部のユーザーに限られている。つまり、デフォルト設定のWindows Updateで更新を適用しているほとんどのユーザーは、まだバージョン2004にはなっていないはずだ。

これに対してMicrosoftは、2020年8月にWSL 2をWindwos 10のバージョン1903およびバージョン1909でも利用できるようにアップデートした。バージョン1903と1909はWindows Updateによる自動更新の対象なので、多くのユーザーが使用しているバージョンになる。

Windowsのバージョンは、スタートメニューの検索バーに「winver」と入力して「Enter」キーを押すことで確認できる。次のように、バージョン番号とOSビルド番号が表示される。

Windowsのバージョンの確認

この画面で、バージョンが1903でかつOSビルド番号が18362.1049以降か、またはバージョンが1909でOSビルド番号が18363.1049以降、バージョンが2004以降であればWSL 2が使用できる。ただし、ARM64版のWindowsの場合は、バージョン2004以降でかつビルド番号19041以降のみWSL 2に対応している。

もう一点注意しなければならないのは、WSL 2はCPUのハードウェア仮想化支援機能(Intelであれば「VT-x」や「VT-d」、AMDであれば「AMD-V」)に依存しているため、BIOSの設定でこれが有効になっている必要があるということだ。

さらに、もし別のOSの上で仮想マシンを使ってWindowsを動かしている場合には、仮想化ソフトウエアの設定で仮想化支援機能を有効にする必要がある。 例えばVMware Workstationであればプロセッサの設定で「仮想化エンジン」の設定を有効にして、「Intel VT-x/EPT または AMD/RVI を仮想化」にチェックを入れる。Parallels DesktopであればCPUおよびメモリの設定で、詳細設定の「ネストされた仮想化を有効にする」にチェックを入れれば良い。

macOSのParallels DesktopでWindowsを動かしている場合の設定

以上の条件が整っていればWSL 2を使用することができる。

WSL 2を使えるようにセットアップする

それでは、WSL 2を使えるように設定していこう。WSL 2の設定には管理者権限でコマンドを実行する必要があるので、まずは管理者権限でPowerShellを開いておく。もちろんPowerShellはWindows Terminalで開いてもよい。管理者権限でWindows Terminalを開くには、下図のようにタスクバーの検索メニューでWindows Terminalを表示させて、「管理者として実行」を選択すればよい。

Windows Terminalを管理者権限で開く

もしまだ(WSL 2ではなく)WSLを使っていない場合には、PowerShellで次のコマンドを実行する。これはWSLを有効にするためのコマンドなので、すでにWSLを使っている場合には実行しなくてもよい。

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

WSLを有効にする

続いて、WSL 2を利用できるようにするために、Windowsの「仮想マシン プラットフォーム」オプションを有効にする。これは次のコマンドで設定できる。

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

仮想マシンプラットフォーム オプションを有効にする

設定を反映させるために、ここで一度PCを再起動しよう。

再起動したら、LinuxカーネルをWSL 2に対応させるための「Linux カーネル更新プログラム パッケージ」と呼ばれるプログラムをインストールする。このプログラムは次のリンク先からダウンロードできる。


ダウンロードしたら、インストーラの指示にしたがってインストールしていただきたい。これで、WSL 2を使うための準備が整った。

デフォルトの設定

WSL 2を有効にしてあっても、新規でLinuxディストリビューションをインストールする際には、デフォルトではWSLが使われるようになっている。WSL 2をデフォルトで使用するように設定したい場合は、管理者としてPowerShellを開いて次のコマンドを実行する。

> wsl --set-default-version 2

WSL 2をデフォルトに設定する

デフォルトをWSLに戻したい場合には、「2」のところを「1」に変えて実行すればよい。

次のコマンドを実行すると、現在インストールされているLinuxディストリビューションの名前と、割り当てられているWSLのバージョンが確認できる。

> wsl --list --verbose

筆者の環境では、WSLのときにインストールした「Ubuntu」と「Ubuntu-20.04」があるので、次のようになった。

インストール済みのLinuxディストリビューションとWSLバージョンの確認

もし、すでにインストールされているLinuxディストリビューションをWSL 2に移行したい場合には、次のコマンドを実行すればよい。

> wsl --set-version <ディストリビューション名> <バージョン番号>

次の図は、筆者の環境で「Ubuntu-20.04」をWSL 2に変換した例である。

Ubuntu-20.04をWSL 2に変換する

「変換が完了しました。」と表示されれば変換成功だ。「wsl —list —verbose」で確認すると、WSL 2が割り当てられたことがわかる。以降、Ubuntu-20.04はWSL 2で起動されることになる。もしWSLに戻したい場合には、バージョン番号のところに「1」を指定して同じコマンドを実行すればよい。

今回は、WSL 2を導入する方法について取り上げた。一部のLinuxの機能が使えなかったWSLと違い、WSL 2ではLinuxが持つ機能を全て利用することができるし、ファイルシステムのパフォーマンスも大幅に向上している。もしWSL 2が使える条件が整っているのであれば、ぜひ積極的に試してみてほしい。

参考資料