【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も入れている。

回線速度が遅くなければ、この手順は、30分から1時間で終えられるはず。
導入後の様子(左がvlang、右がgolang。vscode内で編集から実行まで完結できる。):

より入門的な記事の紹介

wslとwsl2で手順は同じ。wslの導入からvscodeのインストールまでについては以下の記事をご参考のこと(remote WSLの扱いのみ、私の場合は少し異なる)。
【Remote - WSL】VScodeの新機能でWSL上にローカル開発環境を構築する  ★1

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

本手法の良い点

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

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

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

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

ubuntu前提の導入手順

① linuxアプリ(ubuntu)の導入

省略(上の★1の記事をご参考ください)

私の場合、以下のバージョンの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(リンク )を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にインストール

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コマンドチートシートを参考に。

ここでは、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も使うのだが、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/*で消してしまっでも良い。