Windowsでもbrewを使いたい!WSLのインストールとホームディレクトリの変更、そしてbrewが使えるようになるまで


WSL(Windows Subsystem for Linux)とは

WSL(Windows Subsystem for Linux)とは、Windows上でLinuxライクにコマンドを実行できる機能です。

Windowsでもbashを使いたい!
そういった人にオススメです。

なお、brewを使うためにはこのWSLの導入が必須なため、もし「WSLを使いたくない」という人がいれば、chocolateyなどの別のパッケージマネージャを検討ください。

環境

WSLのインストール

もともと、コマンドからの手段として用意されていたlxrunを利用しようとしている方は、1803以降で廃止されているためご注意ください。

WSLを有効にする

Windowsの左下にある検索窓で、「Windowsの機能」と入力し、検索結果に出てくる「Windowsの機能の有効化または無効化」を選択してください。


 
 
「Windows Subsystem for Linux」を探し、チェックボックスにチェックを入れてください。
インストールが開始され、終了すると再起動を促されるため、再起動してください。

ストアからUbuntuをインストールする

再起動後、Windowsの左下にある検索窓で、「ストア」と入力し、検索結果に出てくる「Microsoft Store」を選択してください。


 
 
Microsoft Storeの右上にある検索窓で、「ubuntu」と検索してください。
すると、3つのubuntuが出てきます。

この違いは以下の通りです。

名前 説明
Ubuntu 最新のUbuntu LTSで、新しいバージョンが出るたびに更新される
Ubuntu 18.04 LTS バージョン18.04のUbuntu LTS
Ubuntu 16.04 LTS バージョン16.04のUbuntu LTS

今回はUbuntu 18.04 LTSを選択します。


 
 
「入手」を押して、Ubuntuをインストールしてください。
なお、サインインが求められても、キャンセルすればインストールが始まります。

Ubuntuを起動する

インストールが完了したら、ストアかWindowsの検索窓からUbuntuを起動してください。
起動後、自動でセットアップが開始され、終了するとユーザー名とパスワードの入力が求められます。

好きなユーザー名とパスワードを入力してください。
(今後のUbuntuでのログインに使います)

ユーザーの作成ができない時

adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX[_SYSTEM] configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.

と言われ、ユーザー名の入力ができない時があります。
これは、使える文字が^[a-z][-a-z0-9_]*\$となっており、大文字やドットが使えないからになります。

もし、どうしても使えない文字を使いたい場合、一旦Ubuntuを閉じて、再度起動してください。

すると、コマンドが打てるようになっているので、以下のコマンドを入力ください。

adduser --force-badname <お好きなユーザー名>

これで、好みのユーザー名で作成できます。

なお、この後にEnter the new value, or press ENTER for the defaultと言われ、個人情報を入力するか尋ねられますが、全てEnterキーで大丈夫です。
(後でchfnコマンドにて変更可能です)

WSLの設定

adduser --force-badnameした人はしておきたいこと

ユーザー名で使えない文字があり、adduser --force-badnameをした人のみ対象です。
(通常通りユーザー作成ができた方は、すでに適応されている設定です)

対象でない方は、「sudo権限の付与」「デフォルトユーザーの変更」を飛ばしてください。

sudo権限の付与

Ubuntuを起動して、以下のコマンドを入力してください。

gpasswd -a <作成したユーザー名> sudo

なお、これはrootユーザー(Ubuntuが起動した直後)で実行してください。

デフォルトユーザーの変更

特に何もしていないと、デフォルトのユーザーがrootになっています。
これは面倒なので、デフォルトユーザーを変更しましょう。

検索窓で、「コマンド」などを打ってコマンドプロンプトを開いてください。
その後、以下のコマンドを入力してください。

ubuntu1804 config --default-user <作成したユーザー名>

なお、ubuntu1804の部分は、ストアでインストール時に入れたUbuntuのものとなります。
(Ubuntuを入れればubuntu、Ubuntu 1604を入れればubuntu1604

ホームディレクトリの変更

若干好みの話となりますが...ホームディレクトリを変更したい人向けです。

Ubuntuを一旦閉じて再度起動してください。
(すでに作成したユーザーにログインしている方は再度起動は必要ありません)

その後、以下のコマンドを実行してください。

sudo vim /etc/passwd

すると、vimエディタが開くので、以下と同じ表記の行を見つけ、ホームディレクトリにしたいパスに変更してください。

<作成したユーザー名>:x:1000:1000:,,,:/home/<作成したユーザー名>:/bin/bash
↓ 変更
<作成したユーザー名>:x:1000:1000:,,,:<ホームディレクトリにしたいパス>:/bin/bash

例.
hoge:x:1000:1000:,,,:/mnt/c/users/hoge:/bin/bash

これで、Ubuntuを再起動することでホームディレクトリが変更されています。

ファイルシステムの設定

初期設定のままだと、/mnt/c以下でファイルを作成すると777(どの権限でも操作可能)になってしまいます。

これをUbuntuと同じように変更します。
以下のコマンドを実行してください。

sudo vim /etc/wsl.conf

すると、vimエディタが開くので、以下の記述を追加してください。

[automount]
options = "metadata,umask=22,fmask=11"

これで、ディレクトリが755、ファイルが644で作成されるようになります。

brewのインストール

基本的には、ドキュメント通りにやれば大丈夫です。

まず、以下のコマンドを実行します。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

こちらが完了したのち、次のコマンドを実行します。

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が依存するパッケージ群をインストールします。
今回はUbuntuなので、以下を実行してください。

sudo apt-get install build-essential curl file git

これでbrewが使えるようになりました。

まとめ

WSLを導入することで、自身のdotfilesリポジトリの環境を使い回せるため、メリットが大きかったです。

ただ、いいターミナルが見つからないのが悩みの種です...
もともとHyperを使っていたのですが、少々不具合が見られたので、現在は検証も含めWindows Terminal (Preview)を使っています。

何かいいターミナルがありましたら、お教えいただけると幸いです🙇‍♂️