1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【モダンWeb開発 シリーズ 第1回】Docker × VS Code Dev ContainersでGo開発環境を構築する

1
Last updated at Posted at 2026-09-27

はじめに

Windows で Go を開発する場合、Windows に Go SDKを直接インストールする方法があります。
この記事では、Go の実行環境を Windows 側ではなく Dockerコンテナ内に構築し、VS Code の Dev Containersから接続して開発する方法を紹介します。

Docker Desktop の仕組みや WSL2 との関係、Docker Desktopのインストール方法については、以下の記事で解説しています。
Docker Desktop for Windows入門:仕組みと構築方法

本記事では、Docker Desktop がインストール済みで、Windows 上から Dockerコンテナを実行できることを前提とします。

この記事で分かること

  • VS Code の Dev Containers の役割
  • Docker コンテナを Go の開発環境として利用する方法
  • Windows に Go SDK を直接インストールせずに Go を実行する方法
  • go run、gofmt、go test、go build の実行方法
  • gopls を利用した VS Code の Go 開発環境

全体構造

Docker × VS Code Dev ContainersでGo開発環境.png

ソースコードは VS Code から編集しますが、Goの実行・ビルド・テストなどは Docker の Linux コンテナ内で行います。

Dev Containers とは

Dev Containers は、Docker コンテナを VS Codeの開発環境として利用するための仕組みです。
通常の Docker利用では、作成したアプリケーションをコンテナで実行する使い方が中心ですが、Dev Containers では、コンテナそのものを開発環境として利用します。

[VS Code]
    ↓
[Dev Containers]
    ↓
[Docker Desktop]
    ↓
[Development Container]
    ├─ 開発言語
    ├─ コンパイラ
    ├─ Language Server
    ├─ テストツール
    └─ その他の開発ツール

今回の場合は、この Development Container に Go の開発環境を用意します。

前提条件

  • Windows 11
  • Docker Desktop が起動していること
  • Visual Studio Code
  • PowerShell

Docker の動作確認

PowerShell または VS Code のターミナルで以下を実行します。

docker --version

正常に動作していれば、Docker のバージョンが表示されます。

Visual Studio Code の準備

VS Code が未インストールの場合は、公式サイトからインストールします。

PowerShell から以下を実行して確認します。

code --version

バージョン情報が表示されれば利用できます。

Dev Containers のインストール

VS Code を起動します。

左側の「Extensions(拡張機能)」を開き、以下を検索します。

Dev Containers

Microsoft が提供している Dev Containers をインストールします。

image.png

構成は以下になります。

[VS Code]
    ↓
[Dev Containers]
    ↓
[Docker Desktop]
    ↓
[Go Development Container]

Go プロジェクトの作成

今回は以下のフォルダにプロジェクトを作成します。

C:\work\go-docker

PowerShell で以下を実行します。

cd C:\work
mkdir go-docker
cd go-docker

VS Code で開きます。

code .

.devcontainer フォルダの作成

プロジェクト直下に .devcontainer フォルダを作成します。

その中に devcontainer.json を作成します。

go-docker
│
└─ .devcontainer
    └─ devcontainer.json

devcontainer.json の作成

devcontainer.json に以下を記述します。

{
    "name": "Go Development",
    "image": "mcr.microsoft.com/devcontainers/go:2-1.26-trixie",

    "customizations": {
        "vscode": {
            "extensions": [
                "golang.go"
            ]
        }
    },

    "remoteUser": "vscode"
}

image

以下では、Go 開発用の Dev Container イメージを指定しています。

"image": "mcr.microsoft.com/devcontainers/go:1-1.25-bookworm"

このイメージを利用することで、Windows 側へ Go SDKを直接インストールせず、コンテナ側に Go の開発環境を用意できます。

※利用可能な Go / Dev Container
イメージのバージョンは更新されるため、実際に構築する際は利用可能なバージョンを確認してください。

extensions

