WSL2 + Docker + VS Code + Go 環境構築

はじめに

WSL2 + Docker + VS Code + Go の環境を構築したのでメモを残しておきます。

前提

私の環境は以下の通りになります。
Docker Desktopについてはインストール済みなので、これについてはインストール手順の記載は省略します。

  • Windows10 Home
  • Docker Desktop インストール済み


WSL2 設定手順

下記のサイトに従い、手動インストールを行っていきます。
docs.microsoft.com

LinuxWindows サブシステムを有効にする

Windows PowerShell を管理者権限で実行した後、下記のコマンドを実行します。

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


コマンドが正常終了すれば以下のメッセージが表示されます。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1379

イメージのバージョン: 10.0.18363.1440

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。


WSL2の実行に関する要件を確認する

WSL2 を実行するには下記の要件を満たしている必要があります。

  • x64 システムの場合:バージョン 1903 以降、ビルド 18362 以上。
  • ARM64 システムの場合:バージョン 2004 以降、ビルド 19041 以上。
  • 18362 より前のビルドは WSL 2 をサポートしていません。 Windows 更新アシスタントを使用して、お使いのバージョンの Windows を更新します。


バージョンとビルド番号を確認するために、下記のように「winver」を実行してください。

f:id:huji_mori:20210705150903p:plain
winverを実行


「winver」を実行すると、下記のようにバージョンとビルド番号が表示されます。

f:id:huji_mori:20210705151034p:plain
バージョン情報確認

私の環境ではバージョンとビルド番号は以下のようになっており、WSL2の要件を満たしていることになります。

バージョン1909(OSビルド 18363.1440)


仮想マシンの機能を有効にする

Windows PowerShell 上で下記のコマンドを実行します。

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


コマンドが正常終了すれば以下のメッセージが表示されます。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1379

イメージのバージョン: 10.0.18363.1440

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。


Linux カーネル更新プログラムパッケージをダウンロードする

下記のサイトからLinux カーネル更新プログラムパッケージをダウンロードします。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

ダウンロードした更新プログラムパッケージを実行し、以下の画面が表示されればインストール成功です。

f:id:huji_mori:20210705152135p:plain
Linuxカーネル更新プログラムパッケージをインストール


WSL2 を既定のバージョンとして設定する

下記コマンドを実行して、WSL2 を既定のバージョンとして設定します。

wsl --set-default-version 2


正常に設定されると以下のメッセージが出力されます。

WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください


Linuxディストリビューションをインストールする

下記のサイトにアクセスし、Linuxディストリビューションをインストールします。
今回はUbuntu 20.04 LTSをインストールしました。
https://aka.ms/wslstore


インストール後、下記画面からLinuxディストリビューションを起動します。

f:id:huji_mori:20210705153758p:plain
Linuxディストリビューションをインストール後


インストール後、ユーザー名とパスワードを設定します。

f:id:huji_mori:20210705154221p:plain
wslを起動


Docker Desktop 設定

設定画面を開き、「Use the WSL 2 based engine (Windows Home can only run the WSL 2 backend)」にチェックが付いていることを確認します。
Windows Homeを使用している場合、デフォルトでチェックが入っています。

f:id:huji_mori:20210705154407p:plain
設定


Go 設定手順

下記のサイトに従い、手動インストールを行っていきます。
golang.org

Go のインストーラーをダウンロードする

下記コマンドを実行して、Go のインストーラーをダウンロードします。

wget https://golang.org/dl/go1.16.5.linux-amd64.tar.gz


Go をインストールする

下記コマンドを実行して、Go をインストールします。
※必要に応じて「sudo」を付与して、コマンドを実行してください。

rm -r/f /usr/local/go 
tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz


下記コマンドを実行して、環境変数を設定します。

export PATH=$PATH:/usr/local/go/bin


下記コマンドを実行して、Go がインストールされていることを確認します。

go version


VS Code設定手順

下記のサイトを参考にして、VS Codeの設定を行います。
qiita.com

VS Code をインストールする

WSL2 上で下記コマンドを実行してVS Code をインストール&実行する。

code .


Go のプロジェクトフォルダを作成する

下記コマンドを実行して、Go のプロジェクトフォルダを「go-sample」という名前で作成します。

cd ~
mkdir go-sample


Dockerfile と devcontainer.json を作成する

下記コマンドを実行して、フォルダを「.devcontainer」という名前で、またファイルを「Dockerfile」と「devcontainer.json」という名前で作成します。

cd ~/go-sample/
mkdir .devcontainer
touch ~/go-sample/.devcontainer/Dockerfile
touch ~/go-sample/.devcontainer/devcontainer.json

下記のサイトを参考にして、Dockerfile と devcontainer.jsonに設定を記述します。
qiita.com

Remote Development をインストールする

Remote Development をインストールします。

f:id:huji_mori:20210705172132p:plain
Remote Developmentをインストール

Docker コンテナに接続する

画面左下の「WSL: Ubuntu-20.04」をクリックし、「Remote-Containers: Reopen in Container」を選択する。
コンテナへの接続が成功すると、画面左下に「Dev Container: go-sample」と表示される。

f:id:huji_mori:20210705172835p:plain
Docker コンテナに接続

main.goを作成する

go-sample 配下にmain.go を作成して、下記のソースを記述する。

package main

import "fmt"

func main() {
	fmt.Println("Hello, world")
}

Ctrl + F5 でmain.go を実行し、正常終了すれば下記のメッセージが表示されます。

Hello, world