【2020年版】Tips:Macと近しい環境をWindows10で安直に実現する(wsl+vscode+homebrew)

# 三行で。
Macと近しい環境をWindows10に安直に実現するには、2020年時点では、以下の手順がおすすめと考える。

- wsl/wsl2を導入し、お好きなlinuxをwindows storeから導入する(以下では、ubuntu)。
- vscodeに「Remote Development」を導入し、お好きなlinuxをディフォルトのシェルとする。
- homebrewをlinuxに導入し、Macと同様にツール管理できるようにする。

以下、若干手抜きしているけれども、少なくともwsl2+ubuntuの場合は全手順を書いたと思うので、自宅でMac・職場でwindows(またはその逆)など、windowsに不慣れな方向けの記事だとしておく。あとついでに噂のvlangも入れている。

回線速度が遅くなければ、この手順は、３０分から１時間で終えられるはず。
導入後の様子(左がvlang、右がgolang。vscode内で編集から実行まで完結できる。):
![vgo.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16455/a4420dde-71f6-529f-b5ca-45322670095f.png)

## より入門的な記事の紹介
wslとwsl2で手順は同じ。wslの導入からvscodeのインストールまでについては以下の記事をご参考のこと（remote WSLの扱いのみ、私の場合は少し異なる）。
[【Remote - WSL】VScodeの新機能でWSL上にローカル開発環境を構築する](
https://qiita.com/_masa_u/items/d3c1fa7898b0783bc3ed#fn1)　　★１

その他、最近はwsl入門記事、vscode入門記事が多いので、適宜参考のこと。

## 本手法の良い点
**利点１　windowsとmacで、vscode経由で概ね同じショートカットが使える**
windowsの場合、`ctrl+,`で設定を開く、`ctrl+@`でシェルを開く。Macの場合はCommandキーですね。

**利点２　windows OSに特殊な設定をせず環境が汚れにくい**
共にwindowsから見て１アプリにすぎない、wsl向けlinuxアプリとvscodeを使うため、仮にlinux環境が汚れた場合でも、単にアプリをインストールし直すだけで良い。そのため、windows10でいろいろなアプリをインストールしまくっているとパフォーマンスが低下するといったこと（=>私は経験済）がほぼくなると期待する。

なお、私、最近wsl2を使い始めたところ:

```
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1
  Debian          Running         2
```

# ubuntu前提の導入手順

## ① linuxアプリ(ubuntu)の導入
省略(上の★１の記事をご参考ください)

私の場合、以下のバージョンのubuntu　:

```
/$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
```
なお、homebrewのためにシェルの設定（`~/.bash*`）を多少なりともいじくることになるので、以下の作業はlinuxの導入直後に行うのがお勧めだ。初めに必要なアップデートを行っておこう。
ubuntuでは:

```
sudo apt update
sudo apt upgrade
```

## ②　vscodeのディフォルトシェルをlinuxに設定
### a.Remote Development（[リンク](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) ）をvscodeに導入
### b.「設定」を開き、settings.jsonを編集する。
「設定」のショートカット : ctrl+,
デフォルトの起動するターミナルをdebianにする

```settings.json
{
//お好みでフォント等の設定
    "editor.fontSize": 18,
    "editor.tabSize": 2,
    "editor.fontFamily": "'Fira Code' ",
    "workbench.statusBar.visible": false,
    "editor.minimap.enabled": false,
//自動保存の仕方を設定
        "files.autoSave": "onFocusChange",
// デフォルトの起動するターミナルをubuntuにする
    "terminal.integrated.shell.windows": "ubuntu.exe",
    "terminal.integrated.shellArgs.windows": ["run", "/bin/bash"],

//その他、拡張機能向け設定
  //例　ファイルをセーブするごとにコードを整えてくれる
    "editor.formatOnSave": false,
  //例　ペーストしたときにコードを整えてくれる
    "editor.formatOnPaste": true,
}
```
ここで、vscodeを再起動等する。

## ③　homebrewを①のlinuxにインストール
- homebrewの歴史を知りたい人は、[Linuxbrew のススメ](https://qiita.com/thermes/items/926b478ff6e3758ecfea)がお勧め。

### a.vscodeを立ち上げシェルに入り、homebrewを導入。
linuxのシェルは、`ctrl+@`で立ち上げる。curl経由で、homebrewを取得。

homebrewの起動準備

```
sudo apt install linuxbrew-wrapper build-essential
```
※(debian等の場合、現時点では、linuxbrew-wrapperがないので各自対応のこと。)

homebrew杯かのようにcurl経由で入れる。
※他OSでcurlがない人はあらかじめ`sudo apt install curl `等すること(委細は公式サイトを参照のこと)。

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```

### b.`brew doctor`を参考に、不足点を補う
Macとlinux間の差異を吸収して、各種ツールの導入を可能とするhomebrewには、やはり、環境ごとの設定が付きまとう。環境の不備は、`brew doctor`すると指摘してくれる。便利。
wsl2上のubuntuでlinuxbrew-wrapperを入れた後に`brew doctor`してみたところ、以下を実行せよとのことなので素直に従い、シェルを再起動。

```
echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.bash_profile
```
なお、初期設定のwsl上のubuntuでは、brewで入れたツールにパスを通すには、都度`source ~/.bash_profile`でアクセスする必要がある。

brewを普段使いするには、.bashrcの方に上の設定を追記するなどにしておこう。

```
echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.bashrc
```

### c.brewでツールを入れる

Go言語を入れる場合には、`brew install go`など。
パスが通っていれば、ツールにアクセスできる。例:

```
$ go version
go version go1.14.1 linux/amd64
```


# 終わりに
## apt経由で入れたパッケージを確認する
詳しくは、[aptコマンドチートシート](https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007)を参考に。

ここでは、`sudo dpkg -l`コマンドのみを紹介。
ずらーっと出てくるので、grepで絞り込む

```
~$ sudo dpkg -l | grep gcc
ii  gcc                            4:7.4.0-1ubuntu2.3                  amd64        GNU C compiler
ii  gcc-7                          7.5.0-3ubuntu1~18.04                amd64        GNU C compiler
ii  gcc-7-base:amd64               7.5.0-3ubuntu1~18.04                amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-8-base:amd64               8.4.0-1ubuntu1~18.04                amd64        GCC, the GNU Compiler Collection (base package)
ii  libgcc-7-dev:amd64             7.5.0-3ubuntu1~18.04                amd64        GCC support library (development files)
ii  libgcc1:amd64                  1:8.4.0-1ubuntu1~18.04              amd64        GCC support library
~$ sudo dpkg -l | grep make
ii  make                           4.1-9.1ubuntu1                      amd64        utility for directing compilation
ii  rake                           12.3.1-1ubuntu0.1                   all          ruby make-like utility
ii  xxd                            2:8.0.1453-1ubuntu1.3               amd64        tool to make (or reverse) a hex dump
```
お、gccとmakeがすでに入っているからvlangも入るね（=>これが書きたかった）。

vlangをついでにインストールしてみる(趣味)。

```
git clone https://github.com/vlang/v.git
cd v/
make
```

## brew経由で入れたパッケージを確認する。

# 留意点
同様にcurl経由で入れるツールとの整合性確保には留意しよう。

私の場合、JVM言語の管理ツール[sdkman](https://sdkman.io/install)も使うのだが、homebrew->sdkmanの順に入れると問題は起きない。

確認:

```
 tail ~/.bashrc 
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/home/k/.sdkman"
[[ -s "/home/k/.sdkman/bin/sdkman-init.sh" ]] && source "/home/k/.sdkman/bin/sdkman-init.sh"
```

### おまけ
（お好みで）ホームフォルダを変更しておくのも良いかな、思ったのだが、、以下のやり方ではgitやsdkmanに影響が出る模様(sudoが要求される)。こちら良い方法をそのうち模索。

------たぶんダメなやり方-------
cドライブ直下のubuntu_homeディレクトリをubuntuのホームとする場合、初めにディレクトリを作成し.bashrcなどをコピーしておく。

```
mkdir /mnt/c/ubuntu_home
sudo cp -r ~/. /mnt/c/ubuntu_home

```
/etc/passwdにあるユーザー名(YourUserName)のホームフォルダを以下のように書き換える(`sudo vi /etc/passwd`など)。

`YourUserName:x:1000:1000:,,,:/mnt/c/ubuntu_home:/bin/bash`

再起動後、`cd`して、ホームフォルダが変更されていることを確認しておく。

なお、変更後も、もとの/home/YourUserNameは存在する。
紛らわしい場合、/home/YourUserName配下のファイルを`rm -f /home/YourUserName/*`で消してしまっでも良い。