PR ごとのステージング環境: コメント 1 つで devcontainer / compose を Cloud Run に一時起動し、LB + IAP で守る
PR に 🚀 とコメントすると、そのブランチの devcontainer(または docker-compose)構成を Cloud Run 上で一定時間だけ起動し、ロードバランサー経由で見られるようにする仕組み。PR ごとに別のステージングが立つ。作者はこれをコーディングエージェントで 1.5 日で作ったと報告している。
どんなときに使う?
- レビュー時に「実際に動くもの」を触りたいが、共有ステージングの取り合いや、ローカルで各自立ち上げる手間をなくしたい
- 使わない時間はお金をかけたくない(一定時間で自動停止)
構成(投稿の説明を整理)
- GitHub App が PR コメントを受け取り、🚀 のようなトリガー文字列を検出する
- PR のブランチにある devcontainer / docker-compose の定義をもとに Cloud Run でサービスを起動する。PR 単位で別サービスにするので複数同時に立つ
- 前段に HTTPS ロードバランサーを置き、IAP(Identity-Aware Proxy)で認証する。TLS 終端と「社内の人だけ見られる」をアプリ側に実装しなくて済む
- 定期的にヘルスチェックし、一定時間たったら停止・削除する
- GCP 側のリソース(LB、IAP、権限など)は Terraform で用意する
押さえどころ
- 認証は LB + IAP に寄せる。プレビュー環境ごとに Basic 認証などを仕込むより漏れにくい(同じ考え方は 社内自作アプリ基盤: IAP 入口 + ゲートプロキシ認可 + テナント別 DB にも出てくる)
- 「起動」だけでなく「監視」と「後片付け」まで作るのが本体。消し忘れたプレビュー環境はコストとセキュリティの両方で負債になる
- compose の複数コンテナを Cloud Run に載せる方法(サイドカー構成にするか、1 コンテナにまとめるか)は投稿では触れられていない。DB などの状態を持つサービスは、使い捨て前提のデータで動かす設計にしておく
似た手段
- Cloudflare なら、ローカルや CI で立てた開発サーバーを
cloudflaredの Quick Tunnel でメール認証つきで共有する方法もある cloudflared Quick Tunnel をメール認証つきで共有する(--allowed-mail)