firebase-firestore-enterprise-native-mode は何をしますか?
Firestore Enterprise ネイティブモードの包括的なガイドです。プロビジョニング、データモデル、セキュリティルール、SDK の使用について説明します。ユーザーが Firestore Enterprise をネイティブモードでセットアップする際や、セキュリティルールの作成、アプリケーションでの Firestore SDK の使用について支援が必要な場合に、このスキルを使用します。
概要
このスキルは、Firestore Enterprise をネイティブモードで構成および使用するための手順を提供します。対象読者は、Firebase または Google Cloud Platform を使用する開発者および管理者です。
前提条件
- Google Cloud プロジェクトがアクティブであること。
- Firebase プロジェクトが GCP プロジェクトにリンクされていること。
- Firestore Enterprise の有効なサブスクリプション(従量課金制または定額制)。
プロビジョニング
-
Firestore データベースの作成
- Firebase コンソールまたは
gcloudCLI を使用して、Firestore Enterprise インスタンスをネイティブモードでプロビジョニングします。 - 例: Firebase コンソールで「データベースを作成」を選択し、「ネイティブモード」を選択します。
- Firebase コンソールまたは
-
リージョンの選択
- データの常駐要件に基づいて GCP リージョンを選択します(例:
us-central1、europe-west1)。 - 選択後は変更できないため、注意してください。
- データの常駐要件に基づいて GCP リージョンを選択します(例:
-
容量の計画
- 必要なストレージと読み取り/書き込み容量を見積もります。Firestore Enterprise では自動スケーリングがサポートされています。
データモデル
Firestore は NoSQL ドキュメントデータベースです。データは次の構造で整理されます。
- コレクション: ドキュメントのコンテナ(例:
users、orders)。 - ドキュメント: キーと値のペアのセット。各ドキュメントには一意の ID があります。
- サブコレクション: ドキュメント内のコレクション(深い階層を避けるために推奨)。
例
{
"users": {
"user123": {
"name": "Alice",
"email": "[email protected]",
"createdAt": "2025-01-01T00:00:00Z"
}
}
}
セキュリティルール
Firestore のセキュリティルールは、データベースへのアクセスを制御します。エンタープライズ環境では、最小権限の原則に従ってルールを設定します。
基本ルール
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// 認証済みユーザーのみアクセスを許可
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
条件付きルール(顧客データへのアクセス制限)
match /users/{userId} {
allow read: if request.auth.uid == userId;
allow write: if request.auth.uid == userId && request.resource.data.email.matches(".*@example.com$");
}
SDK の使用
Firestore は複数の言語で SDK を提供しています。以下は主要な SDK の使用例です。
Node.js
const { Firestore } = require('@google-cloud/firestore');
// データベースの初期化
const db = new Firestore();
// ドキュメントの読み込み
async function getUser(userId) {
const doc = await db.collection('users').doc(userId).get();
if (!doc.exists) {
console.log('ドキュメントが見つかりません');
return null;
}
return doc.data();
}
Python
from google.cloud import firestore
db = firestore.Client()
# ユーザードキュメントの追加
def add_user(user_id, data):
doc_ref = db.collection('users').document(user_id)
doc_ref.set(data)
print(f'ユーザー {user_id} を追加しました')
リアルタイムリスナー
// Node.js でのリアルタイム更新
const unsubscribe = db.collection('users')
.where('status', '==', 'active')
.onSnapshot((snapshot) => {
snapshot.forEach((doc) => {
console.log(doc.id, '=>', doc.data());
});
});
ベストプラクティス
- インデックス: クエリのパフォーマンスを向上させるために、複合インデックスを作成します。
- バッチ操作: 複数の書き込みを
batch()でグループ化し、アトミックに実行します。 - トランザクション: 競合状態を避けるために、重要な操作にはトランザクションを使用します。
トラブルシューティング
- 権限エラー: セキュリティルールが正しく設定されているか確認します。
- 制限の超過: Firestore の制限(1 秒あたりの書き込み数など)を超えていないか確認します。
- 接続の問題: ファイアウォールやネットワーク設定を確認します。