VSCodeとDockerを連携する

最終更新:2020/05/01


1. VSCodeとDockerの連携

VSCodeとDockerを連携させることで、Dockerコンテナ内の環境をVSCodeで利用することができます。

このことにより、

  • 開発者全員の開発環境を完全に同じにできる
  • localマシンのOSに依存しない開発環境を構築できる
  • ライブラリインストールによってlocalマシンの環境に影響が出てしまうことを防ぐ

というメリットを享受することができます。

2. Remote - Containers

VSCodeに Remote - Containers 拡張をインストールします。

VSCodeの準備は以上で完了です。

3. .devcontainerフォルダ作成

.devcontainerフォルダを作成します。

mkdir .devcontainer

このフォルダの中に

  • devcontainer.json
  • docker-compose.extend.yml

を作成します。

touch .devcontainer/devcontainer.json touch .devcontainer/docker-compose.extend.yml

devcontainer.jsonはVSCodeが起動するコンテナの開発環境Dev Containerについての設定ファイルです。

以下のようにdevcontainer.jsonの設定をします。

{ "name": "golang-marsa", "dockerComposeFile": [ "../docker-compose.yml" ], "service": "golang-marsa", "workspaceFolder": "/go/src/github.com/java-lang-programming/marsa", "extensions": [ "ms-vscode.go" ], "settings": { "go.gopath": "/go", "go.inferGopath": true, "go.useLanguageServer": true, "go.formatTool": "goimports", "go.lintFlags": ["--enable-all", "--new"], }, "shutdownAction": "stopCompose" }

settingsでgoの設定をします。

開発環境のDockerにはGoの開発に関するライブラリがもっとたくさんあるのですが、エディターを軽量に動作させるために最小限の設定にします。

続いて

docker-compose.extend.yml

の設定をします。

リモート開発用に追加したい設定は、既存のdocker-compose.ymlには手を加えないでこちらに記述します。

version: "3.7" services: web: environment: - HOME=/go/src volumes: - ~/.gitconfig:/go/src/github.com/java-lang-programming/.gitconfig - ~/.ssh:/go/src/github.com/java-lang-programming/.ssh

これで.devcontainerの設定は完了です。

4. .vscodeフォルダ作成

.vscodeフォルダを作成します。

mkdir .vscode

settings.jsonを作成します。

touch .vscode/settings.json

settings.jsonに設定を記載します。

{ "go.toolsEnvVars": {"GO111MODULE": "on"}, "go.installDependenciesWhenBuilding": false, "go.formatTool": "goimports", "go.useLanguageServer": true, "go.lintFlags": ["--enable-all", "--new"], "[go]": { "editor.snippetSuggestions": "none", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true, } }, "go.inferGopath": false }

これで設定は完了です。

あとはフォルダをVScodeにドラッグして、

Reopne in container

を選択すればVSCodeでdockerコンテナ環境の開発をおこなうことができます。