Cloud Firestore とも呼ばれる Firestore は、最新の Web およびモバイル アプリケーションを構築するためのスケーラブルで汎用性の高いプラットフォームを開発者に提供するように設計された Google Firebase のNoSQL データベースソリューションです。 Firestore は、リアルタイムのデータ同期、保存、取得を可能にすると同時に、オフライン サポート、階層型データ編成、包括的なクエリ機能セットなどの強力な機能を提供します。
Google が提供する開発プラットフォームであるFirebase は、アプリケーションを簡単に構築、管理、デプロイするための一連のツールを提供します。 Firestore はこのスイートの一部であり、アプリケーションでのデータの永続化と管理のプロセスを簡素化する強力で信頼性の高いデータベース ソリューションとして機能します。
Firestoreのメリット
Firestore は開発者にさまざまな利点を提供し、Web アプリケーションやモバイル アプリケーションでデータを管理するための魅力的な選択肢となっています。 Firestore の重要な利点には次のようなものがあります。
リアルタイム同期
Firestore のリアルタイム同期機能により、複数のデバイスやプラットフォーム間でのデータ配信が容易になり、関連する更新や変更がすべてのユーザーに即座に反映されます。この同期機能は、開発者が最小限の労力で高度にインタラクティブで協調的なアプリケーションを構築するのに役立ちます。
オフラインサポート
Firestore は、Web アプリケーションとモバイル アプリケーションの両方にオフライン サポートを組み込み、開発者がユーザーがインターネットに接続していない場合でもシームレスに機能するアプリを作成できるようにします。 Firestore はデータをデバイス上でローカルにキャッシュし、接続が復元されると更新をサーバーと同期します。
包括的なクエリのサポート
Firestore は豊富なクエリ API を提供しており、開発者はデータを簡単にフィルタリング、並べ替え、操作する複雑なクエリを作成できます。 Firestore はカーソルベースのページネーションもサポートしているため、アプリケーションは大規模なデータセットを効率的に読み込んで表示できます。
階層的なデータ構造
Firestore は、コレクションとドキュメント内のデータを整理する階層データ モデルを使用し、複雑でネストされたデータ構造に対応します。このアプローチにより、高い柔軟性と拡張性を提供しながら、データの構造化と管理が容易になります。
強力な拡張性
Firestore は高スケール向けに設計されており、パフォーマンスを損なうことなく数百万の同時接続を処理し、広範なデータセットを管理します。この機能により、Firestore は、要求の厳しいパフォーマンス要件を持つ高トラフィック アプリケーションにとって実行可能な選択肢になります。
Firestore データモデル
Firestore のデータ モデルは、データの階層的な編成と管理を提供するコレクションとドキュメントの概念に基づいています。このセクションでは、Firestore のデータ モデルの主要な要素の概要を説明し、それらがどのように機能するかを説明します。
コレクション
Firestore では、コレクションはドキュメントを保持するコンテナです。コレクションは、クエリと管理を容易にする方法でデータを整理するのに役立ちます。コレクションにはサブコレクションを含めることもでき、関連データの論理グループをさらに細分化できます。
書類
ドキュメントは、実際のデータ値を保持する Firestore 内の個々のレコードです。一般に、ドキュメントはフィールドと呼ばれるキーと値のペアで構成され、それぞれに名前と対応する値が付いています。 Firestore は、文字列、数値、ブール値、配列、マップなどを含む、フィールドのさまざまなデータ型をサポートしています。 Firestore のドキュメントは、データとサブコレクションの両方を含むコンテナーと考えることができます。この入れ子構造により、アプリケーション内の複雑なデータ構造を設計および管理する際の柔軟性が向上します。
画像ソース: Firebase ドキュメント
Firestore でのデータの整理
Firestore の階層データ モデルにより、開発者はデータを効率的かつ直感的に構造化および整理できます。たとえば、 e コマース アプリは、次の構造でデータを Firestore に保存する場合があります。
- 製品コレクション
- 製品ドキュメント
- 名前フィールド
- 価格フィールド
- カテゴリフィールド
- レビューのサブコレクション
- 文書のレビュー
- テキストフィールド
- 評価フィールド
- 日付フィールド
この構造では、Products コレクションに Product ドキュメントが含まれており、それぞれが個別の製品を表します。これらの文書には、名前、価格、カテゴリ情報のフィールドが含まれています。各製品ドキュメントには、ユーザーが作成した製品レビューのレビュー ドキュメントを含むレビュー サブコレクションがあります。 Firestore の階層データ モデルを利用することで、開発者は複雑なデータ構造を簡単に作成および管理でき、アプリケーションのパフォーマンス、スケーラビリティ、保守性を確保できます。
アプリケーションでの Firestore のセットアップ
アプリケーションでの Firestore のセットアップは簡単なプロセスです。最初のステップは、すべての Firebase 製品とサービスを管理するための一元的なスペースを提供する Firebase プロジェクトを作成することです。 Firestore を設定するための重要な手順は次のとおりです。
- Firebase プロジェクトを作成する: Firebase アカウントにサインアップし、新しいプロジェクトを作成するか、すでにプロジェクトを持っている場合は既存のプロジェクトを使用します。 Firebase コンソールに移動し、画面上の指示に従います。
- Firestore をプロジェクトに追加する:プロジェクトが設定されたら、左側のメニューの [データベース] セクションをクリックします。 「データベースの作成」を選択し、ポップアップウィンドウで「Firestore」を選択します。セットアップ オプションに従って、Firebase プロジェクト内に新しい Firestore データベース インスタンスを作成します。
- Firebase SDK を構成する:ウェブアプリまたはモバイルアプリで Firestore を使用するには、Firebase SDK をプロジェクトに追加する必要があります。 SDK 設定コード スニペットは、Firebase コンソールの「プロジェクト設定」にあります。設定コードには、プロジェクトの一意の API キー、認証ドメイン、プロジェクト ID、および Firebase サービスに接続するために必要なその他の設定が含まれます。コード スニペットをアプリケーションの HTML、JavaScript、Android、または iOS プロジェクトに追加します。
- Firestore を初期化する: Firebase SDK をプロジェクトに追加した後、次のコード スニペットを使用して Firestore を初期化します。
JavaScript の場合:import { initializeApp } from 'firebase/app'; import { getFirestore } from 'firebase/firestore'; const firebaseApp = initializeApp({ apiKey: "[API_KEY]", authDomain: "[AUTH_DOMAIN]", projectId: "[PROJECT_ID]", ... }); const db = getFirestore(firebaseApp);
import com.google.firebase.FirebaseApp import com.google.firebase.firestore.FirebaseFirestore val firebaseApp = FirebaseApp.initializeApp(this) val db = FirebaseFirestore.getInstance()
import FirebaseFirestore let db = Firestore.firestore()
- Firestore の使用を開始する: Firestore を初期化すると、Firestore を使用してデータの読み取りと書き込み、リアルタイム リスナーの設定、データに対するさまざまな操作を実行できるようになります。
Firebase Realtime Database と Firestore の比較
Firebase は、Firebase Realtime Database と Firestore という 2 つのデータベース ソリューションを提供します。どちらのデータベースもリアルタイムのデータ同期と、Web およびモバイル プラットフォーム用のクライアント SDK を提供しますが、いくつかの点で異なります。 2 つのデータベースを比較してみましょう。
データモデルと構造
Firebase Realtime Database は、ノードの大きなツリーであるJSONのようなデータ モデルを使用します。このデータ モデルでは、特に階層データやネストされた配列の場合、複雑なデータのクエリと構造化が困難になる可能性があります。一方、Firestore はコレクションとドキュメントを含む階層データ モデルを使用し、データの構造化とクエリのより直感的な方法を提供します。 Firestore データ モデルでは、ネストされたサブコレクションが可能であり、複雑でネストされたデータをより効率的に管理するのに役立ちます。
クエリ機能
Firestore は、Realtime Database と比較して、より包括的なクエリ機能を提供します。 Firestore を使用すると、開発者は複数の orderBy 句や where 句の連鎖、配列操作の実行、結果のページ分割などの複雑なクエリを実行できます。対照的に、Realtime Database のクエリ機能はより制限されているため、追加の計算コストやクライアント側またはサーバー側のロジックの複雑さを伴わずに、複雑なクエリやページネーションを実行することが困難になります。
スケーラビリティ
Firestore は、強力な水平スケーラビリティと、数百万の同時ユーザーと数十億のドキュメントを処理できる機能を備えた、世界規模のアプリ向けに設計されています。リアルタイム データベースは、特定のケースには適していますが、データ シャーディング戦略に依存せずに拡張するのが難しい場合があります。 Firestore は、低レイテンシのアクセスと自動マルチリージョン レプリケーションを保証して高可用性と耐久性を維持し、エンタープライズや高トラフィックのユースケースに適しています。
価格設定
Firestore と Realtime Database の価格構造は異なります。 Firestore の料金は、ドキュメントの読み取り、書き込み、削除、データ ストレージとネットワークの使用量に基づいて計算されます。 Realtime Database の料金は、保存されているデータの量、データベース接続の数、およびネットワークの使用量に基づいています。アプリケーションのデータ アクセス パターンと使用状況によっては、1 つのデータベースの方がコスト効率が高い場合があります。
Firestore と Realtime Database はリアルタイム データ同期機能を提供しますが、Firestore は複雑なクエリ、階層データ構造、グローバル スケールのパフォーマンスを必要とするアプリケーションにより適しています。 Realtime Database は、JSON のようなデータ モデルと低コストの価格体系がより合理的である、より単純なユースケースに適している可能性があります。
Firestore でのデータのクエリ
Firestore は包括的なクエリ機能のセットを提供し、開発者がデータを効果的に取得およびフィルタリングできるようにします。基本的なクエリには、単一のドキュメントの取得、ドキュメントのコレクションの取得、フィールド値に基づくドキュメントのフィルタリングが含まれます。より高度なクエリには、結果の並べ替え、制限、ページ分割が含まれます。一般的な Firestore クエリをいくつか見てみましょう。
単一のドキュメントをフェッチする
ID によって単一のドキュメントをフェッチするには、次のコード スニペットを使用できます。
// JavaScript import { getDoc, doc } from 'firebase/firestore'; async function getDocument(documentId) { const documentRef = doc(db, 'collection_name', documentId); const documentSnapshot = await getDoc(documentRef); if (documentSnapshot.exists()) { console.log('Document data:', documentSnapshot.data()); } else { console.log('No such document'); } }
ドキュメントのコレクションを取得する
コレクション内のすべてのドキュメントを取得するには、次のコード スニペットを使用します。
// JavaScript import { getDocs, collection } from 'firebase/firestore'; async function getAllDocuments() { const collectionRef = collection(db, 'collection_name'); const querySnapshot = await getDocs(collectionRef); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }
ドキュメントのフィルタリング
Firestore を使用すると、1 つまたは複数のフィールド条件に基づいてドキュメントをフィルタリングできます。次のコード スニペットは、単一フィールドに基づいてドキュメントをフィルタリングする方法を示しています。
// JavaScript import { query, where, getDocs, collection } from 'firebase/firestore'; async function getFilteredDocuments() { const collectionRef = collection(db, 'collection_name'); const q = query(collectionRef, where('field_name', '==', 'value')); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }
ドキュメントの並べ替えとページ番号付け
結果を並べ替えたりページ番号を付けたりするには、orderBy、limit、startAfter または startAt メソッドを使用できます。ドキュメントを並べ替えてページ付けする方法は次のとおりです。
// JavaScript import { query, orderBy, limit, getDocs, collection, startAfter } from 'firebase/firestore'; async function getSortedAndPaginatedDocuments(lastVisible) { const collectionRef = collection(db, 'collection_name'); const q = query( collectionRef, orderBy('field_name', 'asc'), startAfter(lastVisible), limit(10) ); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, '=>', doc.data()); }); }
これらは、Firestore が開発者に提供するクエリ機能のほんの一例であり、さまざまなアプリケーションの必要に応じてデータに簡単かつ効率的にアクセスしてフィルタリングできるようになります。
Firestore セキュリティ ルール
Firestore セキュリティ ルールは、ユーザー認証とカスタム条件に基づいて Firestore データへのアクセスを制御する強力な方法です。セキュリティ ルールを作成して構成することで、ユーザーが必要なリソースにのみアクセスできるようにし、機密情報を保護し、意図しないデータ変更を防ぐことができます。
Firestore のセキュリティ ルールは Firebase コンソールに保存され、Firestore データベースとともにデプロイされます。これらはカスタム構文を使用し、Firebase コンソール内またはローカル開発環境を使用して作成およびテストできます。 Firestore セキュリティ ルールの使用を開始するには、いくつかの一般的なシナリオとその実装方法を見てみましょう。
- パブリック データへの読み取りアクセスを許可する:すべてのユーザーにパブリック データの読み取りを許可するには、認証を必要とせずに特定のコレクションへのアクセスを許可するセキュリティ ルールを設定できます。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /public_data/{document=**} { allow read; } } }
- 認証されたユーザーへの読み取りアクセスの制限:認証されたユーザーのみが特定のドキュメントを読み取ることができるようにする場合は、
request.auth
オブジェクトを使用してユーザーの認証ステータスを確認できます。rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /private_data/{document=**} { allow read: if request.auth != null; } } }
- ユーザー所有のデータへの書き込みアクセスの許可:ユーザーにデータの作成、更新、または削除の権限を付与するには、ドキュメントのユーザー ID と認証されたユーザーの ID を照合するセキュリティ ルールを使用できます。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /user_data/{userId}/{document=**} { allow write: if request.auth.uid == userId; } } }
- 書き込み前のデータの検証: Firestore セキュリティ ルールでは、書き込み操作を許可する前にデータ検証を強制することもできます。たとえば、ユーザーの表示名が特定の文字制限を超えないようにすることができます。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /user_profiles/{userId} { allow create, update: if request.auth.uid == userId && request.resource.data.displayName.size() < 30; } } }
これらの例は、Firestore セキュリティ ルールの一般的な使用例をいくつか示していますが、可能性はほぼ無限です。表現力豊かな構文と強力なマッチング機能を使用して、Firestore データを保護し、安全な環境を維持する複雑なセキュリティ ルールを作成できます。
Firestore のパフォーマンスの最適化
Firestore は、高速で信頼性の高いリアルタイム データ同期を提供するように設計されていますが、最高のユーザー エクスペリエンスを確保するには、Firestore データベースのパフォーマンスを最適化することが不可欠です。 Firestore を最大限に活用するためのヒントをいくつか紹介します。
- バッチ操作:短期間に複数の書き込み操作を実行する必要がある場合は、バッチ書き込みを使用して操作をグループ化することを検討してください。バッチ書き込みにより、クライアントと Firestore バックエンド間の往復回数が削減され、パフォーマンスが向上します。
- クエリ結果を制限する: Firestore のパフォーマンスは、クエリが返すドキュメントの数に依存します。パフォーマンスを向上させるには、ページネーションを使用して返されるドキュメントの数を制限し、アプリケーションが必要とするデータのみを要求します。
- 非正規化データを使用する:場合によっては、複雑なクエリや結合の必要性を減らすために、冗長データまたは非正規化データを保存すると有益な場合があります。関連するコレクションまたはドキュメント間でデータを複製することにより、クエリを簡素化し、必要な読み取りを減らすことができます。
- データ ストレージの最適化:データが効率的に構造化され、オーバーヘッドを最小限に抑える方法で保存されるようにします。これには、ストレージ サイズを削減するために短いフィールド名を使用することや、日付/時刻値に ISO 文字列の代わりに整数タイムスタンプを使用することが含まれる場合があります。
- クライアントでデータをキャッシュする:アプリケーションの応答性を向上させるには、Firestore から取得したデータをクライアント側でキャッシュすることを検討してください。これにより、リアルタイムのデータ同期への依存が軽減され、一般的な操作に必要な Firestore 読み取りの数を最小限に抑えることができます。
- Firestore のパフォーマンスを監視する: Firebase には、Firebase Performance Monitoring SDK など、Firestore データベースのパフォーマンスを監視するためのツールが用意されています。これらのメトリクスを定期的に確認すると、潜在的な最適化領域を特定し、データベースがスムーズに実行されていることを確認できます。
これらのパフォーマンス最適化のヒントに従い、Firestore の使用状況を監視することで、Firestore ベースのアプリケーションが可能な限り最高のエクスペリエンスをユーザーに提供できるようになります。
Firestoreの価格
Firestore は従量課金制の価格モデルで動作し、コストは次のようなさまざまなリソースの使用量によって決まります。
- ドキュメント ストレージ: ストレージの料金は GiB 単位で請求されるため、Firestore ドキュメントに保存されているデータの量はコストに影響します。
- ドキュメントの読み取り、書き込み、削除: Firestore では、データベースに対する読み取り、書き込み、削除のすべての操作に対して料金が請求されます。操作数の監視は、使用量の増加に伴うコストを管理するために重要です。
- ネットワーク使用量: Firestore は、特定のしきい値を超える送信ネットワーク トラフィックに対して料金を請求します。この料金は、転送されるデータ量と宛先地域によって異なります。
これらの従量課金制の料金に加えて、Firestore は Firebase 無料プランの一部として次のような豊富な無料枠を提供しています。
- 1 GiB のストレージ
- 1 日あたり 50,000 件のドキュメント読み取り
- 1 日あたり 20,000 件のドキュメント書き込み
- 1 日あたり 20,000 件のドキュメントが削除される
- 1 か月あたり 10 GiB のネットワーク使用量
Firestore の価格モデルでは、アプリケーションの要件の進化に応じた柔軟性と拡張性が可能になります。パフォーマンスとコスト効率のバランスをとるために、使用状況を監視し、Firestore 実装を最適化することが重要です。
Firestore セキュリティ ルールを理解し、パフォーマンスを最適化し、コストを効果的に管理することで、この強力な NoSQL データベース ソリューションを Firebase アプリケーションで最大限に活用できます。効率的なノーコードアプリ構築エクスペリエンスを実現するには、Firestore とAppMasterの統合を忘れずに検討してください。
Firestore の使用例
Firestore の強力な機能、リアルタイムのデータ同期、スケーラブルなアーキテクチャにより、幅広いアプリケーションや業界にとって理想的なソリューションとなります。
- 共同作業アプリケーション: Firestore のリアルタイム同期は、ユーザーが更新情報に即座にアクセスする必要がある、プロジェクト管理ソフトウェア、メッセージング アプリ、共有ドキュメント エディターなどの共同作業ツールの作成に最適です。
- ゲーム アプリケーション: Firestore が提供するリアルタイムで階層的なデータ構造により、マルチプレイヤー オンライン ゲーム アプリケーションを構築し、ゲームの状態を効率的に管理するのに適しています。
- E コマース プラットフォーム: Firestore は、オンライン ストアのオーナーが大規模な商品カタログを管理し、在庫を追跡し、ユーザー データ (ショッピング カート、注文履歴、ユーザー プロファイルなど) を保存するのに役立ちます。これにより、パーソナライズされたショッピング体験と、ビジネスの成長に伴うシームレスな拡張が可能になります。
- モノのインターネット (IoT):接続されたデバイスからのデータをリアルタイムで保存および同期できる Firestore の機能は、 IoTアプリケーションにとって信頼できる選択肢となり、開発者がセンサーや他の IoT デバイスからのデータ ストリームを簡単に追跡および分析できるようになります。
- コンテンツ管理システム (CMS): Firestore は、リアルタイム機能、高度なクエリ機能、強力なアクセス制御を備えたカスタムCMS ソリューションを構築するための理想的なデータ ストアであり、Web サイトとアプリのコンテンツの管理を簡素化します。
- 分析とモニタリング: Firestore をモニタリングおよび分析アプリケーションのバックエンドに統合して、複雑なクエリ機能を適用しながら、受信データをリアルタイムで視覚化、集約、分析できます。
Firestore とAppMasterの統合
アプリの構築とメンテナンスをさらに簡素化および迅速化するために、 AppMasterアプリケーションのプライマリ データ ストア ソリューションとして Firestore をシームレスに統合できます。 AppMaster 、ユーザーがコード行を記述せずにバックエンド、Web、モバイル アプリを構築できるno-codeプラットフォームを提供します。
Firestore との統合はREST APIおよび WSS エンドポイントを通じて実現できるため、開発者はAppMasterプラットフォームを使用して Firestore データに効率的にアクセスして管理できます。 Firestore の強力なリアルタイム データ同期をAppMasterのdrag-and-dropインターフェイス、柔軟なデータ モデル、ビジュアル デザイン システムと組み合わせることで、プロフェッショナルでユーザーフレンドリーな Web アプリやモバイル アプリを 10 倍の速度で 3 倍のコストで作成できます。従来の開発方法よりも効果的です。
さらに、 AppMasterにはBusiness Process (BP) Designerが搭載されており、ユーザーは手動でコーディングすることなく、バックエンド、Web、またはモバイル アプリケーションのロジックを視覚的に作成できます。 Firestore とAppMasterを組み合わせることで、リアルタイム同期が可能になり、技術的負債が排除され、コストのかかる手動コーディングへの依存が排除され、Firestore はこれまで以上に多用途になります。
結論
Google Firestore は、リアルタイムのデータ同期やオフライン サポートなど、最新のアプリ開発に役立つ強力でスケーラブルかつ柔軟な NoSQL データベース ソリューションです。その階層データ モデル、強力なクエリ機能、セキュリティ ルールにより、Web およびモバイル アプリケーション用の包括的なデータ ソリューションを求める開発者にとって魅力的な選択肢となります。
Firestore をAppMaster no-codeプラットフォームと統合することで、その高度な機能を活用しながら、 no-code開発環境のシンプルさ、スピード、費用対効果の恩恵を受けることができます。 Firestore のパワーをAppMasterのビジュアル デザイン システム、柔軟なデータ モデル、ビジネス プロセス デザイナーと組み合わせることで、今日の進化し続けるデジタル領域に対応する高性能アプリケーションを効率的に構築できます。