Firestoreとは?
Cloud Firestoreは、FirebaseとGoogle Cloudが提供する柔軟でスケーラブルなNoSQLドキュメントデータベースです。Web、モバイル、サーバー開発向けに設計されており、リアルタイム同期とオフラインサポートが特徴です。
主なコンセプトは以下の通りです。
- ドキュメントとコレクション : Firestoreのデータは「ドキュメント」として保存されます。ドキュメントはキーと値のペアで構成されるデータの集合です。これらのドキュメントは「コレクション」にまとめられます。コレクションはドキュメントの集まりであり、さらにその中にサブコレクションとして別のコレクションを含めることもできます。これにより、データを階層的に整理できます。
- データ操作 :
- 追加 (Add/Set) : コレクションに新しいドキュメントを追加したり、特定のIDでドキュメントを保存したりします。
- 読み取り (Get) : ドキュメントのIDを指定してデータを取得したり、コレクションから複数のドキュメントをクエリ(検索)して取得したりします。
- 更新 (Update) : 既存のドキュメントの特定フィールドを更新します。
- 削除 (Delete) : ドキュメント全体や、ドキュメント内の特定のフィールドを削除します。
- リアルタイム同期 : Firestoreの最大の魅力の一つは、データの変更をリアルタイムでクライアントに同期する機能です。データベースのデータが更新されると、接続されているすべてのクライアント(あなたのWebアプリなど)に自動的に反映されます。
TypeScriptやJavaScriptのWebアプリでは、Firebase SDKを使ってこれらの操作を行います。初期設定後、 firestore().collection('yourCollection').doc('yourDocument').get()
のようにチェーンメソッドで簡単にデータにアクセスできます。
Firestoreを使うことで、バックエンドを気にすることなく、データの保存、同期、クエリといった機能をあなたのWebアプリに素早く組み込むことができます。
サンプルDBを作って試す
Cloud Firestoreデータベースを作成する手順
Firebase コンソールを開く : Firebase コンソールにアクセスし、左側のメニューから「 Firestore Database 」を選択し、データベースの作成をクリックします。

エディションの選択:Standard, EnterpriseからStandardを選択
ロケーションの選択:asia-northeast1 (Tokyo)を選択
構成:本番モード、テストモードがあり、テストモードを選択
コレクションを作成
コレクション名:users
ドキュメント:
- ID 自動生成
- name: String “John Doe”
- age: Number: 30
- dob: timestamp 2000-01-01

クエリを実行する

Firestoreの特徴
ドキュメント名
Firestoreのデータは、常に コレクション と ドキュメント が交互に現れる厳密な階層構造で構成されます。
- コレクション(Collection) :
- ドキュメントの集まりを意味します。例えるなら、ファイルの「フォルダ」のような存在ですが、単なる容器ではありません。
- コレクション自体がデータの検索(クエリ)の対象となります。例えば、
users
コレクションからすべてのユーザーデータを取得したり、条件に合うユーザーを探したりできます。
- ドキュメント(Document) :
- コレクション内に格納される、データの実体です。JSONオブジェクトのようにキーと値のペアで構成される、柔軟なデータ形式を持っています。
- 各ドキュメントは、そのコレクション内で一意なID(ドキュメント名)を持ちます。このIDはFirestoreが自動生成することも、開発者が自分で指定することも可能です。
この構造により、Firestoreのドキュメントパスは常に コレクション/ドキュメント/コレクション/ドキュメント/...
というパターンになります。
例えば、 users/alovelace/ai_threads/thread123/messages/message_abc
というパスは、以下の階層を示しています。
users
: コレクション(ユーザーの集まり)alovelace
: ドキュメント(特定のユーザー)ai_threads
: サブコレクション(特定のユーザーのAI会話スレッドの集まり)thread123
: ドキュメント(特定のAI会話スレッド)messages
: サブコレクション(特定のAI会話スレッドのメッセージの集まり)message_abc
: ドキュメント(特定のメッセージ)
この階層構造は、データ設計において非常に重要です。
- データモデリング : 関連性の高いデータをサブコレクションにまとめることで、自然で整理されたデータ構造を構築できます。
- クエリの最適化 : 特定のパス(コレクション)に絞って効率的なクエリを実行できます。
- セキュリティルール : このパスの各セグメントを利用して、きめ細やかなアクセス制御を実装できます。「どのユーザーが、どのコレクション内の、どのドキュメントを読み書きできるか」といったルールを柔軟に定義可能です。