こんにちは、こんです🦊
SlackボットをCloud Runで動かそうとしたとき、
「え、なんでSLACK_BOT_TOKENがNoneになってるの?」という事態に遭遇しました。
今回はその原因だった「環境変数」の扱いについて、実際にハマったポイントと対策をまとめておきます。
🤖 Cloud Runで.envが効かない理由
ローカルでFlaskアプリを動かすとき、
from dotenv import load_dotenv
load_dotenv()
と書いて .env に設定した環境変数を読み込めます。
でも、Cloud Runはそもそも .env ファイルを読み込みません。
僕も最初「アップロードしたし読み込まれるでしょ」と思ってたんですが…全く反応せず😇
なので、Cloud Runでは .env ではなく --set-env-vars で渡すのが正解です。
✅ Cloud Run の正しい環境変数設定方法
Cloud Shellなどからデプロイするとき、こんな感じで明示します:
gcloud run deploy workpulse-app \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars SLACK_BOT_TOKEN=xxx,SLACK_SIGNING_SECRET=xxx,SPREADSHEET_ID=xxx
これをやらずに .env を置いただけだと、
os.getenv("SLACK_BOT_TOKEN") → None
という悲劇になります。
💡 ローカル開発と本番を分けて管理する
ローカルでは .env を使って開発しつつ、
本番(Cloud Run)では --set-env-vars で明示的に渡す。
こうしておくと「環境依存のエラー」が減ります。
# ローカル用
from dotenv import load_dotenv
load_dotenv()
# 本番ではCloud Runの環境変数が優先される
SLACK_BOT_TOKEN = os.getenv("SLACK_BOT_TOKEN")
🛠 おすすめ運用ルール
.env は .gitignore に追加(セキュリティのため)
Cloud Run用の .sh スクリプトを用意して再デプロイしやすく
🔁 デプロイ後に値を変更したいときは?
環境変数の内容を変えたくなったら、再デプロイが必要です:
gcloud run deploy workpulse-app \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars SLACK_BOT_TOKEN=新しい値,...
Cloud Runは、再起動=再デプロイだと考えるとシンプルです。
🎯 まとめ
Cloud Runでは .env は読み込まれない!
この一文だけでも知っておくと、無駄に悩まずに済むと思います。
SlackボットでもWebhookでも、環境変数が必要なケースは多いので、
「ローカルと本番でどう分けるか?」を考えておくと後々ラクです。
それでは、また次の実験で🧪
#100日チャレンジ #Slackボット #CloudRun #Python #Flask #DX開発メモ #環境変数あるある #業務効率化