以下では VS Code の Go 拡張機能を指定しています。

"extensions": [
    "golang.go"
]

Dev Container を起動すると、Go 拡張機能をコンテナ側の VS Code環境で利用できます。

Dev Containerの起動

ここまでの手順で作成した devcontainer.json を使用して、Go開発コンテナを起動します。

devcontainer.jsonを作成済みの場合

devcontainer.json を保存したら、VS Codeで次のショートカットキーを押してコマンドパレットを開きます。

Ctrl + Shift + P

次のコマンドを検索します。

Dev Containers: Reopen in Container

日本語表示の場合は、次の項目を選択します。

開発コンテナー: コンテナーで再度開く

image.png

VS Codeが .devcontainer/devcontainer.json を読み込み、Docker Desktopを利用してGo開発コンテナを作成・起動します。

初回起動時はDockerイメージのダウンロードが行われるため、完了まで時間がかかる場合があります。


devcontainer.jsonを作成していない場合

devcontainer.json を自分で作成していない場合は、Dev Containersが用意しているテンプレートから作成することもできます。

コマンドパレットからDev Containersの構成追加を実行し、次の画面で 「ワークスペースに構成を追加する」 を選択します。

これにより、現在のプロジェクト内に .devcontainer/devcontainer.json を作成できます。

image.png

続いて、「すべてのテンプレートを表示…」 を選択します。

image.png

テンプレートの一覧から、Go用のDev Containerを選択します。

Go

「Go & PostgreSQL」はPostgreSQLも含めた開発環境を構築するための別のテンプレートです。今回はGo単体の環境を使用します。

image.png

Go devcontainers ← ★これを選択
Develop Go based applications...

次に、使用するGoのバージョンとLinuxディストリビューションを選択します。

image.png

テンプレートや利用可能なGoのバージョン、ベースとなるLinuxディストリビューションは更新されることがあります。そのため、画面に表示される選択肢は本記事の画像と異なる場合があります。

続いて、追加機能(Features)を選択する画面が表示されます。

今回の go-docker プロジェクトでは追加機能を使用しないため、何もチェックせず「OK」を選択します。

image.png

追加ファイルを選択する画面が表示された場合も、今回は何も選択せず 「OK」を選択します。

表示されている .github/dependabot.yml などは、今回のGo開発環境の動作確認には必要ありません。

image.png

設定が完了すると、プロジェクト内に次のファイルが作成されます。

go-docker
│
└─ .devcontainer
    └─ devcontainer.json

その後、VS Codeがウィンドウを開き直し、Docker Desktopを利用してGo開発コンテナを作成・起動します。

最終的には、どちらの方法でも次の構成になります。

.devcontainer/devcontainer.json
        ↓
Dev Containers
        ↓
Docker Desktop
        ↓
Go用Dockerイメージ
        ↓
Go開発コンテナ
        ↓
VS Codeがコンテナへ接続

Go の動作確認

Dev Container が起動したら、VS Code から新しいターミナルを開きます。

以下を実行します。

go version

Goのバージョンが表示されれば、開発コンテナ内でGoを実行できています。

image.png

linux/amd64 と表示されていることから、Windows ではなく Docker の Linux
コンテナ内で Go が動作していることが確認できます。
初回は Dockerイメージの取得などが行われるため、時間がかかる場合があります。

起動フロー

Windows 11上のVS CodeからDev Containersを実行すると、Docker DesktopがGo開発用のLinuxコンテナを起動し、VS Codeがそのコンテナに接続します。

VS Code(Windows 11)
    ↓ .devcontainer/devcontainer.jsonを読み込む
Dev Containers
    ↓
Docker Desktop
    ↓ Go開発用イメージを取得・コンテナを作成
Go開発コンテナ(Linux)
    ↑
VS Codeが接続

開発コンテナからWindows環境に戻す

Goの開発コンテナで作業している状態から、通常のWindows環境に戻してみます。
VS Code左下の 「開発コンテナー: Go @ desktop-linux」をクリックします。

image.png

表示されたメニューから、「リモート接続を終了する」 を選択します。

開発コンテナー: Go @ desktop-linux
        ↓
リモート接続を終了する
        ↓
Windows側のVS Codeに戻る

なお、DockerDesktopを終了したり、Dockerの設定を変更したりする必要はありません。
VSCodeから開発コンテナへの接続を終了しただけなので、必要になれば再びGoの開発コンテナへ接続できます。

再度Goの開発コンテナに切り替える

続いて、Windows環境から再びGoの開発コンテナへ切り替えてみます。

1. Windows側でgo-dockerを開く

VS Codeで、今回作成したGoプロジェクトのルートフォルダを開きます。

C:\work\go-docker

VS Codeのエクスプローラーでは、次のように表示されます。

go-docker
│
└─ .devcontainer
    └─ devcontainer.json

2. コマンドパレットを開く

次のショートカットキーを押します。

Ctrl + Shift + P

検索欄に次のように入力します。

Dev Containers

表示されたコマンドから、

Dev Containers: Reopen in Container

を選択します。

VS Codeが、

C:\work\go-docker\.devcontainer\devcontainer.json

を読み込み、Docker Desktopを利用してGo開発コンテナを起動します。

流れは次のようになります。

Windows側のVS Code
        ↓
C:\work\go-docker を開く
        ↓
Ctrl + Shift + P
        ↓
「Dev Containers」と入力
        ↓
Dev Containers: Reopen in Container
        ↓
.devcontainer/devcontainer.json
        ↓
Docker Desktop
        ↓
Go開発コンテナ
        ↓
VS Codeがコンテナへ接続

3. Go開発コンテナへの接続を確認する

接続が完了したら、VS Code左下を確認します。

次のように表示されていれば、Go開発コンテナに接続されています。

開発コンテナー: Go @ desktop-linux

Windows側とDev Container側では、次のように対応しています。

Windows
C:\work\go-docker
        │
        │ Dev Containers
        ▼
Dockerコンテナ
/workspaces/go-docker

つまり、Windows側のプロジェクトフォルダをDev Container内から操作しているため、VS Codeで編集したファイルはWindows側の C:\work\go-docker にも反映されます。

以降のGoコマンドは、Dev Container内の /workspaces/go-docker で実行します。

Goモジュールの作成

Goモジュールとは

Goでは、アプリケーションやライブラリをモジュール(Module)という単位で管理します。

モジュールの情報は go.mod に記録され、主に次の情報を管理します。

  • モジュールパス
  • 使用するGoのバージョン
  • 外部パッケージとそのバージョン

go mod initを実行する

Dev Container内のVS Codeターミナルで、現在のディレクトリを確認します。

pwd

次のようになっていることを確認してください。

/workspaces/go-docker

その状態で、Goモジュールを初期化します。

go mod init example.com/go-docker

go mod init は、現在のディレクトリをGoモジュールとして初期化するコマンドです。

go mod init example.com/go-docker
│      │    └────────────── モジュールパス
│      │
│      └─ モジュールを初期化
│
└─ Goコマンド

今回は学習用プロジェクトのため、モジュールパスとして、

example.com/go-docker

を使用します。

モジュールパスは、Goがモジュールを識別したり、プロジェクト内のパッケージをインポートしたりするときに使用します。

出力例:

image.png

次のメッセージが表示される場合があります。

go: to add module requirements and sums:
        go mod tidy

go mod tidy は、ソースコードで使用しているパッケージを確認し、go.mod や go.sum の依存関係を整理するためのコマンドです。

GitHubで公開するプロジェクトでは、たとえば次のようにリポジトリに対応したモジュールパスを指定できます。

github.com/ユーザー名/go-docker

go.modを確認する

go mod init を実行すると、

/workspaces/go-docker/go.mod

が作成されます。

内容を確認します。

cat go.mod

出力例:

image.png

内容は次のようになっています。

module example.com/go-docker
       └───────────────── モジュールパス

go 1.26.0
   └─── 使用するGoのバージョン

Goのバージョンは、使用している環境によって異なる場合があります。

現在のプロジェクト構成

ここまでで、プロジェクトは次の構成になります。

go-docker
│
├─ .devcontainer
│   └─ devcontainer.json
│
└─ go.mod

それぞれの役割は次のとおりです。

ファイル 役割
.devcontainer/devcontainer.json VS CodeのDev Container開発環境を定義する
go.mod Goモジュールや依存関係を管理する

役割を整理すると、

devcontainer.json
        └─ Goを実行する「開発環境」を定義

go.mod
        └─ Goプロジェクトの「モジュール」を定義

となります。

Goプログラムの作成

続いて、プロジェクトルートに main.go を作成します。

作成場所は、

C:\work\go-docker\main.go

です。

Dev Container側から見ると、

/workspaces/go-docker/main.go

になります。

VS Codeのエクスプローラーで go-docker を右クリックし、「新しいファイル」を選択して、

main.go

を作成します。

main.go に次のコードを記述します。

package main

import "fmt"

func main() {
    fmt.Println("Hello Go on Docker!")
}

このプログラムでは、Goの標準パッケージ fmt を利用して、文字列をターミナルへ出力します。

現在のプロジェクト構成は次のようになります。

go-docker
│
├─ .devcontainer
│   └─ devcontainer.json
│
├─ go.mod
│
└─ main.go

image.png

これで、Goプログラムを実行する準備ができました。

Go プログラムの実行

以下を実行します。

go run main.go

実行結果:

image.png

この go run は Windows 側ではなく、Go Development Container内で実行されています。

[VS Code]
    ↓ go run main.go
[Go Development Container]
    ↓
[Go]
    ↓
[main.go]

gofmt の確認

Go には標準のコードフォーマッターとして gofmt があります。

gofmt -w main.go

-w を指定すると、フォーマット結果をファイルへ書き戻します。

VS Code の Go拡張機能を利用すると、保存時の自動フォーマットも利用できます。

gopls の確認

Go では Language Server として gopls が利用されています。

VS Code の Go拡張機能と組み合わせることで、以下のような機能を利用できます。

  • コード補完
  • エラー表示
  • 定義へ移動
  • 参照検索
  • リファクタリング

以下で確認します。

gopls version

環境によっては、初回に VS Code の Go 拡張機能から Go Toolsのインストールを求められる場合があります。

その場合は画面の案内に従って必要なツールをインストールします。

go build の実行

プログラムをビルドします。

go build

生成された実行ファイルを実行します。

./go-docker

実行結果:

image.png

今回の go build は Linux コンテナ内で実行しているため、基本的には
Linux 向けの実行ファイルが生成されます。

[Windows 11]
    ↓
[Docker Linux Container]
    ↓ go build
[Linux 向け実行ファイル]

go test の実行

Go のテストも確認します。

calc.go を作成します。

package main

func Add(a int, b int) int {
    return a + b
}

続いて calc_test.go を作成します。

package main

import "testing"

func TestAdd(t *testing.T) {
    result := Add(10, 20)

    if result != 30 {
        t.Errorf("Add(10, 20) = %d; want 30", result)
    }
}

テストを実行します。

go test ./...

成功すると以下のように表示されます。

image.png

これで以下の Go 開発機能を Docker
コンテナ内で利用できることを確認できました。

  • go run
  • go build
  • go test
  • gofmt
  • gopls

完成したプロジェクト構成

C:\work\go-docker
│
├─ .devcontainer
│   └─ devcontainer.json
│
├─ go.mod
├─ main.go
├─ calc.go
└─ calc_test.go

システム全体では以下の構成になります。

[Windows 11]
    │
    ├─ Docker Desktop
    │
    └─ VS Code
          │
          └─ Dev Containers
                 │
                 ▼
        [Go Development Container]
                 │
                 ├─ Go SDK
                 ├─ gopls
                 ├─ gofmt
                 ├─ go run
                 ├─ go test
                 └─ go build

VS Code を終了した後の再開方法

VS Code を終了してもソースコードは残っています。

PowerShell からプロジェクトを開きます。

cd C:\work\go-docker
code .

必要に応じてコマンドパレットを開きます。

Ctrl + Shift + P

以下を実行します。

Dev Containers: Reopen in Container

再び Go Development Container に接続して開発できます。

Windows に Go をインストールする必要はあるのか?

今回の構成では、Windows 側へ Go SDK
を直接インストールする必要はありません。

Windows 側:

[Windows 11]
├─ Docker Desktop
└─ VS Code
    └─ Dev Containers

コンテナ側:

[Go Development Container]
├─ Go SDK
├─ gopls
├─ gofmt
├─ go run
├─ go test
└─ go build

Go の開発環境を Docker
コンテナ側へ分離できるのが、この構成のメリットです。

通常の Docker 実行との違い

通常の Docker
利用では、アプリケーションをイメージ化してコンテナとして実行する使い方が中心です。

[VS Code]
    ↓ docker build
[Docker Image]
    ↓ docker run
[Container]
    ↓
[Application]

Dev Containers の場合は、Docker コンテナ自体を開発環境として利用します。

[VS Code]
    ↓
[Dev Containers]
    ↓
[Docker Container]
    ├─ コード編集
    ├─ コード補完
    ├─ go run
    ├─ go test
    └─ go build

まとめ

  • VS Code の Dev Containers を利用すると Docker
    コンテナを開発環境として利用できる
  • Windows 側へ Go SDK を直接インストールしなくても Go を開発できる
  • Go の実行・ビルド・テストは Docker の Linux コンテナ内で行われる
  • devcontainer.json で開発環境を定義できる
  • gopls や VS Code の Go 拡張機能もコンテナ環境で利用できる
  • .devcontainer
    をプロジェクトに含めることで、別の環境でも開発環境を再現しやすくなる

本連載について

回 タイトル 対応範囲 主な内容
第1回 Docker × VS Code Dev ContainersでGo開発環境を構築する 🐳 Go開発環境 Docker Desktop・VS Code・Dev Containersを使ったGo開発環境の構築
第2回 React + TypeScript + Go + PostgreSQLのフルスタック開発環境を構築する 🛠️ フルスタック開発環境 Docker Desktop・Dev Containers・React・TypeScript・Go・PostgreSQL・Node.js・Vite
第3回 ChatGPT Workでショッピングサイトを設計してみる 📐 システム設計 Project instructions・要件定義・ユースケース・画面設計・ER図・DB設計・REST API設計・テストケース仕様書
第4回 Codex × AGENTS.md × Skillsで実装準備を整える 🤖 AI開発ルール AGENTS.md・プロジェクトルール・階層化・Skills・実装準備
第5回 Codexで設計書からショッピングサイトを実装する 🛒 ショッピングサイト実装 設計書・AGENTS.md・Skillsを活用した段階的なAI開発・実装・検証
第6回 Codexで実装したショッピングサイトをテスト・動作確認する 🧪 テスト・動作確認 test-cases.md・ユニットテスト・結合テスト・API・ブラウザ・DBによる動作確認
発展編① Codexのエージェントハーネスでテスト・デバッグ・再テストを自律化する 🤖 エージェントハーネス AGENTS.md・確定仕様・テストケース・停止条件を利用したテスト・デバッグ・修正・再テスト・Regression Testの自律化
発展編② Playwrightでブラウザテストを自動化する 🎭 E2Eテスト自動化 Playwright・E2Eテスト・ブラウザ操作・Auto-waiting・Trace Viewer・Seleniumとの違い・Codexとの連携

参考リンク

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?