Go言語

GoとCloud Runのローカル開発環境構築とCI/CD完全ガイド

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

お得なお知らせ

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

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

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

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

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


Contents

スポンサードリンク

1️⃣ 前提条件と環境構築

1‑1. 必要なツールとインストール手順

ツール 推奨バージョン* 主な取得先 / インストール方法
Go 1.22.x 以上(例: go1.22.5 https://go.dev/dl の OS に合ったアーカイブを展開し、PATH に追加
Google Cloud SDK 最新安定版(2026 年 4 月時点で 470.0.0 がリリースされていますが、gcloud version で確認してください) curl https://sdk.cloud.google.com | bash → インストール後に gcloud init
Docker Desktop (Mac/Windows) または Docker Engine (Linux, WSL2) Docker Engine 24.x 系(Desktop の場合は同等の最新リリース) https://www.docker.com/get-started からインストーラを取得。Linux は公式パッケージ (apt, dnf 等) を使用

* ※ バージョンはあくまで「2026 年時点で確認できた最新」ではなく、常に「最新安定版」を利用することが推奨です。
各ツールのバージョンは次のコマンドで確認できます。

ポイント
- バージョンが古い場合は gcloud components updatego install golang.org/dl/go@latest && go download 等で更新してください。
- CI/CD 環境でも同一バージョンを使用すると「ローカルと本番の差異」からくるトラブルが減ります。

1‑2. Docker のコンテナモード(Linux コンテナ)設定

OS デフォルト状態 必要な操作
macOS (Docker Desktop) 「Use Linux containers」 が既定で有効 Docker Desktop → Settings → General で確認
Windows (Docker Desktop) 同上 「Settings → General → Use the WSL 2 based engine」をオンにし、Linux コンテナが自動選択されます
Linux(Ubuntu, Debian, etc.) Docker Engine が直接 Linux コンテナを実行 特別な設定は不要。ただし docker run --platform linux/amd64 … でアーキテクチャを明示すると安全です
WSL2 (Windows Subsystem for Linux) Windows 側の Docker Desktop がエンジンとして機能 WSL2 のディストリビューション内で docker version が表示されれば OK。Docker Desktop → Settings → Resources → WSL Integration で対象ディストリビューションを有効化

留意点
- Windows/macOS では「Windows コンテナ」モードに切り替えると Linux 用イメージが起動できません。必ず「Linux コンテナ」モードになっていることを確認してください。
- Linux ホスト上で docker info | grep "Operating System"Ubuntu 等となっていれば、Linux コンテナは既に使用中です。


2️⃣ GCP プロジェクト作成と認証設定

2‑1. 初期化とプロジェクト構成

2‑2. CI 用サービスアカウントと最小権限ロールの付与

ロール表

ロール 用途
roles/run.admin Cloud Run のサービス作成・更新・削除
roles/artifactregistry.writer Artifact Registry へ Docker イメージを書き込み
roles/secretmanager.secretAccessor Secret Manager からシークレット取得
roles/run.invoker 他のリソースやユーザーが Cloud Run を呼び出す権限(必須)

ベストプラクティス
- プロジェクト全体に付与するのではなく、対象サービス(例: hello-go) の IAM ポリシーに対して roles/run.invoker を個別に設定すると、権限が過剰になるリスクを低減できます。


3️⃣ シンプルな Go 「Hello World」アプリの実装とローカルテスト

3‑1. ソースコード(main.go)

3‑2. ローカルでのビルド・実行手順

ポイント
- PORT 環境変数が未設定でもデフォルトで 8080 を使用するため、ローカルと本番の挙動に差異はありません。
- ログは標準出力へ出すことで Cloud Run の Cloud Logging に自動収集されます。


4️⃣ マルチステージ Dockerfile と Artifact Registry へのプッシュ

4‑1. 推奨 Dockerfile(マルチステージ & Distroless)

4‑2. Artifact Registry 用リポジトリ作成

4‑3. イメージビルド・プッシュ手順

サイズ比較(参考)
- golang:1.22-alpine ビルダーイメージ:≈ 350 MB
- 最終 distroless/static ランタイム:≈ 15 MB (バイナリのみ)


5️⃣ Cloud Run へのデプロイと認証設定

5‑1. デプロイコマンド(最小構成)

オプション解説
- --platform=managed : 完全マネージド環境(Cloud Run (fully managed))を使用。
- --port=8080 : コンテナがリッスンするポート。コード側で $PORT を参照しているので省略可能だが、明示すると可読性が上がります。
- --allow-unauthenticated : 全員に公開。内部利用のみならこのフラグを外し、後述の IAM invoker 設定でアクセス制御します。

5‑2. デプロイ後の URL 確認とテスト

5‑3. IAM ベースのアクセス制御(最小権限で公開)

ポイント
- roles/run.invoker が付与されていないと、認証済みユーザーでも 403 エラーが返ります。デプロイ時に --allow-unauthenticated を外すだけでなく、IAM ポリシーの設定忘れにも注意してください。


6️⃣ GitHub と Cloud Build による CI/CD パイプライン構築

6‑1. リポジトリとビルド定義ファイル

(a) cloudbuild.yaml

(b) Dockerfile は前節 4‑1 と同一のものをリポジトリに配置。

6‑2. Cloud Build 用サービスアカウントにロール付与

6‑3. GitHub トリガー作成

注意
- GitHub App のインストール時に「Read & Write」権限を付与し、Cloud Build がリポジトリへアクセスできるようにしてください。

6‑4. Secret Manager と Cloud Build の連携

cloudbuild.yaml の Docker ビルドステップで --secret id=db-password,src=/secrets/db-password を付与すれば、Docker ビルド時にシークレットが安全に渡せます。

6‑5. モニタリングと可観測性

サービス 主な活用例
Cloud Logging コンテナの stdout/stderr が自動収集。gcloud logging read "resource.type=cloud_run_revision" で確認
Error Reporting パニックやスタックトレースをリアルタイム通知
Cloud Monitoring run.googleapis.com/request_count, cpu/utilization 等のメトリクスをダッシュボード化
Alerting エラーレートが一定閾値を超えたら Slack / Email へ通知

7️⃣ トラブルシューティングよくある質問

現象 原因例 解決策
Permission denied while trying to access Artifact Registry ビルド SA に roles/artifactregistry.writer が無い 上記 6‑3 のロール付与コマンドを再実行
Port not exposed: container listening on 8080 but Cloud Run expects $PORT Dockerfile の EXPOSE が 8080 以外、またはコードが $PORT を読まない EXPOSE 8080 を残しつつ、Go コードで os.Getenv("PORT") を使用
デプロイ後に 403 エラーが返る roles/run.invoker がサービスアカウントまたはユーザーに付与されていない 2‑2 のロール付与を確認、もしくは gcloud run services add-iam-policy-binding で追加
CI ビルドがタイムアウトする Artifact Registry のリージョンが違うか、ネットワーク制限あり リージョンが一致しているか (us-central1) を再確認し、VPC Service Controls が有効なら例外設定

8️⃣ まとめ

  1. ツールは常に最新安定版 を使用し、バージョンはコマンドで確認。
  2. Docker は Linux コンテナモード(macOS/Windows の Desktop、Linux 本体、WSL2)を必ず有効化。
  3. IAM では roles/run.invoker を忘れずに付与し、最小権限でアクセス制御。
  4. マルチステージ Dockerfile と Distroless ランタイムで イメージサイズ ≈15 MB に抑える。
  5. gcloud run deploy のフラグを正しく設定すれば、デプロイは 1 行コマンドで完了。
  6. GitHub + Cloud Build の CI/CD パイプラインにより コード → ビルド → デプロイ が自動化され、Secret Manager・Logging・Monitoring による安全性と可観測性も確保できる。

これらの手順を踏めば、ローカル開発から本番環境へのデプロイまでスムーズに進められます。ぜひ実際のプロジェクトで試してみてください!

スポンサードリンク

お得なお知らせ

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

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

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

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

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


-Go言語