WindowsでLinuxを使いたいけど、仮想環境を立てるのはめんどくさい。WindowsからDockerが使いたい。諸事情でWindowsしか使わせてもらえないけど、どうしてもLinuxが使いたい。そんな方にWSL2がオススメです。WSL2を使えばWindowsからUbuntu等のLinuxディストリビューションを利用することができます。
WSLとは
WSLとはWindows Subsystem for Linuxの略でWindows10からLinuxを利用するためのソフトウェアです。Windowsはこれまでcmd.exeで提供するコマンドプロンプトやPowerShellなどでCLIを提供しようと試みていましたが、ついにLinuxそのものをWindowsで起動できるようにしました。
WSLは仮想環境とは違い、Linuxカーネルをロードするのではなく、Windowsプロセス上で動くサブシステムとして起動されます。このことで仮想環境を立ち上げる際に問題となっていたメモリやCPUなどのリソースの消費が軽減されます。
WSLの仕組みは便利だったのですが、Linuxコマンドを変換するLXCoreの動作が不安定なために、dockerなどのカーネルを共有するようなアプリケーションは上手く動作しませんでした。
そこでWSL2ではLinuxディストリビューションを搭載することでこの問題が解決されました。WSL2ではOSの差異をほぼ意識することなくLinuxコマンドを利用できるようになります。またWSL2になったことで実行速度もWSLから改善されています。これからWSLを利用するなら、WSL2がオススメです。
WSL2のインストール
WSL2をインストールする流れは以下の通りです。
- Windows Insider Programに参加する
- WSLを有効にする
- Windows StoreからWSLをインストールする
- WSLをWSL2に変換する
もしWSL2ではなく、WSLを利用したい場合は2,3のみを実行してください。
Windows Insider Programに参加する
WSL2はまだ一般向けのアップデートに含まれていないので利用するにはWindows Insider Programに登録する必要があります。
設定→更新とセキュリティ→Windows Insider Programから「開始する」を選択してください。
ダイアログが表示されるので「登録」を選択します。
初めての場合は「新規登録」を選択します。
同意にチェックを入れて送信を選択します。

Windows Insider Programに参加するアカウントを追加します。

参加するInsiderはファストに設定します。
再起動します。
再起動が終了すれば無事、Insider Programに参加した状態になります。再起動終了後に、Windows Updateから更新プログラムをダウンロードしてください。
更新が完了したら、次はオプションの更新プログラムをインストールしてください。
スタートメニューから「winver」を実行して、OSビルドが18917以降になっていればWSL2を利用できます。
WSLを有効にする
WSLを利用するにはWSLを有効にする必要があります。まずはPowerShellを管理者として実行します。
以下のコマンドを実行します。実行後、再起動の必要があるばあいはYを入力して再起動します。
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Windows StoreからWSLをインストールする
WSLをインストールしたことが無ければWindows StoreからWSLをインストールします。

ここではUbuntuを選択します。
WSLをWSL2に変換する
この状態で利用できるのはまだWSLです。PowerShellから利用するWSLをWSL2にする必要があります。まずはPowerShellを開いて下記コマンドでWSLのバージョンを確認してください。
wsl -l -v NAME STATE VERSION * Ubuntu Stopped 1
何も設定をしていなければ、上のようにVERSIONが1となっています。ここで下記コマンドを実行してWSLのバージョンを2にします。
wsl --set-version Ubuntu 2
上のコマンドの実行が確認できたら、下記コマンドを実行して、VERSIONが2になっていることを確認してください。
wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2
下記コマンドでデフォルトのWSLバージョンを2に設定します。
wsl --set-default-version 2
ここまでの設定が上手くいっていれば、スタートメニューからUbuntuを起動できます。初回起動時はユーザー名とパスワードを設定する必要があります。あとは通常通りUbuntuとして使用できます。
試しにneofetchしてみました。
sudo apt install neofetch neofetch

