Skip to main content

Functions:HTTP/イベント/スケジューラーで裏側を作る⚙️⏰:教材アウトライン(20章)

到達イメージ(この20章でできるようになること)🎯

  • HTTPで 自分のAPI を作って公開できる🌐
  • Firestoreの更新をトリガーにして 自動処理 ができる⚡

Cloud Functions Role Overview

  • スケジュールで 定期実行(Cron) ができる⏰(Firebase)
  • そして最後に Firestore更新→Slack通知 を完成させる📨✨(Slack開発者ドキュメント)
  • 開発はAI(Antigravity / Gemini CLI)で加速する🤖🧰(Firebase)

1章:Functionsって何?「裏側」を置く場所の全体像🗺️

  • 🎯 狙い:フロントとFunctionsの役割分担がわかる🙂
  • 📚 キーワード:HTTP / イベント / スケジュール / “サーバレス”
  • 🛠️ 手を動かす:例を見て「どの処理をFunctionsに置くべきか」仕分けする✍️
  • ✅ チェック:「秘密情報」「集計」「通知」「重い処理」がフロントNGな理由を説明できる

2章:2nd genを選ぶ理由(ざっくりでOK)🚀

  • 🎯 狙い:なぜ2nd gen推しなのか腹落ちする
  • 📚 キーワード:Cloud Runベース / 同時処理(concurrency)/ 冷スタート
  • 🛠️ 手を動かす:1st gen/2nd genの違いを“言葉で”まとめる📝
  • ✅ チェック:新規は2nd gen中心で迷わなくなる(Firebase)

3章:ランタイムと言語の選び方(Node / Python / それ以外)🧩

  • 🎯 狙い:何で書けるかを整理して迷子にならない

  • 📚 キーワード:Node.js / Python / ランタイム指定

  • 🛠️ 手を動かす:

    • Node:Node.js 20 or 22 が現役、18は非推奨…みたいな位置づけを把握👀(Firebase)
    • Python:3.10〜3.13(デフォルト3.13) を把握👀(Firebase)
  • ✅ チェック:「今回はTS中心で、必要ならPythonも使える」状態になる

4章:最小セットアップ(CLI初期化→1個デプロイ)🌱

  • 🎯 狙い:「動いた!」を最速で作る😆
  • 📚 キーワード:firebase init / deploy / codebase
  • 🛠️ 手を動かす:Functionsを初期化して、HelloなHTTP関数をデプロイ
  • ✅ チェック:デプロイが成功し、URLにアクセスしてレスポンスが返る
  • 🤖 AI活用:Gemini CLIのFirebase拡張に“初期化/テンプレ生成”を手伝わせる(Firebase)

5章:TypeScriptの基本構成(読みやすさ命)🧱

  • 🎯 狙い:初心者でも破綻しないフォルダ設計にする
  • 📚 キーワード:src/ 分割 / services / utils / types
  • 🛠️ 手を動かす:HTTP・Firestore・共通処理を分離する

Functions Folder Structure

  • ✅ チェック:「どこに何を書くか」迷いが減る

6章:HTTPトリガー入門(Web APIの入口)🌐

  • 🎯 狙い:onRequestでAPIを作れる
  • 📚 キーワード:onRequest / Request / Response
  • 🛠️ 手を動かす:GET /health を作る(監視にも使える)
  • ✅ チェック:ブラウザで叩いてJSONが返る

7章:HTTPでJSONを正しく扱う(入力と出力)📦

  • 🎯 狙い:APIっぽい形になる
  • 📚 キーワード:JSON / status code / エラーレスポンス
  • 🛠️ 手を動かす:POST /echo(入力を検証して返す)
  • ✅ チェック:400/200を使い分けできる

8章:CORSとセキュリティの最初の壁🧱🔒

  • 🎯 狙い:フロントから呼ぶ時の“つまずき”を潰す
  • 📚 キーワード:CORS / origin / preflight
  • 🛠️ 手を動かす:許可originを限定して呼び出し確認
  • ✅ チェック:「なんでCORSが要るの?」を一言で言える

9章:Callable(onCall)で“認証つきAPI”を楽にする🔐✨

  • 🎯 狙い:フロントから安全に呼ぶ王道を掴む
  • 📚 キーワード:onCall / Auth連携 / App Check連携
  • 🛠️ 手を動かす:ログインユーザーだけ実行できるCallableを作る
  • ✅ チェック:未ログインだと弾かれる
  • 📌 根拠:Callableの仕組み(プロトコル)

10章:設定と秘密情報(APIキーをコードに書かない)🗝️🧯

  • 🎯 狙い:事故りがちな「秘密の管理」を最初に覚える
  • 📚 キーワード:Secret Manager / defineSecret / 環境差分
  • 🛠️ 手を動かす:Slack Webhook URLをSecretとして扱う準備
  • ✅ チェック:「リポジトリに秘密を置かない」が習慣になる

11章:Firestoreイベント入門(自動処理の気持ちよさ)⚡

  • 🎯 狙い:Firestore更新でFunctionsが動く
  • 📚 キーワード:onDocumentCreated / onDocumentWritten
  • 🛠️ 手を動かす:messages/{id} 作成→加工して別フィールドに保存

Firestore Trigger Event

  • ✅ チェック:更新ループ(無限発火)を避ける考え方がわかる(Firebase)

12章:イベント処理の設計(冪等・重複・再試行)🧠

  • 🎯 狙い:「たまに2回動いた」でも壊れない設計へ
  • 📚 キーワード:idempotent / retry / 重複排除
  • 🛠️ 手を動かす:処理済みフラグ or イベントIDでガードする
  • ✅ チェック:二重通知を防ぐ作戦を言える

13章:通知・集計の基本形(実務っぽい)📣📊

  • 🎯 狙い:「通知」「カウンタ更新」みたいな王道パターンを覚える
  • 📚 キーワード:集計ドキュメント / トランザクション的発想
  • 🛠️ 手を動かす:コメント数カウンタを更新する
  • ✅ チェック:「どこに集計を置くか」説明できる

14章:スケジュール関数(Cronで定期実行)⏰

  • 🎯 狙い:毎日/毎時の自動処理ができる
  • 📚 キーワード:onSchedule / cron / timezone
  • 🛠️ 手を動かす:毎朝レポートを作る(Firestoreに書く)

Scheduled Functions (Cron)

  • ✅ チェック:スケジュールがCloud Schedulerで動くイメージがある(Firebase)

15章:運用の基本(ログ、エラー、アラートの入口)🧯👀

  • 🎯 狙い:落ちても直せる人になる
  • 📚 キーワード:Logging / structured log / エラー追跡
  • 🛠️ 手を動かす:重要ログ(開始/成功/失敗)を整える
  • ✅ チェック:どこを見れば原因に辿れるか分かる

16章:ローカル検証(最小だけEmulator)🧪

  • 🎯 狙い:本番を汚さず試すクセをつける
  • 📚 キーワード:Functions emulator / Firestore emulator
  • 🛠️ 手を動かす:ローカルでイベント→関数実行を確認
  • ✅ チェック:本番に触らず確認できる流れがある

17章:AIを“裏側”に組み込む(Genkit連携の入口)🤖🔥

  • 🎯 狙い:FunctionsでAIワークフローを回す入口を作る
  • 📚 キーワード:Genkit / onCallGenkit / ストリーミング
  • 🛠️ 手を動かす:短文を「整形/要約」して返すCallableを作る

AI Integration in Functions

  • ✅ チェック:「AIの出力は常に正しいわけじゃない」前提のガードが入る(Firebase)

18章:AIで開発を速くする(Antigravity / Gemini CLI)🛸💻

  • 🎯 狙い:実装・修正・テストの“下ごしらえ”をAIにやらせる

  • 📚 キーワード:Firebase MCP server / Gemini CLI拡張 / slash commands

  • 🛠️ 手を動かす:

    • Gemini CLIのFirebase拡張を使って、構成チェックや手順書生成をさせる
    • MCP経由で「設定・参照」系の作業を補助させる
  • ✅ チェック:AIに丸投げせず「レビュー前提」で回せる(Firebase)

    • 参考:MCP serverはAntigravityやGemini CLIなどから利用できる(Firebase)

ここからミニ課題:Firestore更新 → Slack通知 📩✨(3章で完成)

19章:Slack通知の準備(Webhook + Secret)🔔🗝️

  • 🎯 狙い:Slackに安全に投げる準備が整う
  • 📚 キーワード:Incoming Webhooks / Secret / メッセージ整形
  • 🛠️ 手を動かす:Webhookを作ってSecretに登録→テスト送信

Slack Notification Flow

  • ✅ チェック:Webhook URLがコードやGitに出てこない(Zenn)

20章:Firestore更新→Slack通知を完成(実務の形に)🏁🔥

  • 🎯 狙い:実際のアプリ運用で使える自動通知が完成

  • 📚 キーワード:onDocumentWritten / 重複防止 / 失敗時リトライ設計

  • 🛠️ 手を動かす:

    • reports/{id}posts/{id} 更新でSlackへ通知
    • 連投防止(処理済みフラグ、イベントID、時間窓など)を入れる
  • ✅ チェック:

    • 「更新→通知」が安定して動く
    • 失敗ログから原因が追える
    • “本番で怖いポイント”が言語化できる(Firebase)

補足:.NETや“別言語”はどう扱う?🧩

Multi-Language Runtime Map

  • Firebase Functions自体は Node/TS が主軸で、Pythonも利用可能(3.10〜3.13) です(Firebase)

  • もし .NET を“関数ランタイムとして”使うなら、Firebaseの外側で Cloud Run functions(.NET 8 など)に置いて、HTTPで連携するのが現実的です(サポート状況は公式のランタイム表で確認できる)(Google Cloud Documentation)

    • ここでのC#は、主にAdmin SDKでの運用ツール/バッチ側(別枠)として育てるのが相性良いです🙂