◆ WSL1 からアップグレード
  ◆ 最初はカーネルコンポーネントの更新が必要
  ◆ 結構時間かかる
◆ wsltty 使ってるとアップデート必要
◆ fish 使ってると Windows の PATH を引き継がないようにしないといけないかも

Windows 10 が 2004 にアップデートされていたので WSL2 を使ってみました
WSL2 を使うには 1 からアップグレードする必要があるので最初は 1 としてこれまで通りの準備が必要です
アップグレードはコマンドで行うのでこれまでは使わなくても良かった wsl コマンドを使います

正式リリースされてわけですし 今後は GUI で切り替えたり 最初から 2 として作るとかの機能も増えてくるかもしれませんね

アップグレード

wsl コマンドに -l -v オプションをつけるとインストール済みの wsl 環境のリストの詳細が見れます

>wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Running 2
fedoraremix Stopped 1

VERSION が WSL1 か WSL2 を表していて 1 のものを 2 にするにはこういうコマンドを使います

wsl --set-version Ubuntu-18.04 2

Ubuntu-18.04 のところに NAME にでてる名前で 2 のところは切り替えるバージョンです
WSL1 としてある程度使っているとサイズも大きめになっていたのか数十分かかりました
特にスペックが低い PC でもなかったのですけどね

最初の場合はカーネルコンポーネントの更新が必要と言われます
ここ (https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel) のページにあるリンクからダウンロードしてインストールします

メッセージはこういうので 出たらインストールしてからリトライします

>wsl --set-version Ubuntu-18.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

注意

コマンドの実行が終わったら これまでどおり WSL2 を実行して起動できるのですが……私の場合は WSL1 を使ってた環境の問題でいくつか動かないものがありました

wsltty

WSL のターミナルには mintty ベースの wsltty を使っていたのですが 起動しません
WSL2 のアップグレード失敗かなとも思ったのですが wsltty を使わずコマンドプロンプトから wsl コマンドを使ったものは動いていました

これは wsltty 側の問題で すでに解決済みなので wsltty を最新版にアップデートすれば動くようになりました

fish

WSL2 化した WSL1 環境はシェルを fish にしていました
シェルは出るのですが エラー表示があり 文字を打つたびにエラーが出てきます

エラー自体は fish を使ってるとたまに目にするもので 文字を打つたびに補完しようとして処理が実行されるものの PATH の中に存在しないものがあると見つからなくてエラーが出るというものです
Windows 側の PATH を引き継いでるのが問題なので引き継がなくすれば解決できます
WSL で Windows 側の PATH はいらないのでデフォルトで引き継がないようにしてくれたほうがいいのですけどね

方法は WSL 内の /etc/wsl.conf に設定を書きます
無いなら作ります
追加するのは Interop セクションに appendWindowsPath を False にする設定です

~> cat /etc/wsl.conf
[Interop]
appendWindowsPath = False

Docker

WSL2 に期待してた機能のひとつですが Docker を簡単に使えます
WSL1 の頃は使い方を見ても Windows 側に Docker をインストールするとか面倒なものでした
WSL 内だけで完結してほしいものです

WSL2 では VM になるのでそういうサービス系が Windows 側は何もせずに使えると聞いていました
早速使ってみたのですが WSL2 の Ubuntu に docker をインストールして起動するだけで使えるようになりました
Windows 側は特に何もしてません

これで VirtualBox はほとんど使うことがなくなりそうです