Firestore は、ウェブ クライアント間でデータの同期を維持するのに適した、スケーラブルなデータベース ソリューションです。
多くのアプリにとって Firestore のマネージド オフライン サポートは特に重要です。ネットワーク レイテンシやインターネット接続の有無に関係なく機能する、レスポンシブなアプリを構築できるからです。ただし、機能の豊富な SDK にはサイズが大きくなるというデメリットがあります。作成、読み取り、更新、削除といった基本的なオペレーションのみを必要とし、マネージド オフライン サポートは不要なアプリ向けの SDK について見ていきましょう。
ソリューション: Firestore Lite
Firestore Lite は、軽量なスタンドアロンの REST 専用 Firestore SDK です。通常のウェブ SDK よりも小さなサイズで、単一ドキュメントの取得、クエリの実行、ドキュメントの更新をサポートします。Firestore Lite では、レイテンシ補正、オフライン キャッシュ、クエリの再開、スナップショット リスナーの機能は省略されています。特定のユースケースにとっては、ライブラリ サイズの縮小と起動時間の短縮という大きなメリットが得られます。
Firestore Lite のインポート
Firestore Lite は、モジュラー SDK の一部として npm を介して使用できます。この SDK は完全なモジュール型であり、ツリーシェイキングが可能になります。
サポートされているインポート スタイルは次のとおりです。
import { initializeApp } from "firebase/app";
import {
getFirestore,
getDoc,
updateDoc
} from 'firebase/firestore/lite';
Firestore Lite でサポートされていない API の機能
Firestore Lite では、サイズと速度を優先するために、標準の Firestore SDK の機能から以下の機能が除外されています。
- DocumentSnapshot イベント ハンドラ。
onSnapshot
メソッド、およびDocumentChange
、SnapshotListenerOptions
、SnapshotMetadata
、SnapshotOptions
、Unsubscribe
の各オブジェクトは含まれません。 - 永続性ヘルパー。
enableIndexedDBPersistence
、enableMultiTabIndexedDbPersistence
、clearIndexedDbPersistence
の各メソッドは含まれません。 - Firestore バンドル。
loadBundle
メソッドとこれに関連するメソッド、LoadBundleTask
オブジェクトとLoadBundleTaskProgress
オブジェクトは含まれません。
ドキュメントの取得、クエリ、更新の実装
Firestore Lite をインポートすると、使い慣れたすべての API で取得や更新の呼び出しを行えるようになります。データの追加とデータの取得のすべてのユースケースが利用できます。
import {
getFirestore,
getDoc,
updateDoc,
doc
} from '@firebase/firestore/lite';
const firestore = getFirestore(app);
const docRef = doc(firestore, 'collection/doc');
const docSnap = await getDoc(docRef);
await updateDoc(docRef, "field", 'value');
Firestore Lite を使用する条件
標準の Firestore SDK のオフライン永続性とキャッシュに関する機能が必要かどうかは、簡単に判断できることではありません。Firestore Lite でオーバーヘッドを削減するためにこれらの機能を使用しないことを判断する際には、あらかじめこれらの機能について理解しておく必要があります。一般に、Firestore Lite を使用するかどうかを決定する際には、次の要素を評価します。
- オンライン ステータス - Firestore Lite は、ライブ アップデートを必要とせず、接続が確立されているアプリに適しています。
- サイズの制約 - Firestore Lite は、JavaScript バンドル全体のサイズを減らしたい場合に適しています。