Visual Studio CodeからWSL 2を使う

最近、マイクロソフトからVisual Studio CodeとWSLに関連した良質なドキュメントの公開が続いている。今回は、9月3日(米国時間)に公開された次のドキュメントを紹介したい。

このドキュメントは、Visual Studio CodeからWSL 2 (Windows Subsystem for Linux 2)を使う方法を簡単に紹介したもの。ハウツーやチュートリアルほど具体的な内容ではないが、開発者の体感として、Visual Studio CodeとWSL 2がどのような変化をもたらすかが簡潔にまとまっている。以下、このドキュメントをもとに、Visual Studio CodeからWSL 2を使う方法を説明しよう。

WSL1とWSL2、何が違う?

WSL1とWSL2の違いについては、「第27回 ここでおさらい、WSL 1とWSL 2の違いとは?」にすでにまとめてあるので、詳しくはそちらを参照していただければと思う。ただし、「WSL 2 with Visual Studio Code - Visual Studio Code Blog」も同様の話を含んでいるので、主な内容をまとめておこう。

  • WLS 1はWindowsでネイティブに実行される。実装されたシステムコールのみが動作するため、Goデバッガなど実装されていないシステムコールを利用するソフトウェアを使おうとすると問題が発生する。一方、WSL 2はLinuxカーネルを備えた軽量な仮想マシンであり、Linuxのすべてのシステムコールを利用できる。

  • WSL 2は仮想マシンを使っているものの、仮想マシンを使う場合に発生する起動の遅さやWindowsから隔離された環境といった体験をすることはない。WSL 2はWSL 1のようにWindowsにシームレスに統合されている。高速な起動時間を実現しており、消費するリソースも少ない。仮想マシンを管理する必要もない。

  • WSL 2はI/OパフォーマンスがWSL 1よりも向上している。WSL 1と比較してWSL 2のI/Oパフォーマンスは最大で20倍高速になる。モジュールのインストールは高速化されており、リポジトリのクローンも高速に動作する。

1点補うとすれば、WSL 1とWSL 2のプロセッサスピードに言及していない。プロセッサスピードはWSL 1のほうがWSL 2よりも高速に動作すると考えられている。つまり記事は、プロセッサスピードよりもI/Oスピードのほうが体感としてユーザーに与える影響が大きかったことを暗に示唆しており、WSL2のほうが高速に動作すると感じさせていることになる。

WSL 2の使い方

WSL 2はまだWindows 10 Insidersに導入されたベータ機能とされており、Windows 10 Insidersを使っているユーザーしか試すことができない。WindowsでのLinux開発に本気で取り組んでいきたいと考えており、リポジトリ管理やディスク操作に遅さを感じているのであれば、WSL 2は先行して試しておいても損のない機能だと思う。

WSL 2を使うのであれば、「Installation Instructions for WSL 2|Microsoft Docs」の内容に従って機能を有効にしておく必要がある。

次に、当然ながら「Visual Studio Code」と、「Remote - WSLエクステンション」を用意する必要がある。WSL1と使う時と同じように、WS L2を利用する場合も使うエクステンションは「Remote - WSLエクステンション」だ。

  • Visual Studio Code:「Remote - WSLエクステンション」

    Visual Studio Code:「Remote - WSLエクステンション」

続いて、WSLを起動する。「WSL 2 with Visual Studio Code - Visual Studio Code Blog」では、その方法として以下を紹介している。

  • Windows Terminalを起動して新しくWSLタブを作成する
  • インストールしてあるLinuxディストリビューションを起動する
  • PowerShellプロンプトなどでwslコマンドを実行する

WSLはWindows 10と統合されており、wslコマンドを使ってWindows側からLinux側のコマンドが実行できるようになっている。PowerShellプロンプトやコマンドプロンプトであっても、コマンドの前にwslと書いておくとLinux側でそのコマンドを実行して、その結果を利用することができる。仕組みを知らなければ、Windowsに用意されているネイティブなコマンドのように見えるほどだ。しかし、実際にはWSLを使ってLinux側で処理が行われている。

  • wslコマンドを使ってLinux側に処理を振ることが可能

    wslコマンドを使ってLinux側に処理を振ることが可能

最後に、WSL側から「code .」と実行してVisual Studio Codeを起動する。またはWindows側から「wsl code .」と実行してもよい。これでWSL 2に接続した状態のVisual Studio Codeが起動してくる。

  • WSL2に接続した状態のVisual Studio Code - 資料: Microsoft提供

    WSL 2に接続した状態のVisual Studio Code - 資料: Microsoft提供

上記のスクリーンショットは「WSL 2 with Visual Studio Code - Visual Studio Code Blog」で紹介されているものだ。WSL 2で動作しているUbuntu 18.04 LTSに接続していることがわかる。

WSL 2がもたらしたものとは?

「WSL 2 with Visual Studio Code - Visual Studio Code Blog」は、まとめとして次の内容を挙げている。

  • WSL 1はWindows 10とシームレスに統合されているが、仮想マシンと比較してパフォーマンスが低い
  • 仮想マシンはリソースを大量に消費し、断絶された体験を生み出す
  • WSL2は軽量な仮想マシンを使っており、Windows 10とシームレスに統合された体験を提供するハイブリッドアプローチをもたらす

あくまでも、I/Oパフォーマンスに限定された話となるが、WS L2がWSL 1よりも高いパフォーマンスを発揮することは間違いない。これで、たくさんのディスクI/Oを伴う処理もWSL 2でそれほど気にすることなく実行できるようになりそうだ。

WSL 2の特徴は仮想マシン技術を使っているにもかかわらず、リソース制御などはWindows 10が実行しておりユーザーが管理する必要がない点にある。正式機能としてのリリースはまだ先の話となるが、今から登場が楽しみな技術だ。