Go言語

Docker と WSL2/macOSで Go 開発環境を構築する完全ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


Contents

スポンサードリンク

ローカル環境の前提条件

OS 必要なソフトウェア 推奨設定
Windows 10/11 (WSL2 推奨) Docker Desktop、WSL2、PowerShell (管理者) またはコマンドプロンプト CPU 仮想化有効、メモリ ≥ 4 GB、スワップ ≥ 2 GB
macOS (Intel / Apple Silicon) Docker Desktop for Mac 4 GB 以上の RAM、Apple Silicon は公式の Docker Desktop for Mac (Apple Chip) を使用
Linux (Debian/Ubuntu 系) Docker Engine、BuildKit (オプション) docker グループへのユーザー追加で非 root 実行

⚠️ 注意:各 OS のバージョンが古いと Docker Desktop がインストールできないことがあります。OS のアップデートも合わせて実施してください。


Windows (WSL2) の詳細手順

1. PowerShell と コマンドプロンプトの違い

実行環境 主な特徴
PowerShell(管理者) dism.exewsl.exe がデフォルトでパスに通っている。スクリプト実行ポリシーが影響することは少ない。
コマンドプロンプト(管理者) 同様のコマンドは使用できるが、PowerShell のエイリアスや変数展開が使えない点に注意。

実務上は PowerShell(管理者)で以下の手順を行うことを推奨します。

2. WSL と仮想マシンプラットフォーム機能の有効化

❗ 再起動が必要です/norestart オプションは有効化だけを行い、手動で再起動させるために付与しています。

3. 再起動後の確認手順

  1. PC を再起動する。
  2. 管理者権限 PowerShell で以下を実行し、WSL のバージョンが 2 になっていることを確認

  1. デフォルト版がまだ 1 の場合は再設定

  1. 正しく設定できたら、PowerShell とコマンドプロンプトの両方で同じ結果が得られるか を確認(wsl -l -v)。

4. WSL2 Linux カーネル更新プログラム

⚠️ 重要:インストール後は必ず Docker Desktop を再起動し、設定 → Resources → WSL Integration が有効になっていることを確認してください。


macOS / Linux でのセットアップ補足

macOS

  • Apple Silicon (M1/M2) の場合は「Docker Desktop for Mac (Apple Chip)」を公式サイトから取得。Intel と同様に docker version が動作すれば完了です。
  • Rosetta 2 は不要です(Docker Desktop がネイティブ対応)。

Linux

  • Debian/Ubuntu 系以外(Fedora、Alpine 等)でも基本は同様ですが、パッケージ名やリポジトリ URL が異なる点に注意。
  • BuildKit の有効化(高速ビルド推奨)

  • Docker グループへユーザー追加後は、ターミナルを完全に再起動(または newgrp docker)して権限が反映されることを確認してください。

Dockerfile とマルチステージビルドのベストプラクティス

1. ビルドステージと実行ステージの分離

ポイント解説

項目 説明
--mount=type=ssh ビルド時に SSH エージェントをマウントし、プライベートリポジトリの go get を安全に実行できる(Docker BuildKit が必須)。
apt-get install --no-install-recommends 不要な依存パッケージを削減し、最終イメージサイズの増大を防止。
CGO_ENABLED=0 + -ldflags="-s -w" 静的バイナリ化+デバッグ情報除去で Alpine 上でも動作し、サイズが約 30 % 減少。
tzdata の追加はローカルタイムゾーンを扱う場合に便利(オプション)。

2. ビルドキャッシュの最大活用

  • マルチステージ + レイヤー順序最適化 により、go.mod/go.sum が変更されない限り依存関係ダウンロードは再実行されません。
  • 大規模プロジェクトでは go build -mod=readonly を付与して、意図しないモジュール取得を防止できます。

devcontainer.json の安全な記述例

1. remoteUser が存在しないケースへの対策

remoteUser: "vscode"devcontainers/features が自動で作成するユーザーです。ベースイメージにそのユーザーが無い場合は、Dockerfile 側で手動作成または公式 mcr.microsoft.com/vscode/devcontainers/base:ubuntu 等のイメージへ切り替える必要があります。

Dockerfile にユーザー追加例

⚠️ 注意remoteUser を変更した場合は、.devcontainer/devcontainer.json と Dockerfile の両方を同期させてください。

2. 完全版 devcontainer.json

3. 外部リンクの安定化

リンク 現在の URL アーカイブ代替
Docker Desktop ダウンロード https://www.docker.com/products/docker-desktop https://web.archive.org/web/*/https://www.docker.com/products/docker-desktop
WSL2 カーネル更新プログラム https://aka.ms/wsl2kernel https://web.archive.org/web/*/https://aka.ms/wsl2kernel
Zenn 記事(参考) https://zenn.dev/hiro345/articles/20251022_vscode_go https://webcache.googleusercontent.com/search?q=Zenn+VS+Code+Go+2025

