トップ画像
WSLを入れよう! 入れなければ ならぬ

執筆者: 終に鮭

最終更新: 2022/03/18

どうも。部のPCにWSLを入れて回る職人です。貴様(敬称)のPCにも入れなさい。
一応WSLについて軽く解説しておくと、Windows Subsystem for Linuxの略で、Windows 10以降で利用できるLinuxの仮想環境です。
WSL2はHyper-Vアーキテクチャを利用する仮想マシンプラットフォームの上でWindowsとLinuxをコンテナとして動かす機能です(注)。
つまりLinuxがコンテナとしてWindowsと同じレイヤーで動きます。
ここ がわかりやすいのでもうちょっと詳しく知りたい人は読んでくれ。正しいかは知らん
(注)メインOS(ホストOSと呼んでいいのか分からんので誤魔化してこういう言い回しにした)であるWindowsを、Windowsサンドボックスというコンテナとして隔離して動かすだけであって、Hyper-VのようにWindowsコンテナを複数作る機能はWSLの範疇外のことです。

これは今後もインストールしたり、環境をリセットしたりしたくなったときのための自分用のメモ書きです。

とりあえず入れよう

今はコマンド1つで入れられるようになったんですね。しかもただディストリビューションをインストールするだけじゃなく、

  • WSLと仮想マシンプラットフォームの有効化
  • 最新のWSL用Linuxカーネルのダウンロードとインストール
  • WSL2をデフォルトに設定

