WSL を使いこなす

2020 年 8 月 3 日更新

はじめに

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 を有効にする

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

以下のコマンドを実行することで、まずは WSL の機能を有効にしてから、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