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 を一からインストールしなおしました。
トラブルをシュートしてないですが、こういうことが起こりえるということは、記載だけしておきます。