0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【2020年版】Cloud Firestoreの基本機能とよくある心配点をまとめた

Last updated at Posted at 2020-05-10

はじめに

仕事でリアルタイムアプリケーションを作ることになり、それにあたって色々な選択肢を検討した結果、ReactJS + Cloud Firestoreを使うことになりました。

旧Realtime Databaseからクエリやスケーリングが強化されたCloud Firestoreが正式リリースされて1年、ある程度の情報もまとまってきたことから、今回仕事で採用することにしました。

僕は昔からRealtime Databaseを個人的に使っていて、仕事で使うには心配な点がいくつかあったのですが、改めてCloud Firestoreをみてみたら知らなかった変更点が多くあったため、まとめてみました。

Firestore (Realtime Database)でよくある技術的な心配点

1. 検索(クエリ)の弱さ

Firestoreでは複合クエリに対応しています。また、Realtime Databaseよりも直感的に書くことができます。

// 一般的な検索
citiesRef.where("state", "==", "CA")
citiesRef.where("population", "<", 100000)
citiesRef.where("name", ">=", "San Francisco")

// regionsフィールドの配列にwest_coastを含むcitiesを返す
citiesRef.where("regions", "array-contains", "west_coast")

✖️できないこと:
OR -> 2回検索して結果を結合する必要あり
!= -> where("age", "<", "30")は使えない。where("age", "<", "30")where("age", "<", "30")を結合する必要あり。

2. データ構造の柔軟性

データが柔軟すぎるため破壊的変更の問題が起きるイメージでしたが、データ構造を検証することで、RDSのようにデータ構造を常に正規化しておくことができます。

Data Validation
https://firebase.google.com/docs/rules/data-validation

3. 深いネストで全て取得してしまう問題

Firebaseではネストが深くなった時、上位ノードを取得するとそれ以下を全て取得するため通信量やパフォーマンスに問題を与えることがあります。

これを解決するため、FirestoreではSubCollectionという機能が登場しました。

SubCollectionはRDBにもないFirestore独自の概念です。Collectionの中のDocumentが内部に持つCollectionのことをSubCollectionと言います。

さらに、CollectionGroupと組み合わせることで横断的なクエリを用意することが可能です。

詳しい使い方は、Firestoreに関して様々情報発信されている1amageekさんの記事で解説されています。
https://qiita.com/1amageek/items/343f262ba3b50e657078

4. WEB SDKでのオフラインサポート

Realtime DatabaseではできませんがFirestoreでは標準でサポートしています。

5. スケーリング

Firestoreでは自動スケーリング+マルチリージョンに対応しています。

参考記事

とても参考にさせていただきました。

テスト駆動開発

以下の記事で、TypeScript + Jest + セキュリティルールを用いて、テスト駆動開発を行うやり方が紹介されています。
https://qiita.com/ryo2132/items/02b4d341fb01f04ec0be

データベース設計

よく問題になる1対多、多対多などのDB設計に関しては、1amageekさんの記事でかなり詳しく紹介されています。
https://qiita.com/1amageek/items/d606dcee9fbcf21eeec6

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?