-
Cloud Firestoreで「いいね」機能を実装するときの勘所
Tuesday, December 31, 2019
何かしらのサービスを作る際に、ユーザー同士のコミュニケーションを促進させる機能の一つに、 TwitterやInstagramなどのサービスでおなじみの「いいね」機能があります。 機能としては 投稿等に「いいね」をつけることができる(♡だったり☆だったりシンボルは様々) 「いいね」がどれだけついたか、その数がわかる (最近だとInstagramがいいねの数の表示をなくしましたね🤔) 投稿等に「いいね」をしたユーザーの一覧が見れる 自分が「いいね」をした投稿等の一覧が見れる といったものが挙げられます。 このような機能ををFirebase、Cloud Firestore(以下Firestore) を使って実装する場合、 どのように実装するのか、どのような設計が良いのか、 逆にどのような設計だとまずいのか、セキュリティルールをどう書くべきか、、 深堀りして書いてみようと思います。やや長めの記事になります。 また、記事の後半でも改めてお伝えしますが、この記事で触れている内容は フォロー・フォロワー機能 友達機能 といった機能にも応用可能です。 …
-
Cloud FunctionsのCloud Firestoreトリガーの重複発火を防ぐ、より良いアプローチ
Monday, December 16, 2019
Cloud Functionsで、Cloud Firestoreトリガーを使う場合、「重複発火」に気をつけないといけません。 本来であれば、記述したCloud Functionsの処理は1回のトリガーで1回だけ実行されてほしいのですが…どういうわけか複数回呼び出されることがたまに起こります。 ちなみに、「少なくとも1回以上実行される可能性がある」ことと、「実行する関数自体は冪等性を担保して実装してね」とドキュメントには記載があります。 Cloud Firestore triggers#Limitations and guarantees 今回は重複発火が起こると困る例や、防ぐためのより良い方法を書いてみようと思います。 …
-
Firestoreのarray-contains-any,inのクエリのセキュリティルールを書く
Wednesday, November 13, 2019
Firestoreで array-contains-any と in のクエリが登場し、条件に合致するドキュメントの一覧取得がより便利になりました。 今までOR検索的なものはなかったので、上記のようなクエリと同等のことをしようとするとその分並列に条件を変えて取る、といった具合に非効率だったりもしました。 今回は、新たに登場したクエリを使う際に セキュリティルールをどう書けば良いのか 、簡単にご紹介します。 …
-
CI環境でFirestoreのEmulatorをキャッシュする
Wednesday, November 6, 2019
FirestoreのエミュレータをCI環境下でキャッシュするための方法や、ローカル環境でも無駄なエミュレータのインストールを走らせるのを抑制するための方法を書いてみます。 …
-
XcodeのUnitTestでFirestore Emulatorと接続してテストを書く
Saturday, September 28, 2019
XcodeのUnitTestでCloud FirestoreのRead,Writeのテストをしたい場合に、 Firestore Emulatorを使うと実際のプロジェクトを使わずに読み書きのテストができるので非常に便利です。 またこの方法を使うと、テスト用にFirebase Projectを作成する必要もなくなります。 記事の続きで導入方法を紹介します。 (2019/09/29: セキュリティルール周りに関して記事を修正をしました。) …
-
Cloud Firestoreのセキュリティルールは2018年でどう進歩したか
Monday, December 24, 2018
この記事はFirebase#2 Advent Calendar 2018の24日目の記事です。 この1年の間にFirestoreのセキュリティールールに関してどのような変化や関心事があったのか、振り返ってみようと思います。 …
-
【改訂版】 Firebase Cloud Firestore rules tips
Tuesday, December 11, 2018
この記事はFirebase Advent Calendar 2018の12日目の記事です。 以前にCloud Firestore rules tipsを書いてから時間が経過したことと、その記事を書いてから僕自信もより理解を深めることができたので、改訂版としてこの記事を書きます。 …
-
【Firestore rules】readでarray-containsのクエリをチェックする
Sunday, August 12, 2018
firebase JavaScript SDK v5.3.0以降で、Firestoreでのarray(list)の扱いが劇的に向上し、 where句での検索(array-contains の使用) 要素の追加削除の向上(array union/remove) が提供された。これに伴って、Firestoreのrulesでも、read時にarray-containsのクエリのチェックができるようになったので試してみた。 …
-
【Firestore rules】listのルールでorderByのクエリをチェックする
Saturday, July 21, 2018
Firestoreのルールで、listのオペレーションに対してクエリの条件が正しいかどうか確かめることができるのだが、 orderBy を使おうと思った時にリファレンスを見ても詳しく書かれていなかったので調べてみた。 …
-
【Firestore rules】documentのpathを生成する便利関数
Friday, July 6, 2018
Firestoreのruleでdocumentのpathを記述するとき、毎回 /databases/$(database)/documents/... って書くの大変…。なのでこれをなるべく楽に、安全に記述できる便利関数を紹介する。 …