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

# WSL（Windows Subsystem for Linux）とは

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

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

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

# 環境

- Windows 10 バージョン1903
  - 最初はバージョン1803でやってましたが、いくつか不具合が見られたのでバージョンアップ
  - https://github.com/Microsoft/WSL/issues/3158 など

# WSLのインストール

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

## WSLを有効にする

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

![function.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/8fa07fd5-5764-7607-f070-a35d8c023e2c.png)
　
　
「Windows Subsystem for Linux」を探し、チェックボックスにチェックを入れてください。
インストールが開始され、終了すると再起動を促されるため、再起動してください。

![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/d630bb9c-2c5b-f767-efc6-b1c1711d416a.png)

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

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

![store.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/40d746de-de3d-f8b7-9e52-4074d180c2e3.png)
　
　
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を選択します。

![search.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/35e9617b-1b1e-c261-b3a6-1b30ef73b9f3.png)
　
　
「入手」を押して、Ubuntuをインストールしてください。
なお、サインインが求められても、キャンセルすればインストールが始まります。

![ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/87378701-7674-3fcd-56d4-656c5273fdc8.png)

## Ubuntuを起動する

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

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

![setup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253997/0acd92bf-2ea6-d6d6-da61-dd26f1e53a3c.png)

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

```
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のインストール

基本的には、[ドキュメント](https://docs.brew.sh/Homebrew-on-Linux)通りにやれば大丈夫です。

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

```
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)を使っています。

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