までやってくれるらしいです。はえ~(ソース:イカリ おこのみ屋 https://docs.microsoft.com/en-us/windows/wsl/setup/environment

コマンドは、

wsl -l -o

でインストール可能なディストリビューションの一覧を表示、

wsl --install [-d <Distro>]

でディストリビューションを指定してインストールできます(-dオプションを省略するとUbuntu)。
ただし、このインストール方法はWindowsのビルド19041(Win10 2004)以降でのみの対応です。
前はこれに該当するバージョンでもダメだったので古いバージョンにも降りてきたっぽいですね。ありがたい。
それ以前のWindowsを使用していたり、一覧に出ないディストリビューションや、 docker export して吐かせたtarballなどをWSLディストリビューションとして利用したい場合(wsl --import でできます)、DockerバックエンドとしてのみWSL2を利用したい場合などはこれまで通り手動でインストールしてください。

しかしAlpine Linuxがないな。なぜ(普段遣いするPCはUbuntuでもいいけど、たまにしか触らないPCなら軽量な方が……)。

起動

インストールしたディストリビューションを起動します。スタートメニューに追加されてるのでクリックしてください。
暫く待つと Enter new UNIX username: とユーザー名を入力するように言われるので入力します。なんでも良いです(rootとかでなければ)。
パスワードも設定するよう求められるので適当に決めてください(どうせそのローカル環境でしか使わないからpassにしてるけど多分よくない)。入力途中は何も表示されませんがそれであってます。

Bashの設定

Bash以外のシェルを使うのもいいんですが、最初はBashにしとくのが無難かなと思います。デファクトスタンダードなので[独自研究]個人的にはfishというシェルを推していますが、POSIX互換じゃないし万人受けはしないだろうなーと思います。何も設定しなくても便利なのでdockerみたいな使い捨ての環境でも重宝しますよ。abbrとかいう神機能もあるし(Macなどでも標準で採用されていて人気のあるzshにはzsh-abbrという拡張があるようですが)。でも使い捨ての環境でそんなシェル中心に触る作業多くないか。
WSLを使う上ではなんたってシェルが命です。現状、Win10のデフォルトでは多分GUIに対応していませんので。
故に使いやすいように設定していきます。いや私はしませんので貴方で勝手にやってください。

設定するファイル

編集する必要のあるファイルは主に .bashrc です。最初から色々書いてくれてるのでまず

mv .bashrc .bashrc_orig

などとして一度除けます。

echo '. $HOME/.bashrc_orig' > .bashrc

とかなんとか打てば .bashrc を作成して(ディレクトリでなく書き込み権限があればファイルが存在しても上書きしちゃうので順番には気をつけましょう)その中身が

. $HOME/.bashrc_orig

になります。これで .bashrc_orig が読み込まれます。これより後ろの行に自分で設定を追加していきます。

エイリアスの設定

エイリアス(alias)とは別名のことで、コマンドに別名をつけることができます。
これを利用して、最低限必要なエイリアスを .bashrc にvimなりなんなりで書いてください。それが以下です。

alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
alias ls='ls --color=auto'

rm,mv,cpのiオプションは上書きする際に確認をするオプションです。これがないと事故りやすいので必ず書いてください(rmについてはtrash-putなどを使ったほうがいいかもしれませんが)。
lsのcolorオプションは読んで字の如く色をつけるオプションです。ないと見づらいので書いたほうがいいです(同様にgrepも書いたほうがいい)。ただし、lsもgrepもUbuntuなら初期設定の.bashrc(つまり上で移動した.bashrc_orig)に書いてあるので書かなくてもいいです。

Windowsパスの引き継ぎをしないようにする

初期設定だとWSLの側で環境変数PATHを引き継いでしまいます。するとLinuxから直接コマンドで叩くことがないようなものを大量にTab補完時の検索対象にしてしまい、邪魔だし検索時間も長くなります。これをしないように設定しましょう。

sudo tee -a /etc/wsl.conf << END 1>/dev/null
[interop]
appendWindowsPath = false
END

これでよし(普通にVim使えや[解説1])。/etc/wsl.conf に2,3行目の内容が書き込まれたはずで、これでWindowsのパスが含まれないようになりました。

一部だけ叩けるようにしたい

でも一切Windowsの側のアプリケーションを叩かないかといえばそうでない場合があるかもしれません(例えば私はVisual Studio CodeはLinuxからWindowsにインストールしているものを呼び出すことがよくあります)。こうした場合のために、シンボリックリンクを作っておきましょう。
例えば C:\Users\salmon\AppData\Local\Programs\Microsoft VS Code\ にVSCodeがインストールされていたとしましょう。このとき、その中の bin\code をLinux側から叩くことでVSCodeを起動することができます。フルパスで打つのは面倒なので、パスの通った場所にシンボリックリンクを置きます。
例えば

mkdir -p ~/.local/winbin
echo 'export PATH="$PATH:$HOME/.local/winbin"' >> ~/.bashrc
ln -s "/mnt/c/Users/salmon/AppData/Local/Programs/Microsoft VS Code/bin/code" ~/.local/winbin/code

とすれば ~/.local/winbin にパスを通してシンボリックリンクをそこに置くことができます。

その他おすすめのツール等

せっかくLinuxを入れたら入れるべきものはたくさんありますが、ぜひネットで探してみてください。私がおすすめするツールはこの辺です。

  • Vim(Viとの違いは知らんけど設定しなくても色がつくので入れてる)
  • Python3(さらっと書けるから入れてるやつ。シェルだけでは厳しいときに。python3 -c でワンライナーにも組み入れられる。pyenvで入れるべき?知らんがな)
  • Git(言わずとしれたバージョン管理システム。そらいるよ)
  • GitHub CLIgit clone git@github.com:USER/REPO.git って打つの面倒やん。gh repo clone [USER/]REPO で済むんですよ)
  • fish(さっきも言ったけど)
  • jq(CLIで動くJSONプロセッサ。パイプの途中でJSONデータを使いたいときとかcurlと組み合わせて使ったりとかすると便利かも)
  • yq(CLIで動くYAMLプロセッサ。本当は入れてないシリーズその1
  • Rust,Cargo(Rustをしょっちゅう書くわけではないのだが、Rust製のコマンドラインツールは速いものが多い上、cargo install で一発インストールできて重宝している)
  • pnpmNode.jsのパッケージ管理ツールなのだが、これ自体がNode.jsのバージョン管理ツールも兼ねている。.node-version ファイルに対応したら本格的にnvmfnmもいらなくなる)
  • Docker(コンテナ仮想化プラットフォーム。Docker Desktop for Windowsを入れてるが別にコマンドしか叩かないのでLinuxスタンドアロンでいい気がする。GoogleがGoogle Kubernetes EngineなんてIaaSを出してるのでK8sことKubernetesもそのうち使いたい)
  • Pandoc(ドキュメント変換ツール。本当は入れてないシリーズその2。Markdownで書いたテキストをLaTeXに変換したりできる)


さあ、みんなもLinuxで楽しいシェルライフを楽しもうな。ke2daira で遊ぼうや

参考文献

[1] Qiita matarillo「WSL2とHyper-Vの関係」 https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce
[2] Microsoft Docs「Set up a WSL development environment」https://docs.microsoft.com/en-us/windows/wsl/setup/environment
[3] Wikipedia「Wikipedia:独自研究は載せない」https://ja.wikipedia.org/wiki/Wikipedia:独自研究は載せない
[解説1] cat とヒアドキュメントを利用してファイルに書き込む小技はよくありますが、ファイルリダイレクションに関しては sudo で書き込み権限を与えることはできません。そのため、sudo cat ではなく sudo tee を用いてファイルに書き込みを行っています(tee は標準入力で受けたものを標準出力とファイルに吐き出すコマンド)。入力した内容はターミナルに残るので出力は /dev/null に飛ばして消しています。この方法はDebianでのgh のインストール等でも使われていました(入力はヒアドキュメントではなくパイプですが)。

取得に失敗しました

2020年度 入部

Twitter GitHub YouTube