← 戻る

Firebase Cloud Functions の実体調査 — Webhook 処理は過度なインフラ


背景

Enterprise フレームワークからエッジコンピューティングへの移行時、既存の Firebase Cloud Functions の必要性を再評価。

発見

Firebase Cloud Functions で実装していた sendMail の実体は単なる Slack Incoming Webhook への POST。

// Firebase Cloud Functions の実体
export const sendMail = httpsCallable(async (data) => {
  return fetch('https://hooks.slack.com/services/...', {
    method: 'POST',
    body: JSON.stringify({ text: message })
  });
});

問題点

  • GCP インスタンス起動、スケーリング、ホスト、監視の複雑さ
  • コールドスタート遅延
  • 固定コスト(Active プロジェクト課金)
  • 学習コスト・運用オーバーヘッド

解決策

エッジ関数(CF Pages Functions)で同じ処理を 1 行で実装。

// CF Pages Functions (functions/contact.ts)
export const onRequest: PagesFunction = async (context) => {
  const { name, email, message } = await context.request.json();

  await fetch('https://hooks.slack.com/services/...', {
    method: 'POST',
    body: JSON.stringify({ text: `${name}: ${message}` })
  });

  return new Response('OK');
};

学び

インフラの複雑さは必要性から逆算すべき。 単純な webhook 処理には GCP VM より CF Functions の方が適切。デプロイも自動。

移行メリット

  • デプロイが簡単(functions/ に置くだけ)
  • コールドスタートなし
  • 従量課金(Free 10万req/日)
  • 監視・スケーリング不要