📦
VSCode devcontainerでローカルを汚さずに、快適なGo言語の開発環境を整える
前提条件
本記事は以下の方向けの記事となります。
各ソフトのインストール方法などは別途記事を参考にしていただくようお願いいたします
- エディターにVSCodeを利用している
- Docker, docker-compose をインストールしている
- VSCodeの拡張機能や、各種ツール・ライブラリのバージョンの違いなどにうんざりしている
- Dockerで動かしている環境のデバックに苦労した経験がある
概要
VSCodeの Remote Containers
ものすごく便利ですね。
こちらを活用することで
- ローカル環境を汚さずに快適な開発環境を整えることができる
- 保存時のコード自動フォーマット
- インテリセンス
- 自動補完
- デバック環境
- チームメンバーがVSCodeを活用している場合、チーム全体で同じ環境を共有できる
- ライブラリのバージョン違い等で悩む必要がなくなる
と非常に重宝しそうです!!
マイクロソフト公式で各言語の設定ファイルのサンプルが公開されています
今回サクッと試せる Dev Containerのテンプレートを作ってみましたので、公開いたします。
設定ファィルについて
以下のようなディレクトリ構造になっています。
.
|-- .devcontainer
|-- devcontainer.json
|-- Dockerfile
|-- README.md
|-- cmd
| `-- main.go
`-- docker-compose.yml
Dockerfile
及び docker-compose.yml
は以下のように記載しています。
FROM golang:1.15.6
RUN apt update \
&& apt install -y vim # 不要な場合は削除してください
ENV GO111MODULE on
WORKDIR /go/src/work
# install go tools(自動補完等に必要なツールをコンテナにインストール)
RUN go get github.com/uudashr/gopkgs/v2/cmd/gopkgs \
github.com/ramya-rao-a/go-outline \
github.com/nsf/gocode \
github.com/acroca/go-symbols \
github.com/fatih/gomodifytags \
github.com/josharian/impl \
github.com/haya14busa/goplay/cmd/goplay \
github.com/go-delve/delve/cmd/dlv \
golang.org/x/lint/golint \
golang.org/x/tools/gopls
version: '3'
services:
app:
build: .
tty: true
stdin_open: true
command: /bin/bash
volumes:
- .:/go/src/work
次に devcontainer.json
は以下のように記載しています。
{
"name": "Go",
"dockerComposeFile": ["../docker-compose.yml"],
"service": "app" ,
"workspaceFolder": "/go/src/work",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"go.toolsManagement.checkForUpdates": "off",
"go.gopath": "/go",
"go.gocodeAutoBuild": true,
"go.formatTool": "gofmt",
"go.useLanguageServer": true,
"editor.formatOnSave": false,
"[go]": {
"editor.formatOnSave": true
}
},
"extensions": [
"golang.go"
],
}
ここで注意が必要であるのが、
build
の設定項目を記載してしまうと、 DockerComposeFile
が無視されてしまい、docker-compose.yml
が無視されてしまいます
// この設定がある場合 "DockerComposeFile" の設定値が無視されてしまう
"build": {
"dockerfile": "Dockerfile",
"args": {
// Update the VARIANT arg to pick a version of Go: 1, 1.15, 1.14
"VARIANT": "1",
// Options
"INSTALL_NODE": "false",
"NODE_VERSION": "lts/*"
}
},
使い方について
実際の利用の仕方については、こちらのリポジトリのReadMeに記載しています。
また、上記設定ファイルの記載についても変更になっている可能性がありますので、うまく動作しない場合はこちらをご参照いただければと思います。
Discussion