WSL2 + Docker + VSCode の環境構築をしてみた

# どういう記事か
WSL2 等の詳細については他の方々にお任せするとして、ひとまずインストール等で詰まったこと等をまとめてみました。

私は手順をちゃんと確認せずに困ったりしてたので、公式の手順の後に私が困ったこととかをいくつか書いておきます。（皆さんはドキュメントをちゃんと読むことをお勧めします）

なお、細かい部分等はそれぞれ英語の Docs にはなりますが、やはり公式のを見ていただいた方が良いかと思います。参考資料が目的な方は一番下の参考資料の項目だけご確認いただけたらと存じます。

# 前提条件
Windows のビルドのバージョンを確認する必要があります。

windows + R でコマンドから実行を開いて以下のコマンドを入力します。

```
winver
```
以下のように表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/ff137c6e-8e69-ac4c-0e48-6934935d827b.png)

このバージョンの値が 1903 以上であることを確認してください。（後ほどまたこのナンバーは関係してきます。）

# WSL2 の準備
英語のリンクを以下に用意しましたが、日本語に直したりはしないでください。
というのも、現状(2020/9/23 現在)、英語のドキュメントが先に更新されているので、少し日本語のものと内容が違います。たぶん最近のアップデートがあってそれをまだ日本語では更新していないのかなと思います（2020/9/15 に英語版がアップデートされてます。）

https://docs.microsoft.com/en-us/windows/wsl/install-win10

Power Shell を管理者権限で開いて以下のコマンドを実行します。
以下のコマンドで WSL が有効になります。

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
（もしかしたら先にここで再起動が必要かもです）
次に "仮想マシン プラットフォーム" オプション機能を有効にします。

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

ここで一旦 PC を再起動します。

以下のリンクより msi ファイルを落として実行して Linux のカーネルを更新します。
（ここが日本語の docs だとまだ新しいのになっていなかったのでちょい詰まりました）

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

最後に WSL の規定のバージョンを WSL2 にしておきます。

```powershell
wsl --set-default-version 2
```

これで以降に追加される WSL は WSL2 になるのかもです。


# Ubuntu の準備
Microsoft Store で Ubuntu を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/7301dd7a-5b2f-f176-6be0-98fe160e59c2.png)

左の 3 つほどから選択でよいかなと思います。
ここでは Ubuntu-20.04 を使ってます。特に理由はありません。

# VS Code の準備
拡張機能をインストールしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/f45b7117-8a30-d357-60e6-6bb7fe717dc0.png)

ご希望の linux (Microsoft Store でダウンロードしたもの)を右クリックして「connect WSL」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/32160efe-e8a1-e5c5-3268-cda18970eece.png)

なんかいけたっぽいです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/c5040ce5-c4bf-c4f9-4242-c8354100045d.png)

以降は WSL 側での操作とかはここからしたりしました。


# Docker の準備
以下に沿って進めていきます。
https://docs.docker.com/docker-for-windows/wsl/

最初と同様に winver コマンドを実行して、それぞれのバージョンにあった Docker Desktop をインストールします。
- 1903 以上 : Edge 版
- 2004 以上 : Stable 版

ダウンロード サイト
https://hub.docker.com/editions/community/docker-ce-desktop-windows/

設定から General のページへ移動。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/65e1122f-53ee-6f74-1b07-7e0496ca987c.png)

Use WSL 2 based engine にチェックを入れて Apply & Restart します。

WSL integration とやらの設定をします。
Docker Desktop の設定から以下のような項目をON にして Apply & Restart。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/b409372b-89c0-2586-f926-519857a62d6e.png)

VSCode で繋いでみたら無事に docker コマンドが打てた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/9372f272-2157-b9cf-8813-326bd85fe705.png)

# 詰まったポイント
以前に少しだけ触ってたりでちゃんと完全に公式の順番通りにしなかった結果招いたエラー達(笑)
## wsl コマンドが通らない
そもそも wsl コマンドが通らない時がありました。
特に直す際に環境変数の path とかはいじってません。再起動しなおしてみたり、コマンドを再度入れなおしてみたりをしてたらコマンド通るようになりました。なので、どこかの手順が抜けてただけかもですね。

## WSL のバージョン
wsl(1) になっていて docker のコマンドが打てない等がありました。（手順をアレしてたせい）
大元のマシンで管理者権限で Powershell を開いて以下のコマンドを打つと


```
wsl -l -v
```

こんな感じでバージョンが分かりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248829/6171a768-57bc-69aa-3a61-0489b3d8e0a6.png)

もしも狙いの WSL が ver1 だった場合は以下のコマンドで ver を上げましょう。

```
wsl --set-version Ubuntu-20.04 2
```

上記のコマンドでは Ubuntu-20.04 のバージョンを WSL2 にしています（上記の画像参照）

# 詰まった時に確認したポイント
順番通りにやるのはやっぱり（ちゃんと読まない私には）難しいところがあります。
そうなった時にどうしたかをちょろっと書いてみました。

## どこ由来のエラー（？）かを当たりをつける
今回は VSCode, Docker Desktop, WSL2 という要素が絡んできてます。
なので、エラーが起きた際に、どれから確認するかが大事でした。
恐らくなんらかのエラーが出ていると思うので、慌てずエラー メッセージを確認しましょう。
（今回は具体的にはエラーメッセから wsl のバージョンが違う等を確認してみることに繋がりました）

## 公式のドキュメント（できるだけ英語）を信じる
結局、こういう構築関連で公式を参考にしてエラーが出るパターンってやっぱり自分の手順ミスが多いんだなって感じました。なので、どこか抜けてないかエラーメッセージから確認してみる、手順の最初から追いなおしてみる等がなんやかんや有効だなって感じました。

それでも情報がない時には別途エラーメッセージで Web 検索にかけてみるのが良いかなと感じました。

# 参考資料
- WSL2 :https://docs.microsoft.com/en-us/windows/wsl/install-win10
    - インストール時のトラシュー：https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#troubleshooting-installation
- Docker Desktop : https://docs.docker.com/docker-for-windows/wsl/