Firebase には 2 種類のデータベースサービスが用意されています:「Realtime Database」と「Cloud Firestore」です。どちらもクラウド上でデータを保存・同期できるサービスですが、設計思想や使い方に違いがあります。本記事では、それぞれの特徴と違いを比較し、どのような場面で使い分けるべきかを解説します。
Realtime Database は JSON のような「ネストされたツリー構造」を取り、階層が深くなると扱いにくくなることがあります。
Firestore は「コレクション」と「ドキュメント」の組み合わせでデータを管理します。ネストが分離されており、構造が明確でスケーラブルです。
1// Realtime Database の例
2 {
3 "users": {
4 "user1": {
5 "name": "Taro",
6 "age": 25
7 }
8 }
9 }
10
1// Firestore の例
2 users (コレクション)
3 └─ user1 (ドキュメント)
4 ├─ name: "Taro"
5 └─ age: 25
6
どちらもリアルタイム同期に対応しています。ただし Realtime Database は元々リアルタイム用途に特化しており、通信速度や応答性ではやや優れています。Firestore もリスナー機能によってリアルタイム更新が可能ですが、通信頻度が少ない場合に向いています。
Realtime Database は `.read` や `.write` のルール設定が階層単位で行われます。一方 Firestore はより細かく、「ドキュメント単位」での制御が可能です。セキュリティルールの柔軟性では Firestore の方が優れています。
Firestore は複雑なクエリ(ソート、複数条件、インデックス化など)に対応しており、検索機能も豊富です。Realtime Database はシンプルな検索には対応しますが、複雑なクエリや複数条件の検索には向いていません。
Realtime Database は「データの転送量」と「同時接続数」に応じた課金モデルです。一方 Firestore は「読み取り・書き込み回数」や「ストレージ容量」で課金されます。
リアルタイム通信が多いアプリでは Realtime Database、アクセス頻度が低いデータベース用途では Firestore の方がコスト効率が良い場合があります。
Firestore はデフォルトで Web やモバイルでもオフラインキャッシュに対応しており、再接続時に同期されます。Realtime Database もオフライン対応していますが、Web では手動設定が必要になる場合があります。
どちらのデータベースも Firebase Admin SDK を使ってサーバーサイド(Cloud Functions や Node.jsなど)から操作できます。Firestore の方がドキュメント単位で扱えるため、データの整合性を取りやすいです。
1Realtime Database:
2 - ツリー構造
3 - 高速なリアルタイム通信
4 - 制御がやや難しい
5
6Cloud Firestore:
7 - ドキュメント指向
8 - クエリとセキュリティが柔軟
9 - スケーラブルで保守性が高い
10
どちらも強力なサービスですが、アプリの性質や将来的な拡張性を考えて選ぶことが大切です。
本アプリでは、データベースのサイズが比較的小さく、読み書きの頻度が多く、リアルタイム性を重視しているため、「Realtime Database」を採用しています。