WSL2かHyper-Vか
WindowsPCでLinux環境を用意する場合、2024年現在だと下記の選択肢がある。(これが全てではないが)
- Windows Subsystem for Linux 2 (WSL2)
- Hyper-V (Windows 10/11 Pro Editionのみ)
- サードパーティ仮想化ツール
- VMWare Workstation Pro [1]
- Oracle VM VirtualBox
- デュアルブート, マルチブート
その中でも、Windowsで標準サポートしているのとしてWSL2とHyper-Vの2つがあり、筆者の過去の利用経験から使い分けを考えてみたい。
WSL2
結論、特にこだわりがなければ、WSL2を選んでおけば問題ない。
WSL1の頃はなんちゃってLinuxだったが、WSL2はハイパーバイザー上で動くように改良され、きちんとしたLinuxシステムが使えるようになっている。
特長としては、
- Windows 10/11 Home Editionでも使える
- セットアップがコマンド一発のため非常に簡単
- Windowsとの連携が充実している
- Windows側からLinuxファイルシステムには
\\wsl$\{distribution}
でアクセス可能 - Linux側からWindowsファイルシステムには
/mnt/{drive}
でアクセス可能 - Linux側で起動したサーバーにWindowsから
localhost
でアクセス可能
- Windows側からLinuxファイルシステムには
- Docker Desktop for Windowsとの親和性が高い
- Visual Studio Codeとの親和性も高い
がある。
また、WSLgによるGUIサポートもあるため、GUIアプリもある程度動作させることができるようになっている。
Hyper-V
しかし、筆者は現在Hyper-Vを使用している。WSL2があるにも関わらずHyper-Vを使用しているのは、WSL2で対応できない部分が出てきたためである。
GUIネイティブアプリの開発が難しい
Hyper-Vを使用している一番の理由はこちらである。
上述の通り、WSL2にもWSLgによるGUIサポートがあるが、GUIネイティブアプリの開発においてはまだまだ実用的とは言えない状況である。
- Slint製アプリがクラッシュする
- Tauri製アプリを起動してもウィンドウを移動、リサイズできない
GUIネイティブアプリを開発する機会はそう多くはないと思うが、WSL2+WSLgではハマりどころが多く、特有の難しさを感じている。
JetBrains製IDEがまだまだ使いづらい
以前に比べるとJetBrains製IDEのWSL2への対応は進んできているが、それでもまだまだ使いづらい点が残っている。
- いくつかの外部プログラムを使うサードパーティプラグインがWSL上では動作しない
- Slint Plugin
- Elm Plugin
- フロントエンド開発でpnpmを使うとインストールされたパッケージをIDEが認識しない
サードパーティプラグインが動かないのは、Linuxのバイナリを指定してもLinux上ではなくWindows上でWindowsバイナリとして実行してしまうことが原因となっている。
(WSL対応できているプラグインでは、Linux上にあるプロジェクトではLinuxバイナリとして動作させるような対応ができているため、この問題は起こらない)
解決方法としては
- 別途Windows用のバイナリを用意する
- WSLgを使用してLinux上からIDEを起動する
- JetBrains Gatewayを使用してフロントエンドをWindows上で、バックエンドをLinux上で動かす
があるが、IDEへの文字入力に難があったり、応答が遅いなどの問題があり、やはり実用的ではない。
そのため、素直にHyper-V上のLinuxからIDEを起動することにした。
マイナーなLinuxディストリビューションを選びづらい
2024年現在、WSL2が標準でサポートしているLinuxディストリビューションは下記の通り。
- Debian系/Ubuntu系
- Ubuntu
- Debian
- Kali Linux
- Red Hat系
- Oracle Linux
- SUSE Linux系
- OpenSUSE
- SUSE Linux
それ以外のLinuxディストリビューションも使うことはできるが、コマンド一発という訳には行かず、インストールのハードルは比較的高めである。
また、WSL2はLinuxを専用の軽量ユーティリティー仮想マシン上で動かしており、ハードウェアに起因してうまく動作しないときのトラブルシュートが難しい。
筆者はArch Linux系を使いたく、ハードウェアも比較的柔軟に構成できるため、Hyper-Vにした。
まとめ
基本的にはWSL2を選んでおけば良いと思うが、下記のケースに当てはまる場合はHyper-Vを検討しても良いかもしれない。
- Windows 10/11 Proを使用している
- GUIネイティブアプリの開発をしたい
- JetBrains製IDEをストレスなく使いたい
- マイナーなLinuxディストリビューションを使いたい
-
VMWare Workstation Proは個人利用であれば無料で使えるようになったため、以前より導入しやすくなっている。 ↩︎
Discussion