Windows 10上で1からWSL2の色々な環境をセットアップする方法をまとめます。
セットアップするもの
タイトルの通り、この記事ではほぼ更地のWindows 10から以下の環境を構築していきます。
- Windows 10上のWindows Subsystem for Linux 2 (Ubuntu)環境
- Windows Terminal上でzsh+preztoを使ったPowerline環境
- (おまけ)最後に、brewを使ったrbenvおよびnodenvの環境
筆者の環境
- Microsoft Surface Laptop 3
- Windows 10 Home (Build 19041.1)
この記事で前提として必要なものは、Windows 10(ビルド18917以降)のみです。
WSL2に対応したWindows 10のビルドは記事執筆時点ではWindows Insiderに参加してアップデートする必要があります。
追記:2020年6月のWindows 10 バージョン2004(Build 19041)の正式リリースにより、現在はWindows Insiderへの参加は必要_ありません_。
WSL1 on Windows 10
WSL2を使うためには、WSL1を入れる→それをWSL2にアップグレードするという手順が必要です。
まず、コントロールパネル
→プログラムと機能
を開き、WSLを有効化します。
Windows Subsystem for Linuxの項目にチェックを入れ、システムを再起動するとWSLが有効になります。
Microsoft Storeで**「WSL」**と検索するとWSL用のLinuxディストリビューションがいくつか出てきます。
ここでは、Ubuntuを選択します。インストールして起動すると、OSインストールが始まります(筆者の環境では1分半くらいかかりました)。
インストール完了後、UNIXのユーザー名/パスワードを入力して設定完了です。
最初はこんな感じのターミナル環境になります。
WSL2にする
さて、そろそろWSL1にはお別れを告げて、このディストリビューションをWSL2にアップグレードしましょう。
WSL1をWSL2に変換するために、管理者権限のPowershellを開き、以下を実行します(多少時間がかかるかも?)。
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
完了後、再起動を求められるので再起動し再び管理者権限のPowerShellで次のコマンドを実行し、WSL1のディストリビューションをWSL2に変換する作業を行います。
wsl --set-version Ubuntu 2
筆者の環境では変換に5~6分かかりました。
ここで「WSL 2 を実行するには、カーネル コンポーネントの更新が必要です」と表示される場合は、https://aka.ms/wsl2kernel からWSLカーネルの更新をダウンロードする必要があります。
wsl -l -v
を実行してみて、WSLの「Ubuntu」のVERSIONが2になっていればOKです!
ちなみに、Windows側からWSL2のUbuntu内のファイルは\\wsl$\Ubuntu\
というディレクトリから参照できます。ブラウザでfile://///wsl$/Ubuntu/
にアクセスすることもできると思います。
brewを入れる
様々なパッケージをインストールできるよう、brewを使えるようにします。
ここからは、PowershellではなくUbuntuを触っていきます。WindowsからUbuntuを起動した時のデフォルトのターミナルではなく、Windows Terminalというターミナルが高機能・オシャレで色々カスタマイズもできる(後述)のでそちらを利用するといいと思います。
Windows Terminal
ほかにも、UWPベースのモダンなWindows向けターミナルアプリにFluent Terminalがあります。お好きなものを使ってください。
Fluent Terminal
Windows Terminalなどで Ubuntu
を起動したら、まずaptのupdate/upgradeをしておきます。
sudo apt update
sudo apt upgrade
brewのドキュメントに従って、公式にWSL対応となったLinuxbrewをインストールします。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
sudo apt install build-essential curl file git
gcc
やmake
などのコマンドを使えるようにするため、build-essential
を入れています。
Warning: /home/linuxbrew/.linuxbrew/bin is not in your PATH.
という警告が出ます。
パスを通すため、次のコマンドを順番に実行します。
test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
brew doctor
を実行してみて、問題がなければbrewのインストールは完了です。
zsh on Ubuntu on WSL2 on Windows 10
zshはbrewを使ってインストールできます。
brew install zsh
いろいろな依存パッケージを入れていくので少し時間がかかります。
インストールが完了したら、zshをデフォルトのシェルに変更します。which zsh
を実行すると、zshのパスが分かります。
which zsh | sudo tee -a /etc/shells
chsh -s /home/linuxbrew/.linuxbrew/bin/zsh
etc/shells
にzshのパスを書き込み、chsh
コマンドでデフォルトのシェルを変更します。
Windows Terminalを起動し直すと、zshが立ち上がります(zsh
コマンドを実行してもOKです)。
これでzshのインストールは完了です。最初にzshを立ち上げるとこんな感じで「.zshrc
とかがないみたいだけどどうする?」と聞かれます。
0を選択すると空の(コメントアウトだけの)~/.zshrc
を作ってくれます。1を選ぶと対話式に質問されて設定を完了できます。
が、今回はq
を入力して一度無視します(この次でファイルを作成します)。
preztoを入れる
次にzshをいい感じに設定してくれるpreztoを入れます。これを使うとPowerlineの導入が楽になります。
次のコマンドを実行するとホームディレクトリにpreztoがクローンされます。
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
完了したら、次のコマンドを実行します。
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
これにより、~/.zshrc
や~/.zprofile
などの必要なファイルをいい感じに生成・設定してくれます。
zshを起動し直すと、設定が適用されていて先程の初期設定の質問もされなくなります。
brewのパスを通す
さっき~/.bash_profile
にbrewのパスを通しましたが、zshにはまだ通っていないため、brewが使えません。
echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.zshrc
~/.zshrc
に export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
を追記すればOKです。
Powerline on zsh on Ubuntu on WSL2 on Windows 10
次に、Powerlineを設定します。prompt -p
コマンドを実行すると利用可能なテーマの一覧が表示されるので好きなもの(もちろん、Powerline以外のテーマでも)を選びましょう。
私はagnoster
が好きなので設定しようと思います。しかし、ここでPowerline対応フォントがWindows側に必要になります。
Powerline fonts
まずはお好きなPowerline対応フォントを探してWindowsにインストールします。私のお気に入りはNoto Mono for Powerlineです。
フォントをインストールしたら、ターミナル(ここではWindows Terminal)の設定を開きます。Windows TerminalはCtrl
+,
で設定ファイルのjsonが開きます。任意のエディタで編集します。
**"profiles"という項目にそれぞれのシェルの設定が格納されています。"defaultProfile"**の項目にUbuntuのGUIDを貼り付けると、Windows Terminalの起動時にデフォルトでUbuntuが立ち上がるようになります。
{
// Ubuntu
"guid": <ここにGUID>,
"hidden": false,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"useAcrylic": true,
"acrylicOpacity": 0.75,
"fontFace" : "Noto Mono for Powerline",
"startingDirectory": "//wsl$/Ubuntu/home/",
"padding": "10, 10, 10, 10",
"cursorShape": "filledBox"
}
私の場合は、上のような設定にしました(一部抜粋)。
Windows Terminal、まだベータ版でプロファイルの設定方法がコロコロ変わるみたいなので詳しくは触れませんが、"fontFace"
にPowerline対応フォントを指定してあげればOKです。
ちなみに、**"acrylicOpacity"**はウィンドウ背景の透過の設定です。Microsoftのドキュメントにsettings.jsonの詳しい説明があります。
prompt -s <テーマ名>
でテーマを設定し、設定時に指定されるものを ~/.zshrc
に追記します(以下はagnosterの場合)。
autoload -Uz promptinit
promptinit
prompt agnoster
ターミナルを再起動すれば、晴れてzshでのPowerlineが完成です!
Windows上でこんなに手軽にUbuntuの環境が構築できるのは感動です。
ここまででWSL2上でのzsh/Powerline環境づくりはひとまず完了です。ここから先はおまけです。
pecoを入れる
**peco**を入れるとコマンド履歴のインクリメンタルサーチができたりとても便利になるので紹介します。
brew install peco
インストールが完了したら、~/.zshrc
にpecoの設定を追記します。
function peco-history-selection() {
BUFFER=`history -n 1 | tac | awk '!a[$0]++' | peco`
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N peco-history-selection
bindkey '^R' peco-history-selection
Ctrl
+R
でpecoを起動できるように設定しています。
rbenv on zsh on Ubuntu on WSL2 on Windows 10
次は、Rubyの複数バージョンをインストール・管理できるrbenvを使ってRuby(主にRuby on Rails)の開発環境を作ります。
Rubyなんかやらないという人は読まなくてOKです。
ここでbuild-essential
が必要になります。
brew install rbenv
これも様々な依存パッケージを入れていくので時間がかかると思います。
完了したら、~/.zshrc
に以下の内容を追記します。
eval "$(rbenv init -)"
これでrbenvのインストールは完了です。rbenv install -l
でインストール可能なRubyのバージョン一覧が出てきます。
rbenv install <バージョン>
を実行すればRubyをインストールできると思います。
BUILD FAILED
になった時は、エラーに必要な依存が見つからないとあるので書いてあるコマンドを叩きます。
sudo apt install libssl-dev zlib1g-dev
インストール後、再度rbenv install <バージョン>
を実行でOKです。
また、Bundlerのバージョンが1.x系なので2に上げたい場合はgem install bundler
を実行しましょう。
nodenv on zsh on Ubuntu on WSL2 on Windows 10
次は、node.jsのバージョン環境管理ためのnodenvをインストールします。
同じくnodeは触らないという方は読まなくてよいです。
brew install nodenv
インストールは簡単です。完了したら~/.zshrc
にeval "$(nodenv init -)"
を追記してください。
nodenv install <バージョン>
で任意のバージョンをインストールできます。グローバルに指定する時はnodenv global <バージョン>
です。
brew install yarn
を実行すればyarnをインストールすることができます。
参考
- WSL 2 のインストール | Microsoft Docs - https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install
- 【WSL】LinuxにHomebrewを導入する - Qiita - https://qiita.com/cogome/items/96056450b51fb5b9b782
- Homebrew 1.9.0 でWindows+WSLに対応したので導入してみた - Qiita - https://qiita.com/R-Koubou/items/26498fc0bfa011667961
- WSL2を操作しようとすると「カーネル コンポーネントの更新が必要です」と表示される - Qiita - https://qiita.com/quzq/items/3de595e14426d0352fc4
- WSLでWindowsの中にLinuxの開発環境を作ろう - Qiita - https://qiita.com/h-yoshikawa/items/15653d08f917ad6e39f8
- Linuxbrew のススメ - Qiita - https://qiita.com/thermes/items/926b478ff6e3758ecfea
- Documentation — Homebrew Documentation - https://docs.brew.sh/
- zshの設定:メモ - Qiita - https://qiita.com/rorono/items/9dd56f775078f5bd5815
- zshで初回起動したときに対話的にzshrcを作成する - Qiita - https://qiita.com/mollifier/items/6481de1aa2d1033ad2ec
- preztoでzsh構築した時のメモ - Qiita - https://qiita.com/Angelan1720/items/60431c85592fe90fcdd5
- Windows Terminal Setting ベータ版 - Qiita - https://qiita.com/syui/items/3236495744a16d982464
- Windows Terminal (Preview) メモ - Qiita - https://qiita.com/rubytomato@github/items/e88cab84f36e44797cf2
- peco/peco: Simplistic interactive filtering tool - https://github.com/peco/peco
- pecoを使って端末操作を爆速にする - Qiita - https://qiita.com/reireias/items/fd96d67ccf1fdffb24ed
- powerline/fonts: Patched fonts for Powerline users. - https://github.com/powerline/fonts
- 最新の Ruby と Rails をインストールして Rails プロジェクトを作成する - Qiita - https://qiita.com/ryamakuchi/items/12d794437cde733f8ece