7/23/2025
最近、個人開発しているポートフォリオサイト(Next.js製)を Google Cloud Platform (GCP) の Cloud Run にデプロイしたところ、ローカルでは動いていた .env
環境変数が反映されず、API通信やOGP設定などが軒並み崩壊していました。
この記事ではその原因と解決方法を、Next.js × Docker × Cloud Build × Cloud Run の構成で紹介します。
Cloud Run にデプロイ後、Next.jsアプリが NEXT_PUBLIC_API_KEY
や RECAPTCHA_SECRET_KEY
などの環境変数を読み込んでおらず、次のような問題が発生しました。
ローカルでは .env
にちゃんと書いてあり、npm run dev
では問題なく動いていたのに、Cloud Run では全滅という地獄。
結論から言うと:
.env
ファイルは Docker ビルド時に含まれていなかった
かつ
Cloud Run 側にも環境変数が設定されていなかった
.env
を .gitignore
に入れてる → GitHub経由のCloud Buildでは .env
がビルド対象外.env
を読み込む仕組みがない(明示的に取り込まないと反映されない).env
は存在しない.env
を書き出す(おすすめ)Cloud Build の cloudbuild.yaml
に .env
を作るステップを追加し、Docker ビルド時にそれを含める。
steps:
- name: "gcr.io/cloud-builders/docker"
entrypoint: "bash"
args:
- "-c"
- |
echo "NEXT_PUBLIC_API_KEY=${_NEXT_PUBLIC_API_KEY}" >> .env
echo "RECAPTCHA_SECRET_KEY=${_RECAPTCHA_SECRET_KEY}" >> .env
docker build -f Dockerfile -t gcr.io/$PROJECT_ID/${_SERVICE_NAME}:$COMMIT_SHA .
そして Dockerfile 側で .env
をコピー:
COPY .env .env
gcloud run deploy
時に --set-env-vars
フラグで指定:
gcloud run deploy my-app \
--image gcr.io/my-project/my-app \
--region asia-northeast1 \
--set-env-vars NEXT_PUBLIC_API_KEY=xxxxx,RECAPTCHA_SECRET_KEY=yyyyy
CI/CDでも使えるし、GUIからも設定可能。
項目 | 内容 |
---|---|
フレームワーク | Next.js 14 |
ホスティング | Cloud Run |
ビルド | Cloud Build + Dockerfile |
環境変数管理 |
|
インフラ管理 | GitHub Actions + gcloud CLI |
.env
ファイルはあくまでローカル環境向けであり、本番環境では明示的な渡し方が必要.env
を push しない方が安全Cloud Run と環境変数の相性はややハマりやすいですが、仕組みを理解すれば問題ありません。今回のようなトラブルも、仕組みを理解して対処すれば怖くない!
同じ構成でつまずいた方の参考になれば幸いです 。