WSL2の設定
特別、設定しなければならないことはありませんが、やっておくと便利に使える設定があるのでご紹介します。
WSL2でのsshの設定
WSL2でsshを使うには以下の手順を行います。
- WSL側でsshの設定
- Windows側でFirewallの設定
- Windows側でポートフォワーディングの設定
WSL側でsshの設定
まずはWSL側でopenssh-serverをインストールしてsshを使えるようにします。
sudo apt install openssh-server
次に/etc/ssh/sshd_config/
のPasswordAuthenticationをyesに変更します。
sudo vi /etc/ssh/sshd_config
次のコマンドでssh-keyを作成します。
sudo ssh-keygen -A
最後に下記コマンドでsshをスタートさせます。
sudo service ssh start
statusで正常に起動されているか確認できます。
sudo service ssh status
正常に起動していればsshd is running
と表示されます。
Windows側でFirewallの設定
スタートメニューに「Windows Firewall」と入力して、「ファイアウォールとネットワーク保護」を起動します。
「詳細設定」を押して設定画面を開きます。
左側の「受信の規則」をクリックして、右側の「新しい規則」をクリックします。これで「新規の受信の規則ウィザード」が表示されます。
規則の種類を「ポート」に設定します。
プロトコルおよびポートでプロトコルを「TCP」、ポートを「特定のローカルポート」の22に設定します。
操作で「接続を許可する」を設定します。
プロファイルでは自分が接続する際に利用するネットワークを選択します。ここでは「プライベート」のみを選択しました。利用するネットワークに応じて変更してください。
名前を設定したら、「完了」を押して設定を終了します。
WSL1の場合はこの設定だけで他のホストから接続することができます。WSL2ではWindows上にLinuxカーネルが乗っているため、IPアドレス自体が双方で異なります。次のポートフォワーディングの設定でWindowsに送られた情報をWSL2に流します。
Windows側でポートフォワーディングの設定
ポートフォワーディングするためにWSL側のIPアドレスを特定しておきます。WSLで次のコマンドを実行して、IPアドレスを確認してください。
ifconfig | grep 'inet ' | awk '{print $2}'
次にWindows側で管理者権限でPowershellを起動し、下記コマンドでポートフォワーディングの設定を行います。connectaddrにWSL側のIPアドレスを入力してください。
netsh interface portproxy add v4tov4 listenport=22 connectaddr=xxx.xx.xxx.xxx connectport=22
正常に設定されたかどうか下記コマンドで確認します。
netsh interface portproxy show v4tov4
上手くいっていれば、次のように表示されます。
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
* 22 xxx.xx.xxx.xxx 22
以上でsshの設定は終了です。実際にssh接続するにはWindows側のIPアドレスに対して、sshを行います。WSL2側のIPアドレスではないので注意してください。
ssh yyy.yy.yyy.yyy
あとは通常通り、ユーザー名とパスワードを入力してログインできます。
クリップボードの設定
WSLではclip.exeを使うことでWindowsのクリップボードにコピーができるのですが、このclip.exeがコピーする際に勝手に改行を入れてしまうため、非常に使いづらいです。そこでwin32yank.exeを使うことをオススメします。
まずhttps://github.com/equalsraf/win32yank/releasesからwin32yank.exeをダウンロードします。
ダウンロードしたzipファイルを解凍し、WSLの~/.local/bin/
に置きます。これでコマンドでコピーと貼り付けができます。
# コピー echo "hoge" | win32yank.exe -i # 貼り付け win32yank.exe -o
NeoVim向けには次のように設定するのがオススメです。
" WSL用のクリップボード設定 if system('uname -a | grep microsoft') != "" let g:clipboard = { \ 'name': 'wslClipboard', \ 'copy': { \ '+': 'win32yank.exe -i', \ '*': 'win32yank.exe -i', \ }, \ 'paste': { \ '+': 'win32yank.exe -o', \ '*': 'win32yank.exe -o', \ }, \ 'cache_enabled': 1, \ } endif
tmuxでは次のようにします。
if-shell 'test "$(uname -a | grep microsoft)" != ""' bind-key -t vi-copy Enter copy-pipe "cat | win32yank.exe -i"
WSL オススメ Terminal
WSLのデフォルトの端末はtmuxやVimなどの表示が崩れてしまいます。
そこでWSL向けのTerminalであるwslttyの使用をお勧めします。wslttyならtmuxやVimの表示が崩れることなく、快適に使用できます。
こちらのリンクから"wsltty-x.x.x-install.exe"をダウンロードして、インストールすればwslttyを使用できます。
WSL よくあるエラー
WSLを利用する際によくあるエラーについてまとめました。
apt install ができない。
apt install時に“Release file is not valid yet. Updates for this repository will not be applied.”と表示されてしまい、apt installが上手くできないときの対処方です。
WSLのアンインストール
スタートメニューからUbuntuを右クリックして「アンインストール」を選択します。
参考
https://github.com/microsoft/WSL
https://docs.microsoft.com/en-us/windows/wsl/release-notes
https://docs.microsoft.com/en-us/windows/wsl/wsl2-install
https://scotch.io/bar-talk/trying-the-new-wsl-2-its-fast-windows-subsystem-for-linux
https://www.buildinsider.net/enterprise/wsl/01#whatiswsl
https://qiita.com/ezmscrap/items/30eaf9531e240c992cf1
https://qiita.com/yabeenico/items/15532c703974dc40a7f5
https://wand-ta.hatenablog.com/entry/2019/11/10/095539
https://blog.himanoa.net/entries/20/
https://github.com/equalsraf/win32yank/releases
WindowsからUbuntuを使うにはWSL2ですが、UbuntuからWindowsのアプリを実行するにはwineがオススメです。詳しくはこちら。
コメント