WSL で快適な Go 開発環境を作る

個人的な備忘録です。

仕事上 Ubuntu をターゲットに Go のプログラム開発をする必要があるのですが、従前 Windows デスクトップに Hyper-V の Ubuntu で Emacs で開発していたところをVisual Studio Code(vscode) に開発環境を変えたいと考えました。理由は省略。

最初は Ubuntu 上に vscode を入れて X 越し(VcXsrv)で試してみたのですが大画面だと描画速度が遅すぎてストレスたまってダメでした。

仕方がないので Windows 上の vscode で WSL の Ubuntu を併用しつつネイティブ Windows 開発環境を構築することにしました。大分手順が多くなってきたのでメモとして残します。

WSL のセットアップ

公式手順に従えば難しいことはない。 WSL を有効にしたら Microsoft Store で Ubuntu をインストール。

www.microsoft.com

Visual Studio Code のインストール

公式サイトからインストーラーを落として入れるだけ。

code.visualstudio.com

wsltty のインストール

WSL 付属のターミナルは非常にしょぼい。もっとましな端末ソフトウェアが欲しいので、wsltty をインストール。

github.com

Go 環境を構築

Ubuntu 上で Go のコードをビルドする必要があるなら Ubuntu 上でも一通りセットアップが必要。 そこら中に手順はあるので省略。

Go のインストール

Windows 上の Visual Studio Code で Go 開発環境を整えるには、WSL Ubuntu の Go とは別に Windows 版の Go をインストールする必要がある。公式サイトからダウンロードしてきて、C:\Go にインストールする。

Git for Windows のインストール

go get を動作させるには、Windows 用の Git が必要になる。Git for Windows を以下の設定でインストールする。

  • 改行コードの自動変更はしない
  • symlink は利用可能にする

msys2 のインストール

cgo を使う Go パッケージがある場合、Windows 上でも gcc が必要になる。gcc 含めた開発環境の構築には msys2 が便利なので入れる。 64bit 版(msys2-x86_64-YYYYMMDD.exe)を選択すること。

MSYS2 homepage

手順通りにセットアップ・パッケージ更新した後、以下を msys2 端末上で操作する。

$ pacman -S --needed base-devel
$ pacman -S gcc
$ pacman -S libgpgme-devel

GOPATH の設定

Go のソースコードを置く場所(GOPATH)は WSL ではなく Windows に置くようにする。WSL 上のファイルを Windows 側から編集するとおかしくなるそうなので。Windows 上にあるファイルは WSL Ubuntu 側からも安全に編集できる。

PowerShell で以下を実行する。

> mkdir $Home\go
> [System.Environment]::SetEnvironmentVariable("GOPATH", $Home+"\go", "User")
> [System.Environment]::SetEnvironmentVariable("GO111MODULE", "on", "User")
> [System.Environment]::SetEnvironmentVariable("Path", $env:Path+";C:\go\bin;"+$Home+"\go\bin;C:\msys64\usr\bin", "User")

WSL Ubuntu からは Windows に symlink を張っておくと楽。

$ ln -s /mnt/c/Users/xxxx/go $HOME/go

bingo などをインストール

再び PowerShell を立ち上げて以下を実行する。

> [System.Environment]::SetEnvironmentVariable("GO111MODULE", "off", "Process")
> go get golang.org/x/tools/cmd/goimports golang.org/x/lint/golint
> [System.Environment]::SetEnvironmentVariable("GO111MODULE", "on", "Process")

> git clone https://github.com/saibing/bingo go\src\github.com\saibing\bingo
> cd go\src\github.com\saibing\bingo
> go install ./...

フォントのインストール

後述する VSCode の設定で Ricty Diminished を指定するので、インストールする。

  1. 4.1.1 の tar archive をダウンロード
  2. 適当に解凍 (WSL から /mnt/c/Users/xxxx/Download に行って tar xzf ricty_diminished-4.1.1.tar.gz とか)
  3. RictyDiminished-Regular.ttf を右クリックしてインストール

Visual Studio Code の設定

拡張のインストール

今のところ以下をインストールした。

  • Bracket Pair Colorizer 2
  • Code Spell Checker
  • Go (0.8.0)
  • GraphQL for VSCode
  • Markdown All in One
  • sftp
  • systemd-unit-file
  • vscode-icons
  • YAML
  • zenkaku

設定

Go 拡張で bingo を使う設定は以下に書いてある。

Go modules support in Visual Studio Code · Microsoft/vscode-go Wiki · GitHub

その他もろもろ含めた設定は以下の状態:

{
    "editor.fontFamily": "'Ricty Diminished'",
    "editor.fontSize": 16,
    "editor.quickSuggestions": {
        "other": false,
        "comments": false,
        "strings": false
    },
    "editor.renderWhitespace": "all",
    "editor.suggestOnTriggerCharacters": false,
    "files.eol": "\n",
    "files.insertFinalNewline": true,
    "files.trimFinalNewlines": true,
    "go.alternateTools": {
        "go-langserver": "bingo"
    },
    "go.formatTool": "goimports",
    "go.installDependenciesWhenBuilding": false,
    "go.languageServerExperimentalFeatures": {
        "autoComplete": true
    },
    "go.languageServerFlags": [
        "-maxparallelism=4"
    ],
    "go.toolsEnvVars": {
        "GOOS": "linux"
    },
    "go.useLanguageServer": true,
    "markdown.extension.toc.levels": "1..3",
    "workbench.iconTheme": "vscode-icons",
    "[go]": {
        "editor.formatOnSave": true,
        "editor.formatOnSaveTimeout": 100000
    },
    "[markdown]": {
        "editor.formatOnSave": true
    }
}