TL

Cloud Service

Firebase Realtime Database

接続中のクライアントへ変更を即時同期し、オフラインでも動くアプリを素早く作れる Firebase Realtime Database。1つの巨大なJSONツリーを共有する低レイテンシなリアルタイムDB。

基礎パフォーマンス効率運用上の優秀性信頼性セキュリティ
最終更新: 2026-06-28公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.全データを1つのJSONツリーで持ち、変更をクライアントへ即時同期する。
  • 2.オフライン対応とリアルタイムリスナーで、チャットや共同編集を素早く実装できる。
  • 3.複雑なクエリや大規模な構造化データには Firestore を選ぶ。

解決する課題

サーバーのポーリングや WebSocket 基盤を自前で組まずに、複数クライアント間で状態を即時に共有する仕組みを提供します。

  • チャット・プレゼンス(オンライン状態)・共同編集など、変更を全員へ即座に届けたい
  • ネットワークが切れてもオフラインで動き続け、再接続時に自動同期したい
  • モバイル/Web から直接DBに読み書きし、サーバーコードを最小化したい
  • リアルタイム配信のための接続管理・差分配信を自分で実装したくない

主要概念と用語

  • JSONツリー: データベース全体が1つの大きな JSON オブジェクト。テーブルやコレクションの概念はなく、すべてが階層パスで表現される
  • ノード / パス: ツリー上の各要素と、それを指す階層パス(例 rooms/room1/messages)。パス単位で読み書き・購読する
  • リアルタイムリスナー: 指定パスの変更を購読し、初期値とその後の差分を継続的に受信する仕組み(valuechild_added などのイベント)
  • オフライン永続化: クライアント側にデータをキャッシュし、切断中も読み書きでき、再接続時にサーバーと同期する機能
  • プレゼンス / onDisconnect: クライアント切断時にサーバー側で実行する処理を事前登録し、オンライン状態の管理などに使う
  • Security Rules: パスごとに読み書き可否やデータ形式を宣言的に定義する、Realtime Database 専用のルール言語
  • インスタンス: 1つの Realtime Database(既定のほか、追加インスタンスを作成可能)。Firestore とは別サービスである点に注意

仕様・制限・クォータ

  • データモデルは単一の JSON ツリーで、結合や集計を伴うクエリ・複合条件クエリは苦手。基本は単一パスの取得とソート/フィルタに限られる
  • クエリは1度に1つのプロパティでのみ並べ替え・絞り込みが可能で、複数条件の組み合わせはクライアント側やデータ構造の工夫で対応する
  • 1インスタンスあたりの同時接続数やスループットには上限があり、それを超える規模ではインスタンス分割やシャーディングを検討する
  • ロケーションはリージョン単位で選択する(Firestore のマルチリージョン構成とは異なる)
  • データを深くネストすると、親パスの取得で子全体を読み込んでしまうため、構造はできるだけ浅く保つことが推奨される
  • 具体的な接続数・サイズの上限値や料金は変動するため、最新値は公式ドキュメントで確認する

内部の仕組み

Realtime Database はサーバー上に保持する JSON ツリーへの変更を、そのパスを購読しているクライアント全員へ差分としてプッシュ配信します。クライアント SDK はローカルにデータのコピーを保持し、書き込みはまずローカルに即時反映してから(楽観的更新)サーバーへ送るため、体感レイテンシが小さくなります。切断中の書き込みはキューに溜められ、再接続時にサーバーと突き合わせて同期します。Firestore がドキュメント/コレクションとインデックス前提のクエリでスケールするのに対し、Realtime Database は1つのツリーへの低遅延な同期に特化している点が本質的な違いです。

データ構造はフラットに

深いネストは避け、用途ごとにパスを分けて浅く保つのが鉄則です。親パスを読むと配下のサブツリーがすべて取得されるため、ネストが深いと不要なデータまで転送してしまいます。多対多の関係は ID をキーにした参照テーブル状の構造(データの非正規化)で表現します。

設計パターン / ベストプラクティス

  • データはフラットに非正規化し、読み取り単位ごとにパスを分けて不要なサブツリーの転送を防ぐ
  • 一覧表示や検索のために読み取り用のインデックスとなるパスを別途用意し、必要なデータだけを浅く取得する
  • オンライン状態は onDisconnect とプレゼンス用パスで管理し、切断検知をサーバー側に任せる
  • 重い集計や複雑なクエリは Realtime Database で行わず、Cloud Functions で別パスへ集計結果を書き出すなどで前計算する
  • 大規模化が見込まれる/複雑なクエリが要るなら、最初から Firestore を選択肢に入れて使い分ける

