そろそろ、その時はやって来たかな?
時は来た!


これまでメインのプログラミング開発環境を Windows10 の WSL(Windows Subsystem for Linux)Ubuntu 18.04 にしていました。WSL2 のことはもちろん知っていましたが、メイン機のスペックが特別高いわけでもなく(メモリ 8GB)、WSL で困らないであろう範囲のプログラミングをメインにしていました(例えばコンテナ環境が必要になった場合は別環境に用意して、そこにアクセスする、など)。

一方で WSL2 をサポートする開発周辺環境も整ってきました。Docker Desktop for Windows もリリースされ、もう mac と比較しても「アプリ開発環境は Windows 機 + WSL2 でいいんじゃないか?」と思える状況になってきました。スペック面での不安がないわけじゃないけど、環境的な意味では「時は来た」かな、と。

というわけで、自分の WSL 環境を WSL2 環境へ移行することにしました。以下その手順を備忘録として残しておきます。


【Hyper-V を有効化】
まず Windows の Hyper-V を有効化する必要があります。既に Hyper-V が有効になっている環境であればこの手順は不要ですが、今回はここも含めて紹介します。

その手順で利用するため Windows で PowerShell を起動します。この際に管理者権限で起動しておくようにします(バージョン確認だけなら管理者権限は不要ですが、WSL を WSL2 に変更する際に管理者権限が必要になります)。

そして以下のコマンドを実行します:
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

そしてこのコマンドを実行後に再起動をかけると Hyper-V が有効化されます。ここから以下の作業は再起動後に行ってください。


(↓2020/11/22 追記)
【Windows ハイパーバイザープラットフォームの有効化】
VirtualBox など、他のハイパーバイザー環境との共存のための機能を有効にします。

Windowsの機能の有効化または無効化から Windows ハイパーバイザープラットフォームを選択して、チェックを入れて OK をクリックします:
2020112201
(↑2020/11/22 追記)


【WSL のバージョンを確認】
ここから下の PowerShell での操作については(管理者権限の)コマンドプロンプトでも構いません。

Hyper-V を有効にして再起動後、まず現在利用中の WSL のバージョン(1のはず)を確認しておきます。PowerShell で以下のコマンドを実行します:
> wsl --list --verbose

すると以下のような結果になり、WSL(1) を使っていることが確認できます:
2020112101


【WSL の Linux カーネルを更新】
この WSL を WSL2 に変更するのですが、その前に WSL の Linux カーネルを最新版に更新しておきます。

まず以下へアクセスします:
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel


「最新の WSL2 Linux カーネル更新プログラムパッケージをダウンロード」と書かれたリンクから更新パッケージをダウンロードします:
2020112102


ダウンロード後に実行して、WSL の Linux カーネルを更新します:
2020112103


【WSL を WSL2 に変更】
ここまでの準備ができていれば WSL を WSL2 に変更する準備が整いました。管理者権限の PowerShell で以下を実行して、まずは WSL のデフォルトバージョンを 2 に変更します(一瞬で終わります):
> wsl --set-default-version 2

続けて以下のコマンドも実行し、現在 WSL で動作中の Ubuntu 18.04 を WSL2 に変更します(少し時間がかかります):
> wsl --set-version Ubuntu-18.04 2

2020112101


これで WSL2 になった、はず。。


【WSL のバージョンを再確認】
最後に WSL のバージョンが2になっていることを確認します。再度先程と同じコマンドを実行し、バージョンが更新されていることを確認します:
> wsl --list --verbose

2020112102


WSL1 から WSL2 への環境移行に成功しました。