Chapter 02無料公開

FirebaseとCloud Firestoreについて

su-
su-
2020.10.03に更新

Firebaseとは

Firebaseは、Google社が提供しているモバイル及びWebのプラットフォームで、mBaaS(mobile Backend as a Service)の1つでもあります。
元々はFirebase社が2011年よりサービス提供をはじめ、2014年よりGoogle社が提供することとなりました。
Firebaseは現代のサービス開発で必要不可欠である「バックエンド」の開発に関して協力且つ様々な機能を提供し、開発者のコストの削減や開発スピードの向上を可能にしてくれます。

Firebaseが提供している機能

代表的な機能としては、ユーザーの認証(ログイン)機能を提供している「Authentication」、ドキュメント志向のNoSQLデータベースであり、リアルタイム同期を可能にするデータベースである「Cloud Firestore」、何かしらのFirebaseのイベントやエンドポイントのコールをトリガーに、指定したコードを実行する「Cloud Functions」などがあります。

また他にも以下のような機能があります。

  • Storage
  • Hosting
  • Machine Learning
  • Crashlytics
  • Performance
  • Test Lab
  • App Distribution
  • Analytics
  • Predictions
  • A/B Testing
  • Cloud Messaging
  • In-App Messaging
  • Remote Config
  • Dynamic Links

これらの機能をうまく組み合わせるだけで、素早く且つ高機能にサービスを開発することができます。

無料で使い始めることができる

また、Firebaseは無料で使い始めることができ、サービスが大きくスケールするまではそこまで料金が発生しないため、個人開発をされている方にとってはとても心強いプラットフォームであると言えます。
一部の機能に関しては使用量に制限がかかっていたり、機能が開放されないこともあるため、実際のサービス運用時には従量課金制プランにて使用していくことになります。

導入がとてもしやすい

どの機能を取っても高水準な機能を備えていて、導入も簡単なので小さく試しやすいです。
またFirebaseではiOS/Android/Webとそれぞれのプラットフォームで使用することができ、公式ドキュメントも豊富なため、じっくり読み解いていけば難なく導入していくことが可能です。

一方でコアに機能を使いこなそうとすると、ある程度の設計力や、"割り切り"も必要になってきます。
喩えると、「80点を取るまでは簡単だが、そこから100点を目指すのには技量が必要」といったところでしょうか。
例えば後述するFirestoreに関してはリアルタイム同期、オフラインサポート、DB設計の柔軟性などを兼ね備えていますが、SQLでは簡単に実行できるようなクエリによるデータの取得がFirestoreでは出来ない場合があります。
その場合には様々な方法を模索し、ご自身のサービスに一番良いアプローチを選択し機能を実現していくことになります。その道のりが困難なものになる可能性もあります。
現在では多くの方がFirebaseを使って開発されているので、調べれば自分の実現したいアプローチを試した方の記事などを見つけることができるかもしれません。


...といった具合でPros/Consをあげてしまうと本書の本題と大きく外れてしまう恐れがあるため、このあたりにしておこうと思います。

Cloud Firestoreとは

Firestoreは柔軟かつスケーラブルなNoSQLデータベースです。「コレクション」と「ドキュメント」という概念を用いてデータを階層的に格納し管理します。
一般的なデータ(文字列や数値など)はドキュメントにまとめられ、そのドキュメントをまとめたものがコレクションとなります。
また、ドキュメントは自身の下にサブコレクションを持つことができます。つまり「コレクション→ドキュメント→コレクション→...」といった形で階層的にデータが集約、格納されます。

Firestoreのもつ機能

Firestoreが持つ主な機能としては以下のものが挙げられます

  • 柔軟性: コレクションとドキュメントを使った階層型データ構造
  • 高度なクエリ処理: クエリを用いて効率よくドキュメントを取得する
  • リアルタイムアップデート: データのリアルタイム同期
  • オフラインサポート: データを端末にキャッシュし、オフラインでもデータを扱うことが出来、再度オンラインになった場合にオペレーションした結果を同期する
  • 拡張性のある設計: 整合性の確保、アトミックな一括オペレーション、トランザクション

また、Firestoreはリクエスト量に応じてオートスケールするため、急激なアクセス数の増加に対しても、特に開発者が設定せずとも耐えられるようになっています。

Firestoreとの、データの読み取りや書き込みは各種プラットフォーム向けに提供されているSDKやパッケージを介して行われます。
また、REST API及びRPC APIも提供されているため、SDKが使えない環境下でもFirestoreを使用することが可能です。

データベースとクライアントが直接つながる

通常、クライアント側から何かデータを取得したり書き込む場合には、バックエンド側からAPIを提供してもらい、そのエンドポイントを叩き、バックエンド側で認証や値の正当性のチェック、アクセス権の検証などをしてデータを返却したりデータベースに書き込みを行ったりします。

一方Firestoreは、提供されているSDKを介して直接データを取得したり書き込みしたりすることが可能です。つまりデータベースの操作に関してのロジックをクライアント側が持つことになります。

バックエンドを介さず直接データベースを操作できるので、バックエンドの開発を待って、APIが出来てから動作確認をするような開発手法と比べて素早い開発が可能になりますが、そのデータを読み取ることが可能か、書き込むことが可能かどうかを判断する必要が出てきます
その際に「セキュリティールール」と呼ばれるものを記述しFirebaseに設定することで、安全にFirebaseとクライアントとでデータの読み書きを行うことができるようになります。


次章以降で、この「セキュリティールール」について詳しく触れていこうと思います。