Contents
なぜDockerでGo開発環境を構築するのか?
一貫性のある環境と簡易なセットアップが最大の利点です。従来のローカル環境では、OSごとのライブラリ依存やバージョン違いからトラブルが生じることがありますが、Dockerは「コンテナ内に必要なものを全て入れる」仕組みで、開発者同士で同じ環境を共有できます。また、VS CodeのRemote - Containers拡張を使うことで、エディタ内でコンテナ内のファイルを編集できるため、学習コストを抑えることが可能です。
対象読者層と本記事の目的
本記事は、Go言語初心者やDocker未経験者が対象です。ゼロからDockerを使ってGo開発環境を構築する手順を、VS Codeとの連携を含めながら丁寧に解説します。読者は以下のスキルを得られることを目指しています:
- Docker Engineのインストール方法
- Go用コンテナイメージの選択基準
- VS CodeからDockerデーモンと連携する方法
開発環境準備: DockerとVS Codeのインストール
Go開発を始める前に、Docker EngineとVS Codeを導入する必要があります。それぞれの設定手順はOSに応じて異なりますが、公式ドキュメントを参照しながら進めます。
Docker Engineの導入手順
Docker Engineのインストールは、以下のように各OSで行います(例):
| OS | インストール方法 | 公式リンク |
|---|---|---|
| Windows | Docker Desktop for Windowsをダウンロード | https://docs.docker.com/docker-for-windows/install/ |
| macOS | Docker Desktop for Macをインストール | https://docs.docker.com/docker-for-mac/install/ |
| Linux(Ubuntu) | sudo apt install docker.io コマンドで導入 |
https://docs.docker.com/engine/install/ubuntu/ |
インストール後は、docker --versionコマンドでバージョンを確認してください。2023年現在ではDocker Engine 24.x系が推奨です。
VS CodeでのDocker拡張機能設定
VS Codeでは、「Remote - Containers」拡張機能を使うことで、コンテナ内で開発できます。以下が導入手順です:
- VS Codeの拡張市場から「Remote - Containers」をインストール
.devcontainerフォルダを作成し、Dockerfileとdevcontainer.jsonファイルを配置(後述します)- VS Codeでプロジェクトを開き、「Remote Explorer」ビューからコンテナに接続
注意: Dockerデーモンの起動状態を常に確認してください。Docker Desktopではアイコンが青色になれば正常です。
Go開発用Dockerイメージの選び方と検証
Go言語開発には、公式提供のgolangイメージやコミュニティ製のalpineベースイメージなど選択肢があります。それぞれの特徴を比較して選ぶことが重要です。
公式イメージvsコミュニティ製イメージ
| 比較項目 | golang(公式) | go:alpine(コミュニティ) |
|---|---|---|
| バージョン管理 | GO_VERSION環境変数で対応 |
同様にGO_VERSIONを使用可能 |
| サイズ | 約700MB(golang:latest) | 約150MB(go:alpine) |
| 依存関係 | バッファローなど開発ツールも含む | 最小限のライブラリのみ |
推奨: 開発環境はgolang、本番用や軽量化が必要な場合はgo:alpineを選びましょう。
バージョン管理の実践例
Goバージョンを指定するには、Dockerfileで以下のように記述します:
|
1 2 3 4 |
FROM golang:1.20 as builder ARG GO_VERSION=1.20 RUN echo "GO_VERSION=${GO_VERSION}" > /etc/go.version |
このようにすることで、バージョンを変更するたびにDockerイメージを再ビルドできます。
注意: Go 1.21は2023年時点で安定版ではないため、公式ドキュメントで確認の上使用してください。
Dockerfile作成時のベストプラクティス
Dockerfileは、「コード開発環境」と「ビルド環境」の役割を分離し、効率よく作成しましょう。特にマルチステージビルドやVS Codeとの連携設定が重要です。
マルチステージビルドの活用
以下のような構造にすることで、コンテナイメージのサイズを抑えつつ、開発環境とビルド環境を分離できます:
|
1 2 3 4 5 6 7 8 9 10 |
FROM golang:1.20 as builder WORKDIR /app COPY . . RUN go build -o myapp FROM alpine:3.18 WORKDIR /root/ COPY --from=builder /app/myapp . CMD ["./myapp"] |
理由: 第一ステージでは開発ツールも含め、第二ステージでは最小限の環境で実行します。
開発者向け設定の最適化
VS Codeからコンテナ内で編集できるようにするには以下の2点を設定します:
- ワークスペースマウント
devcontainer.jsonに以下のように指定することで、ホストPCのプロジェクトフォルダをコンテナ内へマウントできます。
json
{
"mounts": [
"type=bind,source=${localWorkspaceFolder},target=/workspace"
]
}
- Dockerデーモン起動
VS Codeの「Remote - Containers」拡張を起動した時点で、Dockerデーモンも自動で接続されます。
VS CodeでのDocker連携による開発効率化
VS CodeとDockerの連携により、リアルタイムデバッグやリモートエディタが可能になります。特にRemote - Containers拡張は、開発体験を飛躍的に向上させます。
コンテナ内でのリアルタイムデバッグ
devcontainer.jsonでGoのデバッガ設定を有効化します:
json
{
"settings": {
"go.useLanguageServer": true,
"go.debugAdaptors": ["delve"]
}
}
- VS Codeで「Run and Debug」ビューを開き、
launch.jsonに以下を記述:
json
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/main.go"
}
- F5キーでデバッグ開始。コンテナ内での実行結果を確認できます。
リモートエディタの設定方法
VS CodeのRemote - Containers拡張を使用すると、以下のように簡単にリモートエディタが利用可能です:
devcontainer.jsonに以下を追加することで、エディタ起動時に自動でコンテナへ接続します:
json
{
"remoteEnv": {
"GOPATH": "/workspace"
}
}
- VS Codeでプロジェクトを開き、「Remote Explorer」から「Reopen in Container」を選択。
- コンテナ内にVS Codeが起動し、コード編集が可能です。
注意: ソースコードの変更は自動的にホストPCと同期されるため、ローカルで修正した内容はコンテナ内でも即反映されます。
重要事項: Go 1.20以降では
GOPATH設定が非推奨になりました。代わりにGo Modulesを使用するようにしてください。
まとめ
本記事では、Go言語初心者向けにDockerコンテナを使用した開発環境構築手順を解説しました。重要なポイントを以下に整理します:
- Dockerの活用メリット: 環境一貫性とVS Codeとの連携による効率向上
- イメージ選択:
golang(開発)とgo:alpine(本番)を使い分け、バージョン管理を実施 - Dockerfileの最適化: マルチステージビルドでサイズ削減・開発環境分離
- VS Codeとの連携: Remote - Containers拡張でリアルタイムデバッグとリモートエディタが可能
記事を参考に、DockerでGo開発環境構築を試してみましょう。