Contents
前提条件とローカル環境の構築
このセクションでは、デプロイに必須なツールのインストール手順と認証設定方法を紹介します。
正しいバージョン管理と認証情報の設定は、以降のデプロイ作業で 「Permission denied」 エラーやビルド失敗を防ぐ鍵となります。
必要ツール
| ツール | 推奨バージョン | インストール方法 |
|---|---|---|
| Go | 1.22 以上 | https://go.dev/dl/ から OS に合わせて取得し、go version で確認 |
| Google Cloud SDK (gcloud) | 常に最新(2026‑07‑06 時点で 456.0.0) | 推奨は公式インストーラ curl https://sdk.cloud.google.com | bash。インタラクティブに最新版が取得され、将来的なバージョン固定のリスクを回避できます。公式インストール手順 を参照 |
|
1 2 3 4 5 6 7 |
# Cloud SDK の最新インストーラ(Linux/macOS) curl https://sdk.cloud.google.com | bash # インストール完了後にパスを反映し、初期化 exec -l $SHELL gcloud init |
ポイント:
gcloud components updateで随時最新コンポーネントへ更新できます。
認証設定とプロジェクトの選択
CI/CD ではサービスアカウント、ローカル開発ではユーザー認証のどちらでも構いませんが、権限は最小限に絞ることを推奨します。
|
1 2 3 4 5 6 7 8 9 10 |
# ユーザー認証(対話型) gcloud auth login # サービスアカウントキーで認証(CI/CD 推奨) export GOOGLE_APPLICATION_CREDENTIALS=$HOME/key.json gcloud auth activate-service-account --key-file=$GOOGLE_APPLICATION_CREDENTIALS # 作業プロジェクトを設定 gcloud config set project YOUR_PROJECT_ID |
gcloud projects describe $PROJECT_ID が正常に情報を返せば認証・設定は完了です。
デプロイパターン① App Engine(標準・フレキシブル)
App Engine は マネージド PaaS で、インフラ管理が不要な点が最大の魅力です。
本節では「標準環境」と「フレキシブル環境」の違いと、それぞれに最適なデプロイ手順を示します。
App Engine 標準環境
概要:Google が提供するランタイム(Go 1.22)をそのまま利用でき、コンテナ化は不要です。
無料枠は 28 h/日(F1 インスタンス) ですが、2026 年 7 月時点の公式料金ページで最新情報をご確認ください。App Engine 標準 の料金表 。
デプロイ手順
|
1 2 3 4 5 6 7 8 9 |
# app.yaml (プロジェクト直下に配置) runtime: go122 # Go 1.22 ランタイム instance_class: F2 # 小規模インスタンス(課金対象は実行時間) automatic_scaling: min_instances: 0 max_instances: 5 target_cpu_utilization: 0.65 |
|
1 2 3 |
# デプロイコマンド gcloud app deploy |
- ポイント
runtime: go122が公式にサポートされていることを確認(2026‑07‑06 時点)。- 無料枠の上限はインスタンス時間で計測されるため、トラフィックが少ないアプリは コストゼロ で運用可能です。
冷启动 (Cold Start) の実測
標準環境はコンテナではなく「ランタイム」なので、Cold Start は概ね 数秒 程度です。Google のベンチマーク(2025 年リリース)によると、F1 インスタンスの初回起動時間は 2.3 〜 4.1 秒 となっています。公式ドキュメント を参照してください。
App Engine フレキシブル環境
概要:カスタム Docker コンテナを使用でき、メモリやファイルサイズの上限が緩和されます。
課金は インスタンス時間 + 使用したリソース で、無料枠はありません(2026 年時点)。
デプロイ手順
|
1 2 3 4 5 6 7 8 9 10 |
# app.yaml runtime: custom # カスタムランタイム env: flex resources: cpu: 1 memory_gb: 2 automatic_scaling: min_num_instances: 1 max_num_instances: 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Dockerfile(マルチステージビルド) FROM golang:1.22-alpine AS builder WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/server . FROM alpine:3.20 COPY --from=builder /app/server /server ENTRYPOINT ["/server"] |
|
1 2 3 |
# デプロイ実行 gcloud app deploy |
- ポイント
runtime: customとすることで、任意の Dockerfile を利用できる。- フレキシブル環境は常時起動しているインスタンスがあるため、Cold Start はほぼ 0 秒 に近い。
参考リンク
デプロイパターン② Cloud Run(マネージド)
Cloud Run は 完全マネージドなコンテナ実行基盤 で、リクエスト単位の自動スケーリングが特徴です。
本節では最適化された Docker イメージと CI/CD パイプラインを構築する手順を示します。
冷启动時間の根拠
公式ベンチマーク(2025‑12‑01 公開)によると、30 MB 以下の Distroless コンテナ を asia-northeast1 リージョンでデプロイした場合の Cold Start は 約 400 ms です。
Cloud Run のパフォーマンスガイド を参照してください。
マルチステージ Dockerfile(30 MB 未満)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# ---------- ビルドステージ ---------- FROM golang:1.22-alpine AS builder WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux \ go build -ldflags="-s -w" -o /app/main . # ---------- ランタイムステージ ---------- FROM gcr.io/distroless/static-debian12 COPY --from=builder /app/main /main EXPOSE 8080 ENTRYPOINT ["/main"] |
- ポイント
-ldflags="-s -w"によりシンボル情報を除去し、イメージサイズを削減。- Distroless イメージはセキュリティ面でも推奨されます。
Cloud Build 設定 (cloudbuild.yaml)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
steps: # ビルド & プッシュ - name: 'gcr.io/cloud-builders/docker' args: - build - '-t' - 'gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA' - '.' - name: 'gcr.io/cloud-builders/docker' args: - push - 'gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA' # Cloud Run デプロイ - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - run - deploy - go-sample - --image=gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA - --region=asia-northeast1 - --platform=managed - --allow-unauthenticated images: - 'gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA' |
手動デプロイ(クイックスタート)
|
1 2 3 4 5 6 7 8 9 10 |
# Cloud Build にビルド&プッシュを委任 gcloud builds submit --config cloudbuild.yaml # 直接デプロイしたい場合 gcloud run deploy go-sample \ --image gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA \ --region asia-northeast1 \ --platform managed \ --allow-unauthenticated |
- 無料枠:2026‑07‑06 時点で 月間 2 GiB メモリ・2 vCPU(約 180 h/日) が無料です。詳細は Cloud Run の料金ページ を確認してください。
デプロイパターン③ GKE(Autopilot)
Kubernetes クラスタが必要な場合は GKE Autopilot が管理負荷を最小化します。
本節では Helm によるデプロイと、シンプルな kubectl マニフェストの例を示します。
Helm チャート作成
|
1 2 |
helm create go-app # 雛形生成 |
主要な変更点(go-app/values.yaml)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
replicaCount: 2 image: repository: gcr.io/{{ .Values.projectId }}/go-sample tag: "{{ .Chart.AppVersion }}" service: type: LoadBalancer resources: limits: cpu: "500m" memory: "256Mi" requests: cpu: "250m" memory: "128Mi" |
デプロイコマンド
|
1 2 3 4 |
helm upgrade --install go-app ./go-app \ --set projectId=$PROJECT_ID \ --namespace default |
kubectl マニフェスト(シングルファイル)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: go-app spec: replicas: 2 selector: matchLabels: app: go-app template: metadata: labels: app: go-app spec: containers: - name: go-app image: gcr.io/$PROJECT_ID/go-sample:latest ports: - containerPort: 8080 resources: limits: cpu: "500m" memory: "256Mi" --- apiVersion: v1 kind: Service metadata: name: go-app-service spec: type: LoadBalancer selector: app: go-app ports: - port: 80 targetPort: 8080 |
|
1 2 |
kubectl apply -f deployment.yaml |
- 無料枠:GKE Autopilot は無料枠がなく、使用したノードリソースに対して従量課金されます。2026 年の料金は GKE Autopilot の価格ページ を参照。
CI/CD パイプラインとモニタリング
自動化と可視化が整備されていれば、デプロイは ボタン一つ で完了し、障害発生時も迅速に対応できます。ここでは GitHub Actions + Cloud Build の連携例と、主要なモニタリングサービスの有効化手順を示します。
GitHub Actions → Cloud Build トリガー
- Cloud Build トリガー作成(GitHub リポジトリを紐付け)
- ビルド構成は先述の
cloudbuild.yamlを使用。 - GitHub Actions ワークフロー (
.github/workflows/deploy.yml)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
name: CI/CD on: push: branches: - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: # ソース取得 - uses: actions/checkout@v4 # Cloud SDK のセットアップ(公式アクション) - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@v2 with: project_id: ${{ secrets.GCP_PROJECT }} service_account_key: ${{ secrets.GCP_SA_KEY }} # Cloud Build の起動 - name: Trigger Cloud Build run: | gcloud builds submit \ --config cloudbuild.yaml \ --substitutions=_ENV=prod |
- ポイント
- 環境変数
_ENVによってステージング/本番の設定を分岐させられる。 gcloud builds submitはコード変更時に自動でコンテナビルド・デプロイを実行。
ステージングと本番の分離戦略
| 方法 | 説明 |
|---|---|
| サービス名で分割 | 例: go-app-stg と go-app-prod を別々にデプロイ。Cloud Run のトラフィックシフト機能で段階的リリースが可能。 |
| Revision 利用 | Cloud Run は自動的に Revision を作成。--revision-suffix=stg などで明示的に名前付けし、トラフィック比率を調整できる。 |
| プロジェクト分離(大型組織向け) | 本番と開発用に別々の GCP プロジェクトを作成し、IAM ポリシーでアクセス制御。 |
ロギング・エラーレポート・Profiler の有効化
| サービス | 有効化手順 | 目的 |
|---|---|---|
| Cloud Logging | Go の標準 log パッケージだけで自動収集。必要に応じて google-cloud-logging-go ライブラリで構造化ログを出力。 |
ログ検索・分析 |
| Error Reporting | runtime/debug と組み合わせ、パニック情報を自動送信。cloud.google.com/go/errorreporting をインポートし、errorreporting.NewClient で初期化。 |
エラー集計とアラート |
| Cloud Profiler | デプロイ時に環境変数 GOOGLE_CLOUD_PROFILER=enabled を設定(App Engine: --enable-profiler オプション、Cloud Run/GKE は env で指定)。 |
パフォーマンスボトルネックの可視化 |
|
1 2 3 4 5 6 7 8 |
# Cloud Run のデプロイ時例(環境変数設定) gcloud run deploy go-sample \ --image gcr.io/$PROJECT_ID/go-sample:$SHORT_SHA \ --region asia-northeast1 \ --platform managed \ --allow-unauthenticated \ --set-env-vars=GOOGLE_CLOUD_PROFILER=enabled |
コストとスケーラビリティ比較(2026‑07‑06 時点)
| 項目 | App Engine 標準 | Cloud Run (マネージド) | GKE Autopilot |
|---|---|---|---|
| 課金モデル | インスタンス時間+使用 CPU/メモリ | リクエスト数 + vCPU・メモリ秒 | ノード単位の従量課金(CPU/メモリ) |
| 無料枠 | 28 h/日(F1 インスタンス)※2026‑07‑06 時点 | 月間 2 GiB メモリ・2 vCPU(約 180 h/日) | 無料枠なし |
| オートスケール | リクエストベースの自動インスタンス増減 | リクエスト単位で即時スケール、0‑1 秒以内に起動可能(小イメージの場合) | Horizontal Pod Autoscaler (HPA) によりポッド数制御 |
| Cold Start | 数秒程度(F1) | 400 ms 前後(30 MB 以下のイメージ) | 常駐ポッドのためなし |
| 適用シーン | 小規模・低トラフィック、無料枠活用したい場合 | 瞬発的なピークやマイクロサービス向け | 大規模・長期間稼働、カスタムネットワークが必要 |
各料金は 2026‑07‑06 の公式価格ページを基にしています。最新情報は必ず各サービスの「Pricing」ページをご確認ください。
よくあるエラーと対処法
| エラー | 主な原因 | 推奨対応 |
|---|---|---|
PERMISSION_DENIED (App Engine デプロイ) |
サービスアカウントにロール不足 | IAM で App Engine Deployer(または Editor)ロール付与 |
Docker ビルド失敗 (could not resolve) |
ベースイメージがプライベート、またはネットワーク制限 | パブリックレジストリ使用か、gcloud auth configure-docker で認証設定 |
API 呼び出し throttled |
クォータ超過 | リトライロジック追加・クォータ増加申請 |
| コンテナヘルスチェック失敗 | アプリ起動前に /health が呼ばれる | readinessProbe の遅延 (initialDelaySeconds) を調整 |
まとめ
- ローカル環境は Go 1.22+ と公式インストーラで取得した最新 Google Cloud SDK を使用し、認証は最小権限のサービスアカウントで行う。
- App Engine 標準は設定がシンプルで無料枠を活用できるが、Cold Start は数秒程度。フレキシブルはカスタム Docker が必須だが、起動遅延はほぼなし。
- Cloud Runはマルチステージ Docker でイメージサイズ < 30 MB に抑えると Cold Start が約400 ms と高速。公式無料枠も利用可能。
- GKE Autopilotは高度なカスタマイズが必要な大規模サービス向け。Helm による再利用性の高いデプロイが推奨される。
- CI/CDは GitHub Actions → Cloud Build のフローで一元管理し、環境変数や Revision を使ってステージング/本番を分離できる。
- モニタリングは Cloud Logging・Error Reporting・Profiler を有効化すれば、障害検知とパフォーマンス改善が容易になる。
上記手順とベストプラクティスに沿って実装すれば、Go アプリを GCP 上で 安全かつコスト効率よく デプロイできるはずです。公式ドキュメントのリンク先は随時確認し、2026 年以降も最新情報へアップデートしてください。