備考:執筆時点でリンクが有効かどうかは必ず確認し、将来的に URL が変更された場合は上記アーカイブURLへ差し替えると読者の手間が減ります。


プライベートリポジトリの認証対策

go mod download でプライベート Git リポジトリを取得する際、ビルド環境に認証情報が無いと失敗します。代表的な対策は以下です。

1. SSH 鍵を利用したビルド(推奨)

  • 手順
  • ローカルに SSH キー (~/.ssh/id_rsa) を作成し、GitHub に公開鍵を登録。
  • docker build --ssh default オプションでエージェント転送。

2. .netrc / 環境変数方式(トークンベース)

  • ビルドコマンド

セキュリティ注意点ARG の値はイメージのレイヤーに残らないよう --squash かマルチステージで除去してください。


Docker‑Compose・air でホットリロード、Delve デバッグ

docker-compose.yml(開発モード)

.air.toml(最低構成)

Delve デバッグ用の拡張(本番環境には不要)

docker-compose.yml のデバッグモード例

VS Code launch.json(Remote Attach)

ポイントairdlv は同時に起動できません。開発中は air、デバッグが必要なときだけ docker compose -f docker-compose.yml up app --detach && code .launch.json を使って attach します。


本番イメージ最適化と CI/CD への応用

1. ビルド時のレイヤー削減

  • --squash は全レイヤーを一つにまとめ、イメージサイズと脆弱性サーフェスを縮小します(Docker Engine 20.10 以降で利用可能)。

2. Multi‑platform ビルド(amd64 / arm64)

  • GitHub Actions や GitLab CI の setup-buildx-action と組み合わせると、プッシュ時に自動でマニフェストが生成されます。

3. CI パイプライン例(GitHub Actions)

4. セキュリティベストプラクティス

項目 推奨設定
ユーザー USER vscode(または非 root ユーザー)で実行。Dockerfile 最終段階に USER 指定を忘れないこと。
最小権限パッケージ apk add --no-cache ca-certificates のみインストールし、不要なツールは削除 (apk del .build-deps) 。
イメージスキャン docker scan ghcr.io/yourorg/goapp:prod で脆弱性を CI に組み込む。

トラブルシューティング集

症状 原因例 解決策
Docker Desktop が WSL2 と接続できない Windows の Hyper‑V が無効、もしくは WSL2 カーネルが古い 1. wsl --update でカーネル更新
2. BIOS で仮想化を再確認
go mod download がタイムアウト プライベートリポジトリの認証情報未設定 上記「プライベートリポジトリ」章の SSH/Token 方法を導入
devcontainer 起動時に vscode ユーザーが見つからない ベースイメージが公式 devcontainer ではなく plain golang イメージ Dockerfile にユーザー作成ステップを追加、またはベースを mcr.microsoft.com/vscode/devcontainers/base:ubuntu に変更
air がファイル変化を検知しない ボリュームマウントが cached のみで書き込みキャッシュが有効になりすぎている consistency=delegated(macOS)や type=bind,consistency=cached を試す
Delve がポートバインドエラー コンテナ内で既に 40000 番が使用中、またはファイアウォール設定 docker compose down && docker compose up -d app でクリーンアップし、ホスト側のファイアウォールを確認
Docker イメージサイズが期待より大きい ビルドステージから不要なファイル(例: .git, node_modules) がコピーされている .dockerignore に以下を追加
<br>.git<br**/node_modules/**<br**/*.md<brDockerfile.dev<br>

まとめ

  1. バージョン情報は常に最新版を確認し、日付・バージョンの注意書きを記事冒頭に入れる。
  2. WSL2 の有効化手順は PowerShell とコマンドプロンプトの違い、再起動後の wsl -l -v 確認を必ず行う。
  3. devcontainer の remoteUserがベースイメージに存在しない場合は Dockerfile でユーザー作成か、公式 devcontainer ベースへ変更する。
  4. 外部リンクはアーカイブ URL を併記し、リンク切れリスクを低減。
  5. プライベートリポジトリへの認証は SSH エージェント転送 (--mount=type=ssh) かビルド時環境変数で安全に提供する。
  6. マルチステージビルド、BuildKit、squash, buildx を活用して本番イメージは 70 ~ 80 MB に抑えつつ、CI/CD パイプラインへ自動化を組み込む。
  7. docker‑compose + air + Delve の組み合わせでローカル開発・デバッグフローが高速かつ安全になる。

これらの手順とベストプラクティスに従えば、Docker 上の Go 開発環境を 軽量・安全・再現性の高い 状態で構築でき、チーム全体の生産性向上につながります。ぜひ本稿のリポジトリ(例: github.com/yourorg/go-devcontainer-demo)をクローンし、ハンズオンで確認してみてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-Go言語