第04章:最初の到達点:Cloud Runで“まず公開”を最短でやる🚀
この章は “まず公開できた!”の成功体験 を最短で作る回だよ😆✨ Dockerfileをガチ最適化するのは後ろの章でやるので、ここでは 最短ルートでWebに出す ことに集中するね💪
4.1 この章のゴール🎯✨
この章を終えると、次ができるようになるよ👇
- ✅ 自分のアプリを Cloud Runにデプロイして URLを発行できる
- ✅ 公開(誰でもアクセスOK)/ 非公開(認証が必要) を切り替えられる
- ✅ 「動かない!」ときに ログを見て原因の当たりを付けられる 👀
4.2 ざっくり仕組み(超イメージ)🧠🗺️
最短ルート(ソースからデプロイ)だと流れはこう👇
- ローカルのソースをアップロード📦
- Cloud側でビルドされてコンテナイメージになる🏗️
- そのイメージがレジストリに保存される🏪
- Cloud Runがそのイメージを起動してURLが出る🌍
この「ソースから一発デプロイ」は gcloud run deploy --source . でできるよ、って公式にも書いてあるやつ👍 (Google Cloud Documentation)
(裏側では Cloud Build と Artifact Registry が動く、ってイメージでOK)(Google Cloud Documentation)
もちろん「すでに作ったコンテナイメージをデプロイ」もできるよ(後半で本格的にやるやつ)(Google Cloud Documentation)
4.3 まず「Cloud Runで動く最低条件」だけ押さえる🔑🧯
Cloud Runで初心者が一番ハマるのはココ👇
- アプリが
0.0.0.0で待ち受けてない(localhostのままだと外から来れない) PORT環境変数のポートで待ち受けてない(Cloud Run側が指定するポートでListen必須)
これを守らないと、よくあるこのエラーになる😵
「コンテナが起動したけど PORT=8080 で待ち受けなかった」みたいなやつ。公式トラブルシュートにも載ってる💥 (Google Cloud Documentation)
最小のTypeScript(Express例)✅
(すでに別フレームワークでも考え方は同じだよ👌)
import express from "express";
const app = express();
app.get("/", (_req, res) => {
res.status(200).send("Hello from Cloud Run! 🚀");
});
const port = Number(process.env.PORT ?? "8080");
// Cloud Runでは 0.0.0.0 で待つのが大事!
app.listen(port, "0.0.0.0", () => {
console.log(`Listening on port ${port}`);
});
4.4 ハンズオン:最短でデプロイしてURLを出す🛠️🚀(10ステップ)
ここからは Windows + PowerShell で進めるよ🪟✨ (コマンドはコピペでOK👌)
Step 1:プロジェクトとリージョンを決める🧭
日本なら東京リージョンが扱いやすい(例:asia-northeast1)🌸
Step 2:ログイン&プロジェクト指定🔐
gcloud auth login
gcloud config set project <YOUR_PROJECT_ID>
Step 3:必要なAPIを有効化⚙️
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
Step 4:デプロイ!(ソースから一発)🚀
プロジェクトのルート(package.json がある場所)で👇
gcloud run deploy <SERVICE_NAME> --source . --region asia-northeast1
-
実行すると途中で聞かれることがある👇(環境や設定による)
- 「認証なしで呼べるようにする?」みたいな質問
- 最短で動作確認したいなら “Yes” にするとラク😆
ちなみに Cloud Runは「呼び出し元IAMチェック(=認証必須)」が デフォルトで有効 になってる、って公式にも書いてあるよ。(Google Cloud Documentation)
Step 5:表示されたURLを開いて確認🌍👀
最後に Service URL: https://... が出るのでブラウザで開く!
Step 6:ログを見る📜👀
「動いたけど不安!」ならログ見るのが最速😎 (Cloud ConsoleからでもOK。まずは“見える化”が正義✨)
4.5 公開/非公開の切り替え(超重要)🔒↔️🌐
ここ、あとで事故りやすいから今のうちに感覚だけ掴もう🧯
A) 公開(誰でもアクセスOK)にしたい🌐
公式は「Invoker IAMチェックを無効化するのがおすすめ」って言ってる👍 (Google Cloud Documentation)
新規デプロイ時にやるなら👇(公式例)
gcloud run deploy <SERVICE_NAME> --source . --region asia-northeast1 --no-invoker-iam-check
B) 非公開(認証が必要)にしたい🔒
これがセキュリティ的には基本形。
gcloud run deploy に --no-allow-unauthenticated を付ける例が公式ブログにもあるよ。(Google Cloud)
gcloud run deploy <SERVICE_NAME> --source . --region asia-northeast1 --no-allow-unauthenticated
4.6 「最短デプロイ」でよくある詰まりTop5😵💫➡️✅
1) “PORT=8080 で待ち受けてない”エラー💥
- 原因:
localhostでlistenしてる /PORTを読んでない - 対策:
0.0.0.0+process.env.PORTを使う(4.3のコード) 公式にも典型例として載ってるよ (Google Cloud Documentation)
2) 403/401でアクセスできない🔒
- 原因:非公開設定(認証必須)になってる
- 対策:まず動作確認だけなら
--no-invoker-iam-checkで公開にする (公開/非公開の考え方は公式にまとまってる)(Google Cloud Documentation)
3) ビルドが落ちる(依存やスクリプト)🧱
- 原因:
package.jsonのbuild/startが想定と違う、lockfile無い等 - 対策:この章は「動いた」優先でOK。後半章で綺麗に整える👍
4) リージョン混乱(どこに作られた?)🌀
- 原因:リージョンを毎回指定してない
- 対策:リージョンは毎回コマンドに書く(迷子防止)🧭
5) 「お金かかるの怖い」💰😨
Cloud Runは 使った分だけ課金で、リソース使用は 100ms単位で丸めって明記されてるよ。(Google Cloud) さらに同時実行(concurrency)で1インスタンスを共有できる、って話も公式にある(ただしこの章では触るだけ)。(Google Cloud)
4.7 ミニ課題(“公開できた”を脳に焼く🔥)📝✨
- ✅
/で文字を返す(HelloでOK) - ✅
PORTを読んで0.0.0.0でlisten - ✅ Cloud RunにデプロイしてURLで表示
- ✅ 公開→非公開→公開を1回ずつ切り替えてみる(触って覚える)🔒↔️🌐
4.8 AIに投げるコピペ用プロンプト集🤖✨(Copilot/Codex向け)
-
🧠 ポート対応チェック
- 「このNode/TSサーバがCloud Runで動くように、PORT環境変数対応と0.0.0.0待受けに直して。差分で出して」
-
🧯 Cloud Runの起動失敗ログを読ませる
- 「このCloud Runログから“最有力原因”を3つに絞って。各原因の確認手順もつけて」
-
🔒 公開/非公開の判断
- 「個人開発のAPIをCloud Runで公開する。公開(誰でも)と非公開(認証必須)の判断基準を、事故例つきで説明して」
次の第5章では、ここで“動いたもの”を 「本番らしいコンテナ」 に整えていくよ🏗️🐳
もし今のリポジトリ構成(package.json とフォルダ構成)を貼ってくれたら、この章の手順に合わせて “そのままコピペで通る deploy コマンド” に寄せて書き換え案も作れるよ😆👍