Go言語

2026年版 Go と Docker の開発環境構築ガイド

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

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件とインストール手順

本章では、ローカル環境で Go アプリを Docker コンテナ上で開発 するために最低限必要なツールの導入方法を解説します。Docker Desktop と Go のバージョンは「最新安定版」を対象とし、VSCode の拡張機能は CLI が PATH に通っている前提でインストールコマンドを示しています。各ツールが正しくインストールできれば、以降の手順はすべてコンテナ内で完結します。

Docker Desktop の導入

  1. 公式サイト(https://www.docker.com/products/docker-desktop)から OS に合わせた Docker Desktop(最新安定版) をダウンロード。
  2. インストーラを実行し、指示に従ってインストール。インストール完了後は docker version でバージョンが表示されることを確認してください。

補足:Docker Desktop のバージョン番号は頻繁に更新されます。記事執筆時点の「最新安定版」を使用する方針とし、具体的な数字は記載していません。

Go の導入

  1. https://go.dev/dl/ から Go 1.22 以降 のバイナリ(Linux/macOS/Windows)を取得。
  2. ダウンロードしたアーカイブを解凍し、go 実行ファイルが PATH に含まれるように環境変数 PATH=$PATH:/usr/local/go/bin(例)を設定。
  3. go version で正しくインストールされていることを確認。

VSCode と拡張機能の導入

VSCode 本体は公式サイトからインストールしてください。その後、ターミナルで次のコマンドを実行します(VSCode の CLI (code) が PATH に通っていることが前提です。PATH へ登録されていない場合は、VSCode の「Shell Command: Install 'code' command in PATH」メニューから設定できます)。

注意:上記コマンドが失敗した場合は、VSCode の GUI から「拡張機能」パネルを開き、名前で検索して手動インストールしてください。

まとめ

  • Docker Desktop・Go・VSCode(+拡張)の「最新安定版」を導入すれば、ローカルでも本番に近いコンテナ環境が構築できます。
  • code コマンドは PATH に追加しておくとスクリプト化しやすく、手順の自動化が可能です。

プロジェクト構成と go.mod 初期化

このセクションでは、Go の標準的なディレクトリレイアウトとモジュール管理の基本を紹介します。適切に構造化されたプロジェクトは Docker のキャッシュ利用や CI/CD パイプラインでのビルド効率向上につながります。

推奨ディレクトリツリー

以下は「業務アプリケーション」想定の典型的な構成です。myapp はリポジトリ名に置き換えてください。

  • cmd/: main パッケージを配置し、ビルド対象のバイナリを生成します。
  • internal/: 他モジュールからインポートできないように Go が自動的に制限する領域です。
  • pkg/: ライブラリとして外部に提供したいコードを置きます(公開 API の設計が容易になります)。

go.mod の初期化手順

go.mod が生成されると、go.modgo.sum の内容は Docker ビルド時のキャッシュレイヤーとして再利用できます。

まとめ

  • 標準的なディレクトリ構成を採用すると、コードの可読性・保守性が向上し、Docker キャッシュ戦略と相性が良くなります。
  • go.mod の初期化は最初の一手です。以降の依存追加は go get で行い、必ず go mod tidy で整合性を保ちましょう。

マルチステージ Dockerfile の作成

ここでは ビルダーイメージ実行イメージ を分離したマルチステージ構成のポイントを解説します。レイヤーキャッシュと最小化されたランタイムを両立させることで、開発・本番どちらでも高速なコンテナが得られます。

キャッシュ活用の基本戦略

ビルドステージで go.modgo.sum を先にコピーし、依存関係だけをダウンロードするレイヤーを作ります。ソースコードが変更されてもこのレイヤーは再利用されるため、go mod download の実行回数が減少します。

推奨 Dockerfile(Dockerfile.dev

テーブルでポイントを整理

項目 内容・効果
ベースイメージ golang:1.22-buster(公式、長期サポート)と alpine:latest(軽量)
キャッシュ戦略 go.mod/go.sum を先にコピー → RUN go mod download で依存レイヤーを固定
バイナリ配置 ビルダーから実行ステージへ /app/bin/server のみ持ち込む
Air のインストール go install により最新版を取得し、PATH へ追加
CA 証明書 本番で外部 API を呼び出す際に必要な最小限の証明書だけを残す

まとめ

  • マルチステージ構成は「ビルド高速化 + イメージ軽量化」の両立が可能です。
  • go.mod の先行コピーと go mod download がキャッシュ利用の鍵となります。

docker‑compose.yml におけるサービス定義とボリューム設定

この章では、開発用コンテナ(Air 監視)本番用コンテナ を同一 Compose ファイルで管理する方法を示します。ボリュームマウントと working_dir の正しい指定が、ホスト側エディタとコンテナ内部のファイル同期を円滑にします。

開発サービス(Air)

  • :cached オプションは macOS/Windows のファイル共有における I/O パフォーマンス向上効果があります。
  • working_dir が設定されていないと、Air が期待するプロジェクトルートを認識できずエラーになるケースが多く報告されています。

本番サービス(最小イメージ)

  • 本番サービスは ビルダーイメージから生成された最小ランタイム を直接使用するだけなので、build セクションは不要です。

まとめ

  • 開発用と本番用を同一 docker-compose.yml に記述すれば、環境切替が docker compose up app / docker compose up prod のみで完了します。
  • 正しい working_dir とボリューム設定により、Air のライブリロードがエディタの保存と同時に反映されます。

Air を使ったライブリロード環境と VSCode Remote‑Containers 設定

このセクションでは、Air の詳細設定VSCode Remote‑Containers の構成 を組み合わせた開発フローを解説します。.air.toml の各項目の意味を丁寧に説明し、初心者でもすぐに使えるテンプレートを提供します。

Air のインストールと .air.toml の解説

Dockerfile で go install github.com/cosmtrek/air@latest を実行すると、/go/bin/air にバイナリが配置されます。次にプロジェクトルートに以下の設定ファイルを作成してください。

主な項目のポイント

セクション キー 説明
root "." プロジェクトルート。Docker の working_dir と合わせることでパスずれを防止
tmp_dir "tmp" ビルド成果物の一時保存先。コンテナ再起動時に自動削除されるのでクリーンな状態が保たれる
[build] cmd 変更検知時に実行するビルドコマンド(go build -o ./tmp/server …
bin ビルド後に Air が起動させるバイナリのパス
include_ext 監視対象拡張子。Go ソースだけでなくテンプレート等も含められる
exclude_dir キャッシュや VCS ディレクトリを除外し、無駄なビルドを防止
[log] time ログに時刻を出力。デバッグが容易になる
[color] main コンソールの文字色(任意)

VSCode Remote‑Containers の構成

devcontainer.json の設定例

プロジェクト直下に .devcontainer/devcontainer.json を作成します。Docker Compose ファイルを参照し、app サービスを開発コンテナとして利用します。

  • postCreateCommand はコンテナ作成直後に実行され、依存解決と Air の起動を自動化します。
  • extensions に Remote‑Containers と Go 拡張を列挙しておくことで、VSCode が自動的にインストールします。

デバッグ構成(launch.json)

  • remotePath はコンテナ内部の作業ディレクトリを指すため、ブレークポイントが正しくマッピングされます。

まとめ

  • .air.toml の各項目を把握すれば、ファイル変更 → ビルド → 再起動までが数秒で完了する開発フローが構築できます。
  • VSCode Remote‑Containers と組み合わせることで、エディタ自体がコンテナ内に入り込む形になり、環境差異によるトラブルを大幅に削減できます。

ビルド・テスト・CI/CD の実践例とトラブルシューティング

本章では、日常的に使うビルド/テストコマンドと、GitHub Actions / GitLab CI での Docker イメージ自動化手順を示します。また、よくあるエラーとその対処法もまとめました。

よくあるエラー一覧(導入文)

以下は開発中に頻出するエラーメッセージと、その原因・解決策です。表の左側が実際にコンテナ上で表示されるメッセージ、右側が対処法になります。

エラー 原因 解決策
go.mod not found 作業ディレクトリが /app ではない、またはボリュームマウント失敗 docker-compose.ymlworking_dir: /appvolumes: - ./:/app を再確認し、docker compose up --build でキャッシュクリア
listen tcp :8080: bind: address already in use ホスト側でポート 8080 が既に占有されている docker compose ps で使用中コンテナを特定し、docker compose down 後に空きポート(例: 8081)へ変更
air: command not found Dockerfile の PATH に /go/bin が追加されていない Dockerfile に ENV PATH="/go/bin:${PATH}" を追記、または RUN cp /go/bin/air /usr/local/bin/
cannot find module for package … go.mod キャッシュが古くなっている コンテナ内で go clean -modcache 実行、あるいは docker compose build --no-cache でイメージ再構築

Q&A サンプル

  • Q: docker compose exec app go test ./... が失敗し、no such file or directory: .air.toml と出ます。
    A: テスト実行時に Air の設定は不要です。コマンドを docker compose exec app sh -c "go test ./..." に変更すれば問題なく走ります。

  • Q: Windows 環境でボリュームマウントが遅いと感じる。
    A: Docker Desktop の「Settings → Resources → File Sharing」でパフォーマンスオプションを cached に設定し、Compose ファイルでも :cached を付与すると I/O が改善します。

GitHub Actions でのビルド・プッシュ例

  • docker/build-push-action がマルチステージイメージ全体をビルドし、タグ付けして Docker Hub にプッシュします。
  • ビルドキャッシュは GitHub のレイヤーキャッシュ機能が自動で利用されるため、2 回目以降は高速化されます。

GitLab CI での go mod キャッシュ例

  • cache セクションで $GOPATH/pkg/mod(デフォルトは .modcache/)を保存し、次回ジョブの実行時間を短縮します。
  • Docker ビルドは build ジョブで完了させ、test は Go のユニットテストのみを走らせます。

まとめ

  • エラーメッセージと原因を把握すれば、トラブルの切り分けが格段に楽になります。
  • CI/CD パイプラインは Docker のマルチステージビルドと go.mod キャッシュを活用するだけで高速化でき、GitHub Actions と GitLab CI どちらでも同様の構成が可能です。

全体まとめ

  1. 前提ツール:Docker Desktop(最新安定版)・Go 1.22+・VSCode + Remote‑Containers/Go 拡張をインストールすれば、ローカルでも本番に近い環境が手に入ります。
  2. プロジェクト構成:標準的な cmd / internal / pkg レイアウトと go.mod の初期化で依存管理と Docker キャッシュを最適化します。
  3. マルチステージ Dockerfilego.mod 先行コピー+go mod download によるレイヤーキャッシュ、Alpine ベースの実行イメージでサイズとセキュリティを両立。
  4. docker‑compose.yml:開発用(Air)と本番用サービスを同一ファイルで管理し、ボリュームマウントと working_dir の設定がライブリロードの鍵になります。
  5. Air と VSCode Remote‑Containers.air.toml の各項目を理解すれば「保存 → ビルド → 再起動」まで数秒で完了し、VSCode からシームレスにデバッグ可能です。
  6. CI/CD とトラブルシューティング:GitHub Actions / GitLab CI にマルチステージビルドと go.mod キャッシュを組み込むことで、継続的デリバリーが高速かつ安定します。

以上のベストプラクティスに沿って環境構築すれば、Go + Docker 開発 の生産性と信頼性が大幅に向上し、チーム全体で統一された開発フローを実現できます。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Go言語