👨‍🎓

VScode+Docker+DevContainerでGOのローカル開発環境構築

に公開

はじめに

Goの学習のためにローカル開発環境を構築する必要があり、
その時の手順を忘備録のために残します。

実行環境

  • Ubuntu 24.04.1 LTS
  • Visual Studio Code version 1.99.3
  • Docker version 27.5.1
  • VSCode拡張機能 Remote Development
    ※厳密にはこの拡張機能のパック内にあるDev Containersを利用する

Dockerfileの作成

golang公式のイメージをベースにDockerfileを作成します。
イメージタグにはAlpine系やDebian系(bookworm/bullseye)、Windowsコンテナなどいろいろありますが、Debian系の最新であるBookwormを選択します。
ローカル開発環境なのでいろいろライブラリが入っていた方が便利

https://hub.docker.com/_/golang

Dockerfile
FROM golang:1.24.2-bookworm

# 非rootユーザーを作成
RUN groupadd --gid 1000 vscode \
    && useradd --uid 1000 --gid 1000 -m vscode \
    && apt-get update \
    && apt-get install -y sudo \
    && echo vscode ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/vscode \
    && chmod 0440 /etc/sudoers.d/vscode

WORKDIR /usr/src/app

COPY go.mod ./
RUN go mod download

COPY . .

RUN chown vscode:vscode /usr/src/app

.devcontainerの作成

DevContainerを作成するための設定ファイル

.devcontainer/devcontainer.json
{
    "name": "GO Development Container",
    "build": {
        "context": "..",
        "dockerfile": "../Dockerfile"
    },
    // 非rootユーザー設定
    "remoteUser": "vscode",
    "updateRemoteUserUID": true,
    
    // その他の設定...
    "customizations": {
        "vscode": {
            "extensions": [
                "golang.go"
            ]
        }
    }
}

GOのソースコード

Goのサンプルコード

pkg/hello/hello.go
package hello

func SayHello() string {
    return "Hello, World!"
}
cmd/main.go
package main

import (
    "fmt"
    "hello_world_go/pkg/hello"
)

func main() {
    message := hello.SayHello()
    fmt.Println(message)
}

GOの設定ファイル

module hello_world_go

go 1.24.2

動作確認

$ go run cmd/main.go
Hello, World!

終わりに

vscodeのdev containerでgo言語の環境構築ができました。
この環境をベースにGoの勉強を進めたいと思います。

今回の記事のソースコード
hello_world

Discussion