Visual Studioエンジニアリングチームは7月1日(米国時間)、公式ブログにおいて、WSL 2 (Windows Subsystem for Linux 2)上のDockerコンテナをVisual Studio Code(以下、VS Code)から使う方法を解説するエントリ「Using Remote Containers in WSL 2」を公開した。

WSL 2には完全なLinuxのカーネルが含まれるため、従来のWSL(便宜上、WSL 1と表記する)よりも格段に高いパフォーマンスでDockerエンジンを実行することができる。VS Codeのリモート拡張を利用すれば、開発対象のリソースをWSL 2のDockerコンテナで開き、それをVS Codeから直接編集するといった作業が可能となる。

  • VS CodeでDockerコンテナ内のソースを直接編集できる

    VS CodeでDockerコンテナ内のソースを直接編集できる

WSL 1では構造上Dockerエンジンを直接実行できないため、Dockerを使いたい場合はHyper-VとLinuxKitによる代替手段を利用する必要があり、パフォーマンスに限界があった。

その点、WSL 2はLinuxの全てのシステムコールを完全に備えているため、Dockerエンジンを直接実行することが可能となった。さらに2020年5月にリリースされたDocker Desktopの最新版では、WSL 2の動的メモリ割当を利用できるようになったため、格段に高いパフォーマンスでコンテナを構築できるようになっているという。

一方でVS Codeには、リモートマシン上でソフトウェア開発が行える拡張機能「Remote Development」が提供されている。Remote Developmentには、WSLでの開発をサポートする「Remote - WSL」や「Remote - Containers」なども用意されている。いずれもMicrosoftが公式に提供しているものだ。

  • Remote - WSL: WSL用のリモート開発拡張

    Remote - WSL: WSL用のリモート開発拡張

  • Remote - Container: コンテナ用のリモート開発拡張

    Remote - Container: コンテナ用のリモート開発拡張

これらを組み合わせることによって、開発対象のリソースをDockerコンテナで開き、それをVS Codeで編集するといった作業がシームレスに行えるようになる。Dockerコンテナ内のリソースにはWindowsとWSL 2のどちらからもアクセスできるが、WSL 2のファイルシステムを使ったほうがパフォーマンス大幅に向上するため、VSチームのブログではWSL 2の利用を勧めている。

  • Remote - Containerを利用してWebアプリを実行した様子

    Remote - Containerを利用してWebアプリを実行した様子

アプリケーションの開発環境にコンテナを導入することは、異なるマシン間でもまったく同じ構成の環境を簡単に構築し、開発を行えるというメリットがある。VS Codeのリモート拡張機能を組み合わせれば、開発対象のリソースがコンテナ内にあったとしても、ローカルで開発するのと同様の感覚で作業が行える。WSL 2が利用できるユーザーは、上記のエントリを参考にしてぜひ試してみるといいだろう。