概要
Firebase は Google 提供の BaaS(Backend as a Service)で、認証・リアルタイムDB・ドキュメントDB・ホスティング・サーバーレス関数・分析などを統合的に提供します。Web/モバイル開発で、バックエンド構築・運用を最小化し、素早くプロダクトをリリースできます。
- 主な機能:Authentication / Firestore / Realtime Database / Cloud Functions / Hosting / Storage / Remote Config / App Check / Analytics
- 向いているケース:スピード重視のプロトタイプ〜中規模サービス、クライアント主導のデータアクセス、イベント駆動
- 注意点:ドキュメント設計・セキュリティルール(
firestore.rules)の設計、課金設計、ベンダーロックインの検討
基本
プロジェクト構成の基本
- Firebase コンソールでプロジェクト作成
- アプリ(Web/iOS/Android)を追加し、設定スニペットを取得
- 必要なプロダクト(Auth/Firestore/Hosting 等)を有効化
- ローカルでは Firebase Emulator Suite で統合開発が可能
Web SDK の初期化(モジュラ版)
// npm i firebase
import { initializeApp } from "firebase/app";
import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
import { getFirestore, collection, addDoc, getDocs } from "firebase/firestore";
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_APP.firebaseapp.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_APP.appspot.com",
messagingSenderId: "....",
appId: "...."
};
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
// Google ログイン
const provider = new GoogleAuthProvider();
document.getElementById("loginBtn").addEventListener("click", async () => {
await signInWithPopup(auth, provider);
});
// Firestore CRUD (例)
document.getElementById("addBtn").addEventListener("click", async () => {
await addDoc(collection(db, "todos"), { title: "Sample", done: false });
});
document.getElementById("listBtn").addEventListener("click", async () => {
const snap = await getDocs(collection(db, "todos"));
const list = snap.docs.map(d => ({ id: d.id, ...d.data() }));
console.log(list);
});
セキュリティルール(Firestore の例)
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// 認証済みユーザーは自身のドキュメントにのみ読み書き
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
// 公開コレクションの読み取りのみ許可
match /public/{document=**} {
allow read: if true;
allow write: if false;
}
}
}
基礎
データ設計の考え方(Firestore)
- ドキュメント指向:正規化し過ぎず、読み取り回数を最適化するための冗長化も検討
- クエリ設計:複合インデックス前提。UI要件から逆算してクエリ→スキーマを決める
- ルール駆動:
request.authやresource.dataでの条件分岐を明確に
Emulator Suite の活用
# ローカルで Auth / Firestore / Functions などを起動
firebase init emulators
firebase emulators:start
導入
最小サンプル(Auth + Firestore + Hosting)
npm i firebase- 上記「基本」の初期化コードを設置
- Hosting を有効化し、ビルド出力をデプロイ
firebase init hosting
firebase deploy --only hosting
Functions(サーバーレス)
firebase init functions
# TypeScript 推奨。トリガー例:onCall/onRequest/onDocumentWritten など
最新情報
Firebase は更新が活発です。公式の Release Notes / Blog / GitHub をウォッチして、SDK メジャー更新や料金の変更に注意しましょう。
- Firebase Release Notes(Web/JS SDK・CLI 等)
- Firebase Blog(新機能・ベストプラクティス)
- GitHub firebase-js-sdk(Issue/PR で挙動確認)
※ このページは概念・実装指針に焦点。実際の API バージョンや挙動は公式の最新ドキュメントをご確認ください。
応用
よくある構成例
- SPA + Firestore + Auth + Hosting(Jamstack に近い体験)
- Cloud Functions + Firestore トリガーで非同期処理
- App Check + セキュリティルールで不正アクセス対策
- Analytics + Remote Config A/B テスト
App Check 導入の流れ(Web)
- App Check を有効化(reCAPTCHA v3 / Enterprise など)
- クライアント側でトークンを初期化
- バックエンド(Functions/Storage 等)で検証を必須化
発展
大規模化に向けたポイント
- 読み取り最適化:1 画面あたりの読み取り回数・サイズを計測し、キャッシュ・集約を検討
- ルールのテスト:
firebase emulators:execとルールユニットテスト - 監査:Cloud Logging / BigQuery 連携でモニタリング
- 費用管理:予算アラート、強制上限の検討
Functions のベストプラクティス
- リージョンの明示(クライアント・DB と同一リージョンに寄せる)
- コールドスタート対策(スケジュール起動や必要十分なランタイム選定)
- Idempotency(再実行安全)とリトライ設定
Firebase VS Supabase、Appwrite、NHost、Back4App
代表的な BaaS を主観なく俯瞰できるよう、機能・データモデル・自前運用性・課金などの観点で比較します。
| 項目 | Firebase | Supabase | Appwrite | Nhost | Back4App |
|---|---|---|---|---|---|
| データモデル | Firestore(ドキュメント)/ Realtime DB | PostgreSQL(SQL/リレーショナル) | Document/Relational(拡張) | PostgreSQL + Hasura(GraphQL) | PostgreSQL / Parse(オブジェクト) |
| 認証 | 豊富な IdP(Google/Apple 等)、匿名/カスタム | Auth(メール/OTP/Social)、RLS と連携 | Auth(メール/匿名/Social) | Auth + JWT、Hasura の権限制御 | Auth(メール/ソーシャル) |
| サーバーサイド | Cloud Functions(イベント/HTTP) | Edge Functions / PG拡張 / Triggers | Functions(Node・Deno 等) | Serverless Functions | Cloud Code(Parse Functions) |
| リアルタイム | RTDB / Firestore リアルタイムリスナー | Realtime(DB変更購読) | Realtime Subscriptions | GraphQL Subscriptions | Live Queries |
| ローカル開発 | Emulator Suite が強力 | Docker / CLI / ローカル PG | Docker で完結(セルフホスト容易) | Docker / CLI | Docker / CLI |
| ホスティング | 静的 Hosting + CDN + Preview | Storage/Edge + 外部連携 | Functions/Storage 主体(静的は別途) | Nhost Hosting(統合) | Static Hosting / Parse Hosting |
| 強み | モバイル/Web に最適化、SDK/ドキュメント充実 | SQL/RLS/PG生態系、開発者フレンドリー | 完全 OSS / セルフホスト容易 | GraphQL ファースト、DX 良好 | Parse の成熟・移行のしやすさ |
| 注意点 | ベンダーロックイン、ドキュメント設計難度 | PG/SQL 設計の学習コスト | 運用責任が利用者側に寄る | GraphQL/Hasura 学習コスト | 機能差異(Parse 仕様準拠) |
選定の指針(ざっくり)
- クライアント中心の高速プロトタイプ → Firebase
- 既存 SQL 資産・BI 連携重視 → Supabase
- OSS / セルフホスト前提 → Appwrite
- GraphQL 前提・柔軟なスキーマ → Nhost
- Parse 互換や既存移行 → Back4App
関連リンク
ミニデモ(ブラウザのみ・SDK読み込み不要の疑似UI)
本番では Firebase Web SDK を読み込みますが、ここでは UI の雰囲気だけ体験できます。
// ここにログが表示されます