正式リリース間近! 新機能・改善盛りだくさんの「Windows 10 May 2020 Update」

第5回

「WSL 2」が正式リリース! ~「WSL 1」とのメリットは? 「Windows Terminal」にも注目

「Windows 10 May 2020 Update(バージョン 2004)」

 「Windows 10 May 2020 Update(バージョン 2004)」の新機能と改善点を紹介する本特集。第5回となる本稿では、「May 2020 Update」で正式リリースとなる目玉機能「WSL 2」にスポットをあてよう。

「WSL 2」が正式リリース!

 「Windows Subsystem for Linux(WSL)」は、LinuxのELF64バイナリをWindows 10上で直接実行するための機構。要するに、Windows 10上でLinuxを利用できるようにするためのものだ。「May 2020 Update」には、従来からある「WSL 1」とは異なるもう一つの「WSL」である「WSL 2」が搭載され、正式リリースされた。

 「WSL 2」というと「WSL 1」の後継版かと思いがちだが、そうではない。「WSL 1」は仮想マシンではなく、LXCore/Lxssと呼ばれる仕組みでLinuxのシステムコールをWindowsのAPIに変換してバイナリを実行する形式だったが、「WSL 2」は仮想マシン(VM)でバイナリを実行する。

「WSL 2」のアーキテクチャー

 とはいえ、この仮想マシンは従来(Traditional)のVMとは異なり、「WSL 2」のために開発された“軽量ユーティリティ仮想マシン(Lightweight utility VM)”だ。「Hyper-V」の分離コンテナーで実装されており、Linuxカーネルは「WSL 2」向けに最適化されたものがまるごとWindows 10に内蔵される(正式リリース前の変更でカーネルコンポーネントは“https://aka.ms/wsl2kernel”からダウンロードする形式になった)。起動時間やメモリの消費量がTraditional VMより抑えられているほか、仮想マシンのメンテナンスを行う必要もない。軽量ユーティリティ仮想マシンは、「Windows Sandbox」や「Windows Defender Application Guard(WDAG)」といったサンドボックス技術(不審なアプリを隔離環境でテスト実行すること)でも用いられている。

従来(Traditional)のVMと「WSL 2」のVMの違い。

「WSL 2」のメリット

互換性の向上

 「WSL 2」はLinux仮想マシンでLinuxバイナリを実行するため、原理上は100%の互換性がある。「WSL 1」のシステムコール変換では対応の難しかった「FUSE」や「Docker」なども利用可能になる。

「Visual Studio Code」の「Docker」拡張機能

 とくに「Docker」のサポートには注目だ。「Visual Studio Code」の「Docker」拡張機能、「Remote Development」拡張機能、「WSL 2」対応の「Docker Desktop」アプリなどを組み合わせれば、Windows 10でLinuxコンテナーを利用したリモート開発がシームレスに行える。「WSL 2」は「Windows 10 Home」でも利用できるため、わざわざ「Windows 10 Pro」を用意する必要もない。

ファイルアクセスの高速化

「WSL 1」で問題となっていたディスクアクセスのパフォーマンスが大幅に改善

 「WSL 2」のLinuxファイルはWindowsのファイルシステム(NTFS)ではなく、EXT4でフォーマットされた仮想ハードウェアディスク(VHD)に格納される。そのため、「WSL 1」で問題となっていたディスクアクセスのパフォーマンスが大幅に改善される。

「WSL 2」のLinuxファイルはEXT4でフォーマットされた仮想ハードウェアディスク(VHD)に格納される

 このVHDは必要に応じて自動的に拡張されるが、初期状態での最大サイズは256GBに制限されているため、ディスク領域が不足するとエラーが発生する。その場合は、手動でVHDのサイズ制限を緩和する必要があるので注意したい。

「WSL 1」も当面存続

 とはいえ、「WSL 2」にも欠点がないわけではない。

カーネルコンポーネントをダウンロード・インストール

 “Microsoft Store”からLinuxディストリビューションをダウンロードすると「WSL 1」としてインストールされ、「WSL 2」にするには変換(“wsl --set-version <ディストリビューションの名前> 2”)しなければならない(初期設定を「WSL 2」にすることも可能)。また、変換処理には若干時間を要する。変換の際には、上述のカーネルコンポーネントをダウンロード・インストールする必要があるほか、OSのオプション機能を有効化しなければならない場合がある。

OSのオプション機能を有効化

 要するに、セットアップに多少の時間がかかる。また、軽いとはいえ仮想マシンのウォームアップに多少に時間がかかる。少なくとも当面の間「WSL 1」は廃止の予定はないし、気軽さでは「WSL 1」に軍配が上がるだろう。「WSL 1」でたいして困っていないならば、無理して「WSL 2」に移行する必要はない。

まとめ ~「Windows Terminal」で「WSL」環境はさらに便利に

 「20H1」のプレビューテストの間、「WSL 2」の弱点は着実につぶされていった。たとえば初期バージョンの「WSL 2」はホストと異なるIPアドレスを持っており、Windows 10からLinuxのネットワークアプリへアクセスする場合に“localhost”ではなく、IPアドレスを指定する必要があったが、この問題は早期に解決された。ARM64デバイスのサポートも実現され、仮想マシンに追加で割り当てられたメモリ管理の改善なども行われた。

「Windows Terminal」

 加えて注目したいのが「Windows Terminal」だ。「Windows Terminal」は複数のシェル(PowerShell、WSL/Linuxなど)をタブで切り替えられる点や、UTF-16/UTF-8両対応のテキストバッファー、DirectWrite/DirectXベースのテキストレンダリングエンジンを備えるモダンな設計が特徴。オープンソースで開発されており(ライセンスは“MIT License”)、近いうちに正式リリースされる予定。“Microsoft Store”から簡単にセットアップできるので、「May 2020 Update」がリリースされたらぜひインストールしてみてほしい。