運用・監視

  • Firebase コンソールの Usage/メトリクスで、同時接続数・送受信データ量・ストレージ・負荷を監視する
  • 同時接続数とデータ転送量が主要な指標。接続数が上限に近づく場合はインスタンス分割やシャーディングを検討する
  • Security Rules のシミュレータでルールの読み書き判定を事前検証し、意図しない拒否/許可を防ぐ
  • バックアップは自動/手動のエクスポート機能で取得し、構造変更前のスナップショットを残す
  • 遅い読み取りはネストの深いパスの取得を疑い、データ構造のフラット化やパス分割で改善する

コスト

課金は主に保存データ量(ストレージ)と、クライアントへ送受信するデータ転送量に基づきます。Firestore のような読み書き「回数」課金ではなく、転送バイト数とストレージ量が中心になる点が特徴です。

コスト要因課金の単位節約のコツ
データ転送クライアントへ送受信したバイト数浅い構造で必要な分だけ取得しリスナー範囲を絞る
ストレージ保存しているJSONデータ量不要な古いデータを削除し構造を肥大化させない
同時接続上限超過はインスタンス分割が必要用途ごとにパスやインスタンスを分けて分散

下位プランには無料枠や上限があり、規模に応じて従量課金プランへ移行します。具体的な単価や無料枠は変動するため最新の料金ページで確認してください。

セキュリティ

  • 保存時暗号化・転送時の暗号化(TLS)はデフォルトで有効
  • クライアント直結のアクセスは Security Rules でパスごとに制御する。Firebase Authentication のユーザー情報(auth 変数)を使い、所有者チェックやデータ形式の検証を記述する
  • ルールは既定で拒否にし、必要なパス・操作だけを明示的に許可する(全開放のルールを残さない)
  • サーバーからの管理アクセスは Admin SDK とサービスアカウントで行い、最小権限を付与する
アンチパターン

クライアント直結なのに Security Rules を全開放のまま公開するのは危険です。誰でも全データを読み書きできてしまいます。認証状態の確認と所有者チェック、データ形式の検証を必ずルールに書き、既定は拒否にしてください。

関連サービス・比較

最も比較されるのは同じ Firebase / Google Cloud のドキュメント型 NoSQL である Firestore です。リアルタイム同期という共通点はありますが、データモデルとクエリ能力、スケール特性が異なります。

観点Realtime DatabaseFirestore
データモデル単一のJSONツリードキュメント / コレクション
クエリ単一プロパティのソート/絞り込み中心複合インデックスでより柔軟
スケールインスタンス分割で対応自動でより大規模に拡張
ロケーションリージョン単位リージョン / マルチリージョン
主な課金転送量 + ストレージ読み書き回数 + ストレージ
向く用途低遅延なリアルタイム同期構造化データと複雑なクエリ
使い分けの目安

チャットやプレゼンスのように低遅延な状態同期が主役なら Realtime Database、複雑なクエリや大規模な構造化データが要るなら Firestore が無難です。両方を併用し、用途ごとに適した方へデータを置く構成も一般的です。

ハンズオン / CLI例

Realtime Database の主な操作は Firebase コンソールと Firebase CLI(firebase)で行いますが、有効化やプロジェクト操作は gcloud でも扱えます。

# Firebase / Realtime Database 関連 API を有効化
gcloud services enable firebasedatabase.googleapis.com

# 既存の Google Cloud プロジェクトを Firebase プロジェクトとして登録
gcloud firebase projects add-firebase PROJECT_ID

# Firebase CLI で Security Rules をデプロイ(database.rules.json を反映)
firebase deploy --only database --project PROJECT_ID

Google Cloud Service

Firebase Realtime Databaseを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

データベース

比較で見る軸

クラウド: Google Cloud / カテゴリ: データベース / 難易度: basic

導入後に効く点

オフライン対応とリアルタイムリスナーで、チャットや共同編集を素早く実装できる。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
Google Cloud
カテゴリ
データベース
難易度
basic
関連資格
設計柱
performance / operational / reliability / security

判断チェックリスト

  • 自社の用途が「データベース / performance」に近いか確認する。
  • 強みである「全データを1つのJSONツリーで持ち、変更をクライアントへ即時同期する。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

データベースperformanceoperationalreliabilitysecurity