LoginSignup
56
57

More than 3 years have passed since last update.

[WSL2] Win10でzsh+preztoを使ってPowerline環境を作る

Last updated at Posted at 2020-01-18

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を有効化します。

{363F858E-FD96-49AA-A324-1405CE5F7221}.png

Windows Subsystem for Linuxの項目にチェックを入れ、システムを再起動するとWSLが有効になります。

Microsoft Storeで「WSL」と検索するとWSL用のLinuxディストリビューションがいくつか出てきます。

ここでは、Ubuntuを選択します。インストールして起動すると、OSインストールが始まります(筆者の環境では1分半くらいかかりました)。

インストール完了後、UNIXのユーザー名/パスワードを入力して設定完了です。

コメント 2020-01-11 221309.png

最初はこんな感じのターミナル環境になります。

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

gccmakeなどのコマンドを使えるようにするため、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とかがないみたいだけどどうする?」と聞かれます。

コメント 2020-01-13 005213.png

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

~/.zshrcexport 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が立ち上がるようになります。

(一例)profiles.json
{
    // 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の場合)。

~/.zshrc
autoload -Uz promptinit
promptinit
prompt agnoster

ターミナルを再起動すれば、晴れてzshでのPowerlineが完成です!

コメント 2020-01-13 014939.png

Windows上でこんなに手軽にUbuntuの環境が構築できるのは感動です。

ここまででWSL2上でのzsh/Powerline環境づくりはひとまず完了です。ここから先はおまけです。

pecoを入れる

pecoを入れるとコマンド履歴のインクリメンタルサーチができたりとても便利になるので紹介します。

brew install peco

インストールが完了したら、~/.zshrcにpecoの設定を追記します。

~/.zshrc
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に以下の内容を追記します。

~/.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

インストールは簡単です。完了したら~/.zshrceval "$(nodenv init -)"を追記してください。

nodenv install <バージョン>で任意のバージョンをインストールできます。グローバルに指定する時はnodenv global <バージョン>です。

brew install yarnを実行すればyarnをインストールすることができます。

参考

56
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
57