第19章:サーバー処理の選択肢(Functions/Cloud Run)🧠⚙️
この章は「Hosting / App Hosting だけじゃ足りない “サーバー側の仕事” を、どこに置く?」をスパッと決められるようになる回です😎✨ (API、Webhook、バッチ、AI呼び出し、画像処理…などなど!)
この章でできるようになること🎯
- 「これ、サーバー必要?」を判断できる🤔➡️✅
- Cloud Functions for Firebase と Cloud Run を使い分けできる🧩
- Hosting の URL(
/api/**みたいな)を Functions に繋げることができる🔁🌐 - AI(AI Logic / Genkit / Gemini / MCP / Gemini CLI)で、設計〜実装の詰まりを潰せる🤖🧯
1) そもそも「サーバー処理」って何?🤔💡

Hosting は基本「静的ファイル配信(HTML/JS/CSS)」が得意です⚡ でも、こういうのはサーバーが必要になりがち👇
- フォーム送信 → メール送る📩
- DBを安全に更新(権限チェック込み)🔐
- 外部サービスからのWebhook受け取り(決済/通知など)🔔
- 重い処理(画像変換、PDF生成、AIの前処理)🧱
- 定期実行(毎朝集計、期限切れ掃除)⏰
ここで登場するのが Functions / Cloud Run です🚀
2) 結論:どう選ぶ?(3秒で決める)⚡🧩

A. Cloud Functions for Firebase を選ぶ👍
こんなとき強いです👇
- Firebase(Auth/Firestore/Storage など)と 密接に連携したい🧲
- “イベントで動く” 処理が欲しい(Firestore更新で動く等)📌
- まず最短で作りたい(学習コスト低め)🏃♂️💨
言語/ランタイムの目安(2026-02時点)👇
- Node.js は 20 / 22 を完全サポート、18 は 2025年初頭に非推奨扱い🟩 (Firebase)
- Python は 3.10〜3.13 をサポート、3.13 がデフォルト🐍 (Firebase)
- Node の選択は
package.jsonの"engines"かfirebase.jsonのfunctions.runtimeで指定できます🧾 (Firebase)
B. Cloud Run(または Cloud Run functions)を選ぶ💪
こんなとき強いです👇
- .NET や、より自由な構成(依存ライブラリ/OSツール)を使いたい🧰
- 重い処理・長めの処理・メモリ多めが必要🏋️
- “普通の Web サーバー” っぽく作りたい(コンテナ/HTTP)🌐
Cloud Run functions のランタイム例(ページ更新: 2026-02-12)👇
- Python 3.13(
python313)あり🐍 - .NET 8(
dotnet8)あり🟦 - Node.js 20 は 2026-04-30 に deprecation(先々の寿命も見ながら選べる)⏳ (Google Cloud Documentation)
C. App Hosting だけで完結できるケースもある😌
- SSR/フルスタック(Next.jsなど)を App Hosting で運用して、画面側は完結🧩
- ただし「定期実行」「Webhook」「バッチ」などは、結局 Functions/Run が便利になりがちです⚙️
3) Hosting から “同じドメインで” Functions に繋げる(超重要)🔁🌐

これができると何が嬉しい?😆
- フロントから
/api/...を叩ける(別ドメインじゃない) - CORS 地獄を回避しやすい🔥
- デプロイの流れがスッキリする✨
Firebase Hosting の rewrites は、リクエストを Functions や Cloud Run に振れます📌
4) 手を動かす:/api/** を Cloud Functions(TypeScript)に繋ぐ🛠️🟩
ここは「最短で動く」を優先します🏁✨ (すでに Hosting をデプロイできている前提でOK)
4-1. Functions を追加する(初期化)🧱

プロジェクトのルートで👇
firebase init functions
- TypeScript を選ぶ✨
- 依存インストールも基本は OK(迷ったら Yes)👍
4-2. Node のバージョンを決める(おすすめ: 22)🟩
functions/package.json に👇(例)
{
"engines": { "node": "22" }
}
Node 20/22 がサポート対象で、18 は非推奨扱いなので「新規なら 22」が無難です👍 (Firebase)
4-3. HTTP API を 1本作る(apiHello)👋🌐
functions/src/index.ts
import { onRequest } from "firebase-functions/v2/https";
import { logger } from "firebase-functions";
export const apiHello = onRequest((req, res) => {
logger.info("apiHello called", { path: req.path, query: req.query });
res.json({
ok: true,
message: "Hello from Cloud Functions! 🎉",
now: new Date().toISOString(),
});
});
4-4. Hosting の /api/** を Functions に rewrite する🔁

firebase.json の hosting.rewrites に追加します👇
(rewrite は上から順に効くので、** -> index.html より上に!)
{
"hosting": {
"rewrites": [
{
"source": "/api/**",
"function": {
"functionId": "apiHello",
"region": "asia-northeast1",
"pinTag": true
}
},
{ "source": "**", "destination": "/index.html" }
]
}
}
functionIdは関数名(ここではapiHello)📛pinTag: trueは「Hosting 側が特定の関数バージョンに固定」できて、プレビュー環境でも事故りにくくて良いです🧷(例が公式にあります)(Firebase)
4-5. ローカルで動作確認(エミュレータ)🧪
firebase emulators:start --only hosting,functions
ブラウザで👇
http://localhost:5000/api/hello(または表示される URL)👀✨
4-6. デプロイ🚀
firebase deploy --only functions,hosting
公開サイトの https://あなたのドメイン/api/hello が JSON を返せたら成功🎉🎉🎉
5) じゃあ Cloud Run はいつ使う?(わかりやすい例)🟦🔥

「Functions だと辛い」代表例💦
- .NET(C#)で書きたい(既存資産がある)🟦
- 画像/動画処理でネイティブ依存が多い(ffmpeg 等)🎞️
- “普通のWebサーバー” を立てたい(ルーティング多い/ミドルウェア多い)🧩
Cloud Run functions なら、.NET 8 や Python 3.13 がランタイムとして載っています(2026-02-12 更新)🧾 (Google Cloud Documentation)
そして Hosting 側から Cloud Run に rewrite もできます👇(公式例あり)(Firebase)
6) AI を絡めると “サーバー置き場” が一気に決まる🤖🧠

6-1. 「AIをクライアントから直接呼ぶ」なら AI Logic が強い📱🌐🤖
Firebase AI Logic は、モバイル/Web アプリから Gemini/Imagen を直接呼ぶケース向けのクライアントSDKで、不正クライアント対策や Firebase 連携が用意されています🛡️ (Firebase)
ただし「ログ保存」「課金ガード」「長い前処理」みたいな“サーバー都合”があるなら、Functions/Run 併用が現実的です👍
6-2. Genkit を Functions から呼ぶ(AI処理を “フロー” にする)🧰✨
Cloud Functions for Firebase には onCallGenkit があって、Genkit の Flow を callable で包んで呼べます📞🤖 (Firebase)
(認証情報が自動で付く呼び出しルートを作りやすいのが嬉しい!)
6-3. Gemini in Firebase / Gemini CLI / MCP で “詰まり” を消す🧯
- Firebase コンソール内の AI アシスタント(Gemini in Firebase)で、設定やデバッグを相談できます🧯 (Firebase)
- さらに Firebase MCP server を使うと、AIツールが Firebase プロジェクトを理解して操作しやすくなります🧩 (Firebase)
- Firebase MCP Server は GA になって、Gemini CLI 向けの公式拡張も出ています(2025-10-08)🚀 (The Firebase Blog)
- Firebase の AI 支援ドキュメント側にも **「MCP / Gemini CLI / エージェント」**の導線が整理されています(日本語ページあり)🗺️ (Firebase)
Gemini CLI に投げると強いプロンプト例💬🧠
- 「このプロジェクトで
/api/**を Functions に繋ぐfirebase.jsonの rewrites を提案して」 - 「Node 22 と Node 20 のどっちを選ぶべき?サポート期限も踏まえて」(Google Cloud Documentation)
- 「この API は Functions と Cloud Run、どっちが事故りにくい?理由も」
7) ミニ課題🎒✨(20〜30分)
次のうち 2つを選んで、どこに置くか決めてください✍️(Functions or Cloud Run)
- お問い合わせフォーム送信📩
- 外部サービスWebhook受信🔔
- 画像をサムネ化🖼️
- 毎朝9時に集計してFirestoreに保存⏰
- AIで「リリース前チェックリスト」を自動生成🤖🧾
提出物(自分用メモでOK)
- 選んだ2つ
- 置き場(Functions / Cloud Run)
- 理由(1行でOK)
8) チェック✅✅✅
- Hosting から
/api/**を rewrite して、同一ドメインで API を動かせる🌐 - Functions は Node 20/22 が主力で、18 は非推奨扱いだと説明できる🟩 (Firebase)
- Cloud Run なら .NET 8 / Python 3.13 なども選べる(用途が違う)🟦🐍 (Google Cloud Documentation)
- AI Logic / Genkit / MCP / Gemini CLI を「設計の補助輪」として使える🤖 (Firebase)
次の章(第20章)は、この「サーバー置き場」の上に AI合体(手順書・自動チェック・最終完成) を乗せて、いよいよ“実務っぽいリリース”に仕上げますよ🏁🔥😆