例えば、 モバイルアプリ 開発に興味があれば、 Firebase を使ってみようと思うことがあるかと思います。それに加えてサーバレスコンピューティングを絡めたアプリ開発をしてみようと思ったときに、” Cloud Functions ”を活用すればよいことは分かると思います。ただし、すぐに” GCP のCloud Functions “と” Firebase の Cloud Functions “という 2 つの類似サービスがあることに気づくと思います。あるいは、この 2 つの存在に気づけなかったために混乱してしまう局面もあるかと思います。
そこで、まずは GCP と Firebase そのものの関係性や違いを整理し、次にこの 2 つの Cloud Functions を比較したうえで、どのようなユースケースでどちらを選択すべきかを整理してみました。
GCP と Firebase
” GCP の Cloud Functions “と” Firebase の Cloud Functions “は、 Cloud Functions サービス 単体で考える場合、それぞれ以下の異なる サブドメイン で運用されていることからも分かる通り、基本的に 別物 と考えたほうがよさそうです。それぞれのサービスにアクセスするためのコンソールも別々になっています。
サービスドメイン
コンソール
開発したいアプリ( Webアプリ, スマホアプリ 等 )が、 GCP のサービス群だけで構成可能であれば、 GCP の Cloud Functions を選択すればよさそうですし、 Firebase のサービス群だけで構成可能であれば、 Firebase の Cloud Functions を選択すればよさそうです。
Firebase の成り立ち
Firebase は、 Google とは 別会社 で開発されたサービスを Google が買収することで、 Google がもともと進めていた GCP サービス に追加された サービス です。
Firebase(ファイアベース)は、2011年にFirebase, Inc.が開発したモバイル・Webアプリケーション開発プラットフォームで、その後2014年にGoogleに買収された
https://ja.wikipedia.org/wiki/Firebase
買収というと、システム統合を思い起こしてしまいますが、GCP と Firebase は統合されているのではなく、一部の サービスを共有している状態 といえます。
GCP と Firebase の 共有部分
Firebase and Google Cloud share three products: Cloud Firestore, Cloud Functions, and Cloud Storage.
https://firebase.google.com/firebase-and-gcp?hl=ja
上記によると、以下の 3 つのサービスが Firebase と GCP で共有されているということです。
- Cloud Firestore
- Cloud Functions
- Cloud Storage
データ共有 している Firestore
Firestore について GCP Console と Firebase Console を使って実際にアクセスすると、全く同じデータを参照することができます。以下の図は実際に私が利用している環境のものになります。同一の ドキュメントID がそれぞれから参照できており、データが共有されていることがわかります。
一方で Cloud Functions はコンピューティングサービスでもあり、データの共有と同列には語ることができなさそうです。
Cloud Functions における対応言語の違い
Cloud Functions は Firestore における 共有 とはニュアンスがかなり異なります。 Googl Cloud Tech の Youtube Channel で紹介されている以下の通り、そもそもサポートされている言語の種類が大きく異なります。例えば、 Python で作ったプログラムをサーバレス環境で動作させようとする場合は GCP Cloud Functions 一択となります。
language | Firebase | GCP |
---|---|---|
Node.js / Typescript | OK | OK |
Python | OK | |
Java | OK | |
Go | OK |
モバイルアプリ からの データアクセス 方法
モバイルアプリ (例えば iOS アプリ )から データベース である Firestore にアクセスする場面を考えてい見ます。
Firebase では iOS 用の SDK が用意されているため、 SDK を活用することで 関数 にアクセスするように Firestore にアクセスすることができます。このあたり、 Firebase の Firebase たる所以ではないかと思います。
一方 GCP としては、 SDK は用意されていません。以下のような情報が GCP 用の サブドメイン にあるので期待させますが、中身としては Firebase を活用するものとなっています。
モバイルアプリ から Firestore に アクセス する場合は Firebase を利用することになりそうです。
プロジェクト管理
GCP, Firebase 共に「 プロジェクト 」という単位でリソースを管理していきます。 GCP プロジェクト と Firebase プロジェクト とで データ を 共有 する場合は、その 2 つを結びつけることで実現します。例えば、既存の GCP プロジェクト に新規で Firebase プロジェクト を追加する場合は、 Firebase プロジェクト 作成時に紐付ける GCP プロジェクト を選択するという流れになります。
まとめ
GCP と Firebase という似て非なる 2 つのサービスを比較してきました。自身がどういう プロジェクト を構成し、どの サービス を使うべきか、については以下が ポイント になると思います。
- モバイルアプリ から Firestore データ に アクセス したいか?
- サーバサイド で Javascript 以外の言語の プログラム を デプロイ したいか?
これらのポイントからざっくり言うと以下のようになるかと思います。
1 のみ Yes なら、 Firebase プロジェクト のみを作成
2 のみ Yes なら、 GCP プロジェクト のみを作成
両方 Yes なら、 Firebase 、 GCP プロジェクト の双方を作成し紐付け
私自身は双方 Yes だったため、上述したとおり、 GCP と Firebase の双方の プロジェクト を作成して開発を進めています。
なお、 2 には「 GCP が提供するその他サービス( AI 関連など)」も含まれそうですが、ここでは割愛します。
余談ですが、検索窓に「 Cloud Functions + XXX 」という形で検索すると、場合によって GCP のものと Firebase のものが混在して結果出力されてしまうことがあるので、検索窓に GCP 、 Firebase と記載するか、検索結果のサブドメイン( cloud or firebase )をみて、該当する方をチェックするようにするとよいかもしれません。