WSL を使いこなす

2022 年 5 月 13 日更新

はじめに

Windows 10 に Windows Subsystem for Linux(WSL) が導入される以前は、ウェブ開発的なことをやろうとすると、どうしても UNIX ベースで動く macOS の方が何かと都合がよかったのですが、コマンドベースとは言えども Linux のユーザーランドがほぼそのまま動いてしまう WSL 環境が、たとえば Ubuntu そのまんまだったりするので、癖がなく、また Visual Studio Code との組み合わせても非常に便利で、また WSL2 からは、これをバックエンドにして Docker Desktop が Home エディションでも動作するようになったために、圧倒的に便利になりました。

Docker を使わなくても、シェルや Perl などがスクリプトが即試せ、ssh や git がコマンドベースで方言なく使える、これだけでも非常に便利で、Windows PC を使っていて、WSL を使わないのはもったいないと言えるほどです。

しかしながら、WSL はデフォルトで有効になっている機能ではなく、使用する Linux ディストリビューションも、自分で選択してインストール、設定する必要があります。

ここでは、その WSL を有効にし、環境を整えるノウハウをまとめます。

GUI で行うこともできるのですが、これから Linux の環境を勉強しようという方のためにも、絵図は少なくなりますが、CUI で有効にする方法としてまとめました。

このため、作業をより効率化するために、Microsoft Store からインストールできる Windows Terminal をインストールして、コマンドラインでの作業を行うことを強くお勧めします。

WSL を有効にする

2022 年 7 月より、WSL 有効化が非常に簡単になりました。

WSLがコマンド一発でインストール可能に/2021年7月Cパッチを適用済みの「Windows 10 バージョン 2004」以降で

Power Shell を管理者として実行してください。先ほどのおすすめした Windows Terminal をインストールした直後であれば、Windows メニューからアイコンを右クリックして [その他] を選択すると、「管理者として実行」メニューが出てきますので、これをクリックして起動します。

ここで

wsl --install

を実行すると、WSL が有効になり、かつディストリビューションとして Ubuntu がインストールされます(その後、PC を再起動してください)。この環境で良ければ、WSL の有効化は終了です。


ただし、上記のコマンドでは WSL 2 がデフォルトになるので、どうしても WSL 1 で運用したい、もしくは上記コマンドが上手くいかない場合は、以下のコマンドを実行して PC を再起動し、WSL が有効化してください。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

ここまで実行すると、あとは Microsoft Store からお好きなディストリビューションをインストールすることで、CUI 環境で Linux のコマンド群が使えるようになります。

ただし、WSL 2 をバックエンドとする Docker Desktop を使いたい場合は、さらに WSL 2 を有効にする必要があります。

また、Docker Desktop など WSL 2 環境を必要とするツールを使わないのであれば、当面、WSL 1 も使えるようですので、問題はないかと思います。

しかし、今後、さまざまな機能追加は WSL 2 中心に行われると思われるので、特に積極的な理由がなければ、WSL 2 を有効にし、これをデフォルトとすることをお勧めします。

WSL 2 を有効にする

次に以下のコマンドを実行すると、「仮想マシンプラットフォーム」の機能が有効になり、PC を再起動すると WSL2 が使える準備が整います。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

さらに以下のコマンドを実行すると、Microsoft Store から Linux ディストリビューションをインストールした際に、デフォルトで WSL 2 形式でインストールされるようになります。

wsl --set-default-version 2

このコマンドを実行したときに以下のようなメッセージが表示されることがあります。

WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

これは、WSL 2 での大きな変更点で、これまで、Windows API に変換しながら実行してきた Linux システムコールが、WSL 2 では、実際に Windows 10 上に実装されたカーネルによって行われるため、この Windows 10 向けにカスタマイズされた Linux カーネルをあらかじめインストールしておく必要があるために表示されます。

将来的には、Windows Update などを通して、Windows 10 向けにカスタマイズされた Linux カーネルが提供されるようになるようですが、2020 年 7 月時点では、手動でインストール必要があります。

とは言っても、特に難しいことはなく、指定された URL のサイトから、自分の環境にあったカーネルのインストーラーをダウンロードしてきて、それを実行推してインストールすれば、再度、WSL 2 形式をデフォルトとするコマンドを実行しても、上記のようなメッセージは表示されなくなります。

Linux ディストリビューションをインストールする

2020 年 7 月現在、Microsoft Store から、無償でインストールできる Linux ディトリビューションはいくつかありますが、お薦めは、やはり Ubuntu です。

くせがないと言うと語弊がありますが、日本語でのドキュメントが多く、かつ、比較的新しいパッケージが提供されるリポジトリも整っています。

Microsoft Store から「 Ubuntu 」というキーワードで検索すると、複数の候補が出てきますが、バージョンにこだわりがないのであれば、バージョン番号が併記されていない Ubuntu をインストールして下さい。その時々で安定している最新バージョンがインストールされます。2020 年 7 月現在は「 Ubuntu 20.04 LTS 」がインストールされます。

Linux ディストリビューションのバージョンを変更する

今回、新規に WSL を有効にして、Linux ディストリビューションもまったく新規にインストールする場合は、以下の作業は必要ありません。インストールした Linux ディストリビューションを Windows のメニューから起動して、初期化(ユーザー名、およびパスワードの設定)を行い、そのまま使用して下さい。

すでに WSL 1 で何らかのディストリビューションを、すでにインストールしており、またその環境を引き続き使用したい場合は、すでに WSL 1 形式でインストールされているものを WSL 2 形式に変換することができます。

まず、以下のコマンドで、現在、インストールされている Linux ディトリビューションの一覧が、VERSION ( WSL 1 形式か 2 形式か)も合わせて取得できます。

wsl --list --verbose

例えば、すでにインストールしている Ubuntu を WSL 2 形式に変換したい場合は、以下のコマンドを実行します。

wsl --set-version Ubuntu 2

変換には時間がかかりますが、これで帰ってくれば完了です。ちなみに、最終の引数を「 1 」に指定すれば、 WSL 1 へ変換する(元に戻す)こともできます。

トラブルシューティング

WSL2 形式に変換できない

最後に、WSL 1 形式から WSL 2 形式へ変換方法を記載しましたが、実は自分で実際にやってみたとき、この変換はうまくいかず

ディストリビューションのインポートが失敗しました。

と言うようなエラーが出て、変換できませんでした。

どうも、Ruby の gem をいくつかインストールした際に作られた、実体のないハードリンクがいくつか(結構膨大な数)張られていて、これのために変換できない旨のエラーが吐かれました。

個々に潰していくほどの時間も手間もかけられなかったこと、大して WSL 1 の環境も整っている段階ではなかったので、結局、Ubuntu を一からインストールしなおしました。

トラブルをシュートしてないですが、こういうことが起こりえるということは、記載だけしておきます。


参考資料

Linux 用 Windows サブシステムの概要 Docker Documentation