執筆者: 終に鮭
最終更新: 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つで入れられるようになったんですね。しかもただディストリビューションをインストールするだけじゃなく、
までやってくれるらしいです。はえ~(ソース:イカリ おこのみ屋 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にしとくのが無難かなと思います。デファクトスタンダードなので[独自研究]。個人的には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)に書いてあるので書かなくてもいいです。
初期設定だと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を入れたら入れるべきものはたくさんありますが、ぜひネットで探してみてください。私がおすすめするツールはこの辺です。
python3 -c
でワンライナーにも組み入れられる。pyenvで入れるべき?知らんがな)git clone git@github.com:USER/REPO.git
って打つの面倒やん。gh repo clone [USER/]REPO
で済むんですよ)cargo install
で一発インストールできて重宝している).node-version
ファイルに対応したら本格的にnvmもfnmもいらなくなる)
さあ、みんなも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 のインストール等でも使われていました(入力はヒアドキュメントではなくパイプですが)。
この人が書いた記事