2.

Firebase 完全ガイド(Auth / Firestore / Functions / Hosting / Supabase 比較)

編集
この記事の要点
  • Firebase = Google が提供する BaaS(Backend as a Service)。認証・DB・ストレージ・サーバレス関数・ホスティングを統合提供
  • 主要プロダクト: Authentication(認証)/ Firestore(NoSQL)/ Realtime Database / Cloud Storage / Cloud Functions / Hosting / Analytics
  • 料金プラン: Spark(無料、制限付き)と Blaze(従量課金、無料枠あり)
  • クライアント SDK: Web (v9 モジュラー) / Flutter / Android / iOS / Unity
  • 競合: Supabase(Postgres + OSS)、AWS Amplify、Vercel(ホスティング寄り)、Convex

Firebase とは

Firebase は Google が運営する BaaS(Backend as a Service)プラットフォームです。2011 年に Firebase, Inc. として誕生し、2014 年に Google が買収。バックエンドを自前で立てずに、認証・データベース・ストレージ・サーバレス関数・配信などをクライアント SDK 一発で利用できるのが最大の特徴です。MVP やプロトタイプ、個人開発、モバイルアプリのバックエンドとして圧倒的なシェアを持ちます。

Firebase ロゴ

主要プロダクト一覧

カテゴリプロダクト用途
構築AuthenticationEmail/Password、Google/Apple/X 等の SNS ログイン、SMS、匿名認証
FirestoreNoSQL DB(ドキュメント指向)。リアルタイム同期、強力なクエリ、オフライン対応
Realtime Database古参の JSON ツリー型 DB。低レイテンシ、シンプル
バックエンドCloud Functionsサーバレス関数。HTTP / Firestore トリガ / 認証イベント等
Cloud Storage大容量ファイル(画像・動画)。GCS ベース
Hosting静的サイト + SPA 配信、SSL 自動
運用AnalyticsGA4 ベースの計測
Crashlyticsモバイルクラッシュ収集
Remote Configサーバ側で動的に設定値を変更
成長Cloud Messaging (FCM)プッシュ通知
AIVertex AI / GenkitGemini 連携。Firebase Studio はブラウザ完結の AI IDE(2025〜)

料金プラン

プラン料金主な制限
Spark(無料)$0Functions 不可(IAM 外部呼び出し不可)、Firestore 1GB、Storage 5GB、Hosting 10GB 配信/月
Blaze(従量)使った分Spark の無料枠を超えると課金。実質ほぼ無制限

Cloud Functions(第 2 世代)と Cloud Run、Vertex AI などは Blaze プランが必須です。最初は無料枠で開発し、本番リリース直前に Blaze に上げる運用が一般的。

Web SDK v9(モジュラー)の使い方

# インストール
npm install firebase

# CLI(プロジェクト設定・デプロイ)
npm install -g firebase-tools
firebase login
firebase init
// firebase.js — 初期化
import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { getFirestore } from 'firebase/firestore';

const firebaseConfig = {
  apiKey: 'AIza...',
  authDomain: 'myapp.firebaseapp.com',
  projectId: 'myapp',
  storageBucket: 'myapp.appspot.com',
  appId: '1:1234567890:web:abcdef',
};

const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export const db = getFirestore(app);

Authentication 例

import {
  createUserWithEmailAndPassword,
  signInWithEmailAndPassword,
  GoogleAuthProvider, signInWithPopup,
  onAuthStateChanged, signOut,
} from 'firebase/auth';

// メール登録
await createUserWithEmailAndPassword(auth, 'a@example.com', 'pass1234');

// ログイン
await signInWithEmailAndPassword(auth, 'a@example.com', 'pass1234');

// Google ログイン
const provider = new GoogleAuthProvider();
await signInWithPopup(auth, provider);

// 認証状態監視
onAuthStateChanged(auth, (user) => {
  if (user) console.log('logged in as', user.uid);
});

Firestore 例

import {
  collection, doc, addDoc, getDocs, onSnapshot,
  query, where, orderBy, limit, serverTimestamp,
} from 'firebase/firestore';

// 追加
await addDoc(collection(db, 'posts'), {
  title: 'Hello',
  uid: auth.currentUser.uid,
  createdAt: serverTimestamp(),
});

// クエリ
const q = query(
  collection(db, 'posts'),
  where('uid', '==', auth.currentUser.uid),
  orderBy('createdAt', 'desc'),
  limit(20)
);

// リアルタイム監視
onSnapshot(q, (snap) => {
  snap.docChanges().forEach(c => {
    console.log(c.type, c.doc.id, c.doc.data());
  });
});

Security Rules(必須)

Firestore / Storage / Realtime Database はクライアントから直接叩きます。サーバを挟まないので、不正アクセス対策は Security Rules で守ります。

// firestore.rules
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // 自分の投稿だけ読み書き可
    match /posts/{postId} {
      allow read: if true;
      allow create: if request.auth != null
                    && request.resource.data.uid == request.auth.uid;
      allow update, delete: if request.auth != null
                            && resource.data.uid == request.auth.uid;
    }

    // ユーザー本人のみ
    match /users/{userId} {
      allow read, write: if request.auth != null
                          && request.auth.uid == userId;
    }
  }
}

本番デプロイ前に Firebase Local Emulator でテストを書くのが定石です。

Cloud Functions(v2)

// functions/index.js
const { onRequest } = require('firebase-functions/v2/https');
const { onDocumentCreated } = require('firebase-functions/v2/firestore');
const { initializeApp } = require('firebase-admin/app');
const { getFirestore } = require('firebase-admin/firestore');
initializeApp();

// HTTP 関数
exports.hello = onRequest(async (req, res) => {
  res.json({ message: 'hello' });
});

// Firestore トリガ
exports.onPostCreate = onDocumentCreated('posts/{id}', async (event) => {
  const data = event.data.data();
  console.log('new post by', data.uid);
  // 例: 通知を作る
  await getFirestore().collection('notifications').add({
    uid: data.uid,
    text: '新規投稿が作成されました',
  });
});
# デプロイ
firebase deploy --only functions

# ローカル実行
firebase emulators:start

主要競合との比較

製品DB認証FunctionsOSS特徴
FirebaseFirestore / RTDB(NoSQL)Cloud Functions×Google 製、エコシステム最大、リアルタイム強い
SupabasePostgreSQLEdge Functions (Deno)SQL ベース、OSS でセルフホスト可
AWS AmplifyDynamoDB / RDSCognitoLambda一部AWS の総合フロント、フルコントロール
Convex独自JS 関数一部TypeScript ファースト、リアクティブクエリ
VercelPostgres / KV(連携)NextAuth 連携Edge Functions×Next.js ホスティング寄り、DB は別建て

Firebase Studio(2025〜)

Firebase Studio は Google が 2025 年に発表した、ブラウザ上で動く AI 統合開発環境(旧 Project IDX)です。Gemini と統合され、自然言語からフロント/バック両方の Firebase アプリを生成できます。プロトタイピングから本番デプロイまでをブラウザ完結で行える点が特徴。

FAQ

Q: Firestore と Realtime Database のどちらを選ぶ?
A: 新規は基本 Firestore。複雑なクエリ・スケール・複数地域同期で優位。Realtime DB はチャットなど超低レイテンシで JSON ツリーが合うケースに残ります。

Q: 無料プランで本番運用できる?
A: 個人ブログ程度なら可能ですが、Cloud Functions が必須となる時点で Blaze へ上げる必要があります。Blaze でも実質無料枠があるため、月額数十円〜数百円で運用するケースが多い。

Q: Firebase からの脱出(ベンダーロックイン)が心配
A: 認証は Firebase Auth 独自仕様、Firestore も独自 NoSQL でロックインは強めです。ロックインを避けるなら Supabase(Postgres)か自前 OSS スタックを検討。

編集
Post Share
子ページ
  1. プロジェクトの作成とアプリ連携
  2. Firebaseアプリの導入(初期設定)と開発用ローカルサーバの起動方法
  3. Firebase Hosting(執筆途中)
  4. エラー一覧
同階層のページ
  1. Firebase
  2. GitHub

最近更新/作成されたページ