Firestore セキュリティルールでフィールドの型を指定する方法
Firestore セキュリティルールでフィールドの型を指定する方法を解説。Firestoreのセキュリティルールでフィールドの型を指定する方法を解説。
FirestoreはNoSQLのスキーマレスデータベースであり、フィールドに格納できるデータ型がデータベースレベルで厳格に制限されない点が特徴です。
この柔軟性がFirestoreの大きな利点の一つと言われていますが、正直それが利点になるアプリケーションなどほとんど無いでしょう。
また、アプリケーションのデータ整合性を保つことのほうがはるかに優先されることが多いでしょう。
そのため、基本的にはどのようなアプリケーションであっても、この型指定はやるべきでしょう。
この記事では、Firestoreのセキュリティルールの記述によって、フィールドの型を制限する方法を紹介します。
データ型を指定する
Firestoreのセキュリティルールではis
演算子を使用して、特定のフィールドに対してデータ型を指定することができます。
例えば、レビューデータを扱うアプリケーションの場合、そのscore
が整数、headline
、content
、author_name
が文字列、review_date
がタイムスタンプであることを以下のルールで指定することが可能です。
このis
演算子は、以下のデータ型をサポートしています。
string
... 文字列。テキスト。int
... 整数(1や3)。float
... 浮動小数点数(1.0や3.2)。number
... 数値。bool
... 真偽値。trueまたはfalse。list
... 配列。map
... キーとバリューの組み合わせ(Object)。timestamp
... タイムスタンプ。bytes
... バイナリデータ。latlng
... 地理的な位置情報(緯度と経度)。path
... Firestore内のドキュメントへの参照パス。
なお、 constraint
、duration
、set
、map_diff
のデータ型もサポートしていますが、これらはセキュリティ ルールの言語自体によって生成され、クライアントにより生成されないので、実際のアプリケーションではほとんど使用しないでしょう。
※ request.resource.dataとは、リクエストに含まれた(つまりユーザーが送信した)ドキュメントデータを意味します。
リストとマップの型も指定できる
list
とmap
のデータ型は、汎用型や型引数をサポートしていません。
つまり、リストやマップが特定の型の値のみを含むように直接指定することはできませんが、リストやマップの特定のエントリに対しては型の適用が可能です。
例えば、tags
フィールドがリストで、その最初のエントリが文字列であること、またproduct
フィールドがマップで、その中のname
が文字列、quantity
が整数であることを指定するルールは以下のようになります。
ヘルパー関数を作成すると便利
ただし、上記のような内容を全てのコレクションの部分に記述してしまうと、全体としてかなり読みづらいコードになってしまいます。
長くなり読みづらくなるのを回避するのと、重複するルールの記述を避けるために、ヘルパー関数を作成するほうが良いでしょう。
以下の例では、isValidType()
関数を定義し、レビュー関連のフィールドが正しいデータ型であるかどうかをチェックしています。
Firestore設定時に「Error It looks like you haven't used Cloud Firestore in this project before」というエラーメッセージ
Firebase CLIでFirestoreをセットアップする際に表示される「Error: It looks like you haven't used Cloud Firestore in this project before」エラーの解決策を3つ紹介します(firebase-tools再インストール、GCPロケーション設定、Firestore作成)。
Macで三本指のMission Controlが動作しなくなったときの解決方法
Macで三本指のMission Controlが動作しなくなったときの解決方法を解説。Macで三本指のMission Controlが動作しなくなったときの解決方法を解説。