Firebaseの機能一覧・解説 mBaaSの本命を使いこなそう

前回は『Vercelの機能一覧』をご紹介しましたが、今回は『Firebase』の機能紹介となります。

『Firebase』はGoogleが提供する『モバイル・Webアプリケーション開発プラットフォーム』です。
本来、色々と手間を掛けて整備しなければならないバックエンド部分を、簡単・素早く構築することが可能です。

『Firebase』はそれだけでなく、豊富な機能や、Googleが持つデータとの統合等も出来るため、今ではあらゆるアプリ・サービスがFirebase上で構築されています。
非常に多種多様な機能が用意されているので、ぜひこの機会に『Firebase』の機能を知っていただき、サービスの開発に役立ててください。

目次

Firebase Authentication

Firebase Authenticationは、ネイティブアプリやWebアプリなどに安全かつ簡単にユーザ認証を行うことができる機能です。
単純なメールアドレス・パスワードの認証だけならば、フレームワークにも付随しているかもしれませんが、Firebase Authenticationであれば、電話番号・Google・Facebook・X(旧twitter)によるログイン認証も、時間を掛けずに実装することが可能です。

下記はFirebase Authenticationが持つ各機能になります。

Firebase Authenticationの機能:

FirebaseUI Auth

ログイン画面等のUIは、実装しようとすると地味に面倒ですよね。
かといって、ログイン画面のわかりやすさはサービス利用率に影響を及ぼすため、おざなりにもできません。

FirebaseUI Authは、厳密にはFirebaseUIというライブラリのユーザ認証機能です。Firebaseの提供するUIをもとにして簡単にログイン機能を追加することができます。

現在はiOS、Android、Web向けに提供されています。

もちろん利用環境に合わせてUIをカスタマイズすることも可能です。

Firebase SDK Authentication

FirebaseUI Authよりも高機能なユーザ認証が必要な場合はFIrebase SDK Authenticationを利用することができます。
例えば、下記のようなケースです。

・FirebaseUI Authとは違い、シンプルなログイン方法を構成したい場合
・FirebaseUI Authには対応していないC++やUnity環境でログインしたい場合
・匿名認証(一時的なゲストアカウントでログイン)や既存のログインシステムとの統合など、FirebaseUI Authには対応していないログイン手法が必要な場合
・1からオリジナルのログインUIを作成したい場合

ただし、上記のような理由がなければFirebaseUI Authを利用したほうが良いかもしれません。

Identity platform

Firebase Authに備わった機能だけでなく、更に高度なセキュリティが必要な場合は『Identity platform』を使うことができます。

例えば『多要素認証』の実装です。
ユーザーがログインする際、パスワードを入力すると、SMSへ認証コードが飛びます。
ユーザーはそれを入力しない限りログインすることができません。
一見不便に思えるかもしれませんが、例えばパスワードの漏洩時や、パスワードを使いまわしているユーザーに対しては強い対策となります。

また『シングルサインオン』も実装することができます。
本来、別ドメインにあるサービスへ同時にログイン処理を行う……というのはひどく難しいことでした。
当時のログイン情報はCookieに保存されていたため、それを別ドメインから読み取ることは不可能だったのです。
しかしSAML2.0(認証機能で使われるマークアップ言語)やOpenID Connectというユーザ認証プロトコルが開発されたことで、別ドメインにあるサービスでも同時にログインを行わせることが可能になりました。
『Identity platform』はそんな『シングルサインオン』を簡単に実装することができる機能です。

その他下記の様な機能があります。
・ブロッキング関数(条件を満たさないユーザのブロックやブロックの代わりにユーザの権限や情報を変更することができる機能)
・ユーザ行動の監視のための機能
・App Checkと連携した不正行為の防止機能(後述します)
・マルチテナンシー(商店街のテナントのように、ユーザの所属するグループを細かく分けて管理できる機能。実際に店舗単位でサービスを提供するような場合に直感的に理解しやすく便利)
・30日放置された匿名ユーザの自動削除機能

より安全に、また便利にサービスを提供したい場合におすすめな機能です。

App Check

Firebase App Checkは、自分のFirebaseが”不正利用”されていないか、検知・対策する機能です。

たとえば不正なAPIリクエストがあった場合は、データの漏洩等の事態が起こりえるでしょう。
他にもスクレイピングでデータを抜き取られたり、Botによるアクセスでサービス利用料が嵩んでしまったり……といった事態も考えられます。

『App Check』は各リクエストやアクセスが『許可されたアプリからのリクエストであるか?』を確認し、不正利用による利用料の増加や情報の抜き出し被害などを防ぎます。

それぞれのプラットフォームでどんなチェック方法を利用できるかについては下記になります。

iOS

DeviceCheck
:iOS11以降で利用可能なApple製のフレームワークで、本来はデバイスの利用状況や状態を取得する機能ですが、デバイスの固有識別子が堅牢に対策されているiOSにおいてデバイスを一意に認識できる最も安全な方法の一つであるため、AppCheckと連携して不正な利用端末でないことを確認できます。

AppAttest
:DeviceCheckフレームワークに追加されたAPIの一つで、こちらはiOS14以降で利用可能です。いわばApp CheckのApple版とも言うべき機能で、アプリの不正利用をサーバ側で防ぐための仕組みになります。アプリの不正利用とFirebaseの不正利用の両方を防ぐことができ、より安全なため対象の端末がiOS14以降ならこちらを利用したほうが良いでしょう。

Android

・Play Integrity
:Google PlayのAPIの一つで、不正に改変されたアプリや信頼できないデバイスなどからのアクセスを検出することができます。
App Checkと組み合わせることでアプリ、Firebase双方の不正利用を防ぐことが可能です。
Safety Net Attestation APIという手段も過去に提供されていましたが、現在では非推奨となっており新規の利用はできないため、現在Androidでは『Play Integrity』が唯一の最適な手段となります。

Web

・reCAPTCHA v3
:Googleの提供するWeb向けの不正利用検知システムです。
かつて(v2時代)は「私はロボットではありません」のチェックボックスや画像から選択する認証ボックスが表示されていましたが、
現在(v3)ではユーザエージェントの偽装や広告ブロック機能などの良くない操作をスコアとして判断し、それが閾値を超えるかどうかで不正利用を判別します。
この機能をもとにFirebaseへの不正利用が行われているかどうかを理解し、保護することが可能です。

・reCAPTCHA enterprise
:reCAPTCHA v3の高機能版です。
reCAPTCHA v3では秒間1000回、1ヶ月あたり100万回のリクエストを超えて利用することができないため、アクセスの多い人気サイト、大規模なサービスに導入する際にはこちらを利用することになります。
また、reCAPTCHA v3にはない、サービス上での購入、支払いにおける不正検知機能やパスワード漏洩検知、WAF(Webアプリケーションファイアウォール)の設置などができ、より強固に不正利用からユーザを守ることが可能です。
(reCAPTCHA v3との機能比較:https://cloud.google.com/recaptcha-enterprise/docs/compare-versions?hl=ja )

Cloud Firestore

Cloud FirestoreはFirebase上で利用できるデータベースの一つです。
NoSQL※という形式のデータベースであり、Google Cloud(https://cloud.google.com/?hl=ja )から提供されます。
Firebaseにおける最新のデータベースサービスであり、後述するRealtime Databaseと同じくリアルタイムアップデート機能を持ちますが、加えてより便利に利用するための独自の機能を持っています。
モバイル向けのデータベースとなっており、iOS、Androidのネイティブアプリ、Webアプリからの利用は比較的行いやすいです。(もちろんUnityやC++など、他の言語・環境からも利用可能です。)

※NoSQLとは……昔から使われていたRDB(リレーショナル・データベース)では対応できないような、複雑さ・柔軟さが求められるモダンなサービスのデータ構造において、近年よく利用されています。

Cloud Firestoreの機能:

リアルタイムアップデート

現時点でのスナップショット(その時点でのドキュメントやオブジェクトの状態を保存したもの)が更新のたびに作成される仕組みを持ち、最新のデータベースの情報を常に保持することができます。

柔軟性:

Realtime DatabaseはJSON構造でデータベースを定義していますが、大規模なデータとなると、どうしても情報の管理が乱雑になり、全体が把握しにくくなります。
例)https://jsonapi.org/examples/#sparse-fieldsets
上記のようなデータを見て、ネストしたデータを取得するコードを直感的に書けるかと問われると、そうではない人が多いのではないでしょうか?

それに対して、Cloud Firestoreでは単純なJSONとは違い、サブコレクション(小さな単位でデータの固まりを作る仕組み)を利用でき、よりデータの管理がしやすくなっています。

高機能なクエリ:

Realtime Databaseでは、クエリを作成する際、並び替えとフィルタリングを同時に行うことはできませんが、Cloud Firestoreではこれらを同時に扱い、より複雑なクエリを組むことが可能です。

さらにCloud Firestoreは、検索結果の量に基づいてパフォーマンスが決まるので、どれだけ大きなデータを検索してもパフォーマンスが落ちることはありません。例え検索対象が非常に多くても、結果が少なければ高速に動作するのです。ここはRealtime Databaseとは異なる点で、Realtime Databaseでは特定のタイプの検索でパフォーマンスが落ちることもありました。

オフラインサポート:

Cloud Firestoreはデバイスがオフライン状態の際でも、各環境のローカルでデータの更新や取得を行い、利用のサポートを提供します。
Realtime DatabaseがiOS、Android向けのオフラインサポートのみ対応しているのに対し、Cloud FirestoreではWebにも対応しています。

スケーラビリティ:

完全な自動スケール機能を持ち、アクセス数の増加や利用者の増加に合わせて最大100万件の同時接続数と、毎秒10,000 回の書き込みまで対応可能です。(今後更に引き上げられる予定です)
この機能により、利用者が少ないときは機能と価格を適度に抑え、アクセスが増えたタイミングで、大量のアクセスに耐える構成へスケールすることができます。コストを抑えつつ、ユーザビリティに優れた環境を提供できるのです。

Cloud Firestoreのユースケース:

大規模なユーザ利用を見据えたWebサービス

モダンなSNSやその他Webアプリでは、画像・動画のやり取りや、数多くのユーザに対する処理を適切に行う必要が生じます。
その点、リアルタイム性とスケーラビリティに優れており、またデータ量ではなく回数で料金計算を行うCloud Firestoreは、こうしたアプリのデータベースとして良い選択肢となります。

Realtime Database

こちらはFirebase上で初期から提供されているデータベースであり、Cloud Firestoreと同じくNoSQLのデータベースです。
前述の通り、Cloud Firestoreと比べると機能の多彩さでは見劣りしますが、逆にシンプルであるがゆえの利点があります。

Cloud Firestoreと比較したメリットが下記の通りです。

Firestoreと比較したメリット:

インポート/エクスポートが楽:

『Realtime Database』はJSONのフォーマットを利用したシンプルなデータ構造のため、外部で作ったJSONをそのままインポートしてデータベースとして利用したり、現時点でのJSONをエクスポートして別のデータベースに移行する、といったことが簡単にできます。
一方『Cloud Firestore』ではエクスポートしたデータベースにしか互換性がなく、JSONなど別フォーマットでインポートしたい場合はそのためのコードを用意する必要があります。

日時バックアップのサポート:

『Cloud Firestore』では、バックアップのスケジューリング機能はまだプレビューリリースとなっており、準備にも手間がかかります。
一方、『Realtime Database』では2016年からサポートされており、ボタンを押すだけで有効にすることが可能です。また、データも30日分保持してくれるため何か起きたときの復旧も、柔軟に行うことができます。

料金体系の違い:

『Cloud Firestore』では、主にリクエスト回数に応じて料金がかかるのに対し、『Realtime Database』では通信したデータの量に対して料金がかかります。(回数は関係ありません)
そのため小さいデータを頻繁にやり取りする場合等は、『Realtime Database』のほうが安く済むでしょう。

Realtime Databaseのユースケース:

テキストのみの簡単なチャットツール:

サイトやサービス内にチャットツールを組み込みたい場合、『Realtime Database』は最適です。
チャットの送信回数に制限がなく、リアルタイム性の高いやり取りを実現することができます。

Extensions

※まだ正式リリースされていない、ベータ版の機能です。
Firebase Extensionsは、名前の通り、Firebase上で利用できる様々な拡張機能(Extension)を提供する仕組みです。
下記のサイトから様々な拡張機能を探し、Cloud Functionsとしてプロジェクト内にインストールすることができます。
Extensions Hub:https://extensions.dev/

いくつか代表的な拡張機能を紹介しましょう。

代表的な拡張機能:

Stream Firestore to BigQuery

ビッグデータ解析で良く利用されるBigQueryとFirestoreを接続する拡張機能です。
ボタンを押していくだけでBigQueryを利用できます。

Run Payments with Stripe

決済用APIであるStripeとの連携を行う拡張機能です。
簡単にECサイトなどの決済基盤を作ることができます。

Translate Text in Firestore

翻訳機能の追加用拡張機能です。
ノーコードでGoogleの翻訳技術をサービスに組み込むことができます。

Cloud Storage

Cloud StorageはFirebase上で利用できるストレージで、画像、動画などのユーザが作成したコンテンツを保存したり、読み出したりする際、主に利用されます。
基本的には単純に保存できる場所という認識で問題ないですが、Googleが提供する他のサービスと統合する上で、大きなメリットがあります。

他サービスとの統合によるメリット:

Google Cloud Storageとの統合:

Cloud Storageは、Google Cloud Storage上にファイルを保存するため、Google Cloud側からのアクセスも勿論可能となります。
また、Google Cloud Storage APIが提供する各種機能も利用でき、ファイルのコピーや移動、『参照時に使用可能なすべてのファイルを列挙する』等の複雑な操作も実行可能です。

その他、データ量に合わせたストレージの自動スケーリングや、ファイルのバージョン管理、また期間限定ファイルの取扱(一日で画像を消す等)といったことも実現できます。

FIrebase Authenticationとの統合:

Firebase Authenticationを利用することにより、ユーザ単位でファイルへのアクセスを管理することができます。SNSサービスなどでファイルの公開範囲を指定する際も、この機能を利用すれば簡単に実現可能です。

Firebase Hosting

Firebase HostingはFirebaseが提供するホスティングサービスです。
多くのWebサービスやアプリが、現在Firebase Hostingを利用して公開されており、人気の機能の一つとなっています。

Firebase Hostingの特色:

公開までが簡単:

以下の手順を行うだけで簡単にサービスをホスティングすることができます。(Node.js,npm環境でサービスを作っている場合)

  1. CLIで実行するためのFirebase-toolsをインストール
  2. CLIからFirebaseにログイン
  3. firebase init コマンドでローカル環境とFirebaseを連携
  4. firebase deploy

デフォルトでSSLに対応:

firebase deployした時点でhttpsのURLが発行されます。
SSL証明書の準備などは勿論不要です。

CDNエッジを用いた高速な配信:

デプロイ時にアップロードされたファイルは、世界中のCDNエッジで管理され、ユーザーのアクセスした箇所に最も近いエッジから提供されるため、非常に高速な配信を行うことができます。

デプロイ・ロールバックが簡単:

先程説明した通り、firebase deployコマンド一つでデプロイが可能です。何か問題が生じた場合も、ワンクリックでロールバック出来ます。

Firebase Hostingのユースケース:

個人開発サービスなど規模の小さいサービスの公開

Firebaseの他の機能との連携をしたい場合や、サクッとサービスを公開したい場合等にはちょうど良い選択肢です。
ただしホスティングサービスとして考えると、VercelやNetlifyなどのほうが『無料で使えるストレージ量が多い』、『高機能』といった利点があるため、それぞれ一長一短と言えます。

Cloud Functions

Cloud Functionsは正式にはCloud Functions for Firebaseであり、Google Cloudの提供するCloud FunctionsのFirebase版という立ち位置です。
サーバレスなフレームワークで、リクエストが来たときにそれに応じたコードを実行してくれます。

Cloud Functionsの機能:

Firebase Authenticationとの統合

ユーザが作成されたとき、削除されたときにCloud Functionを実行することができます。
ユーザ情報と紐付けられた別サービスにて、各種データを更新したいとき等に重宝します。

Cloud Storageとの統合

Cloud Storageにファイルがアップロード、更新、削除された際にCloud Functionを実行することができます。画像がアップロードされたタイミングで、最適化処理やリサイズをCloud Function内で行う、といった使い方が可能です。

メンテナンス不要

一度作成さえすれば面倒な管理は不要です。
同時アクセス数が増えるなど、負荷が増加した場合にも自動でサーバをスケールし、可用性を自動で維持します。

Cloud Functionsのユースケース:

お気に入りユーザの新規投稿通知

SNS等でフォローしているユーザの動向をリアルタイムに知りたい場合、登録したユーザの新規投稿等でトリガーし、自分に通知が来るような機能を作ることができます。

不適切なユーザの言動の削除

SNSやチャットツール上で、メッセージがデータベースに登録される度にトリガーし、不適切な言葉が使われていないかを確認・削除するような機能を作ることができます。

Firebase Machine Learning

※正式リリースではなく、ベータ版の機能です。
『Firebase Machine Learning』はAndroid、iOSのネイティブアプリ向けの機能で、機械学習機能をアプリとして提供することができます。

Firebase Machine Learningの機能:

独自の機械学習モデルをデプロイ

利用したい独自のTensorFlow LiteモデルがあればそれをFirebaseにデプロイするだけで簡単にモデルをアプリ内にダウンロードして利用することができます。
アプリとは別でモデルをホスティングするため、アプリのバージョン更新に関係なく常に最新のモデルを提供可能です。

Google側で用意された学習済モデルの利用

独自のモデルを持っていなくとも、ML Kitで提供されている学習済モデルを利用可能です。
テキストの認識、顔認識、バーコードスキャンなどよく利用されるユースケースに沿ったモデルが準備されています。

Cloud Vision APIの利用

Googleが持つ画像認識系の学習済モデルを、クラウド経由で利用することができます。
クラウド側で推論するため、デバイスの性能に関わらず安定したパフォーマンスを出すことが可能です。

Firebase Machine Learningのユースケース:

リアルタイム性の高い動画の顔認識

カスタムしたTensorFlow Liteモデルを利用し、デバイス上で動画に出てくる人物の顔認識ができます。ネットワーク状況やレイテンシに依存するためクラウド上での対応は厳しいですが、Firebase MLを利用してデバイス上で推論できるためこのようなユースケースにも対応可能です。
実用例としては、顔認識によるセキュリティや、来場者の記録等に使えるでしょう。

Firebase Remote Config

『Firebase Remote Config』はアプリの更新をせずにアプリの動作や外観を変化させるための機能です。
例えば季節によって見た目を変化させたいアプリや、ランダムに各ユーザへ違う画面を提供することでABテストを行いたいといったニーズに応えることができます。
iOS、Androidのネイティブアプリだけでなく、Web、C++、Unityでも提供可能です。

Firebase Remote Configの機能:

値を変更するだけですぐに機能を提供:

サーバーサイドのパラメータ値を変更することで、季節限定のプロモーションや期間限定キャンペーンに合わせて迅速にUIを提供可能です。時間がかかりがちなアプリの審査や、ユーザーにアップデートを強いる、といった必要はありません。

UIのパーソナライズ:

独自のパーソナライズ機能を持ち、機械学習をもとにしたユーザへの最適なUX提供ができます。
Googleアナリティクスと連携することで、流入元や閲覧コンテンツ等の情報をもとに、訴求力の高いコンテンツを提供することが出来ます。

Firebase Cloud Messaging

『Firebase Cloud Messaging』は、アプリやWEBサイトの閲覧者向けにプッシュ通知の配信ができる機能です。
(Web、C++、Unityでも利用可能)
プッシュ通知は外部サービスを利用した場合、規模が増えるごとに多額の利用料を課されることとなりますが、『Firebase Cloud Messaging』を使うのであれば、非常に低コストでプッシュ通知を配信することが出来ます

Firebase Crashlytics

Firebase Crashlyrticsは、アプリやUnityでクラッシュした際のエラーレポートを分析し問題解決をサポートするためのツールです。

Firebase Performance Monitoring

Firebase Performance Monitoringは、その名の通りアプリのパフォーマンス計測をするためのサービスです。
Android, iOS, Flutterのアプリ向け、もしくはWebアプリで利用可能です。
アプリの起動に掛かる時間や、httpリクエストの数、応答時間など、様々なデータを元に計測を行い、ボトルネックを改善するのに役立ちます。

Firebase Test Lab

『Firebase Test Lab』はGoogleのデータセンター上のデバイスを利用して、リモートでアプリのテストを行うことができる機能です。
(iOS、Androidのネイティブアプリ向けです)
仮想端末では起きないデバイス特有の問題を見つけたり、実機でないと再現できないような機能のテストをする際に重宝します。

Firebase App Distribution

Firebase App Distributionは、iOS、Androidのプレリリース版アプリの提供を行うためのサービスです。
招待したテスターのみにプレリリース版を配布し、レビュー等をもらうことが可能です。
この機能を用いることで、あらゆるテスターへ迅速にプレリリース版を配布することが出来ます。

Google Analytics

『Google Analytics』は、Googleが提供するアプリケーションに関する情報の統計・分析機能です。単体の機能としても有名ですが、Google Analytics for FirebaseとしてFirebase版でも提供されています。
こちらは各種Firebaseの機能との統合がされており、統計情報を便利に扱うことが可能です。

Google Analyticsの機能:

BigQueryとの統合:

Googleの提供するビッグデータ分析などに使うデータベースであるBigQueryと統合することにより、AnalyticsのデータをBigQuery収集してより高度な情報の分析を行うことができます。

Crashlyticsとの統合:

Crashlyticsでクラッシュが報告される度、Analytics側に特定のイベントを記録することができます。なぜそのバグが発生したのか、ユーザの行動ベースで特定出来るため、エラーの調査が行いやすくなります。

Firebase Cloud Messaging との統合:

プッシュ通知メッセージが送信される度、Analyticsのログに記録することができます。
各メッセージからどのぐらいの割合でアクセスが来たのか、解析することが可能です。

Remote Configとの統合:

アナリティクスのユーザ層情報などを利用して、アプリの外観や挙動を変更できます。
各パーソナリティ等に沿って、訴求力の高いコンテンツを見せることが可能です。

Firebase A/B Testing

Firebase A/B Testingはその名の通りABテストを行うためのサービスです。
見た目や挙動を変化させる『Remote Config』で作成するテストと、メッセージを変化させる『Firebase Cloud Messaging』で作成するテストの二つが存在します。

Firebase In-App Messaging

Firebase In-App Messagingは、iOS/Androidのアプリ内でメッセージをユーザに送信し、広告の視聴やアイテムの購入などを促す機能です。実際に目にしたことがある方も多いかと思われます。

アプリを利用中、ダイレクトに宣伝を行うことが出来るため、非常に効果が高い訴求となります。

お問合せ&各種リンク

presented by 

よかったらシェアしてね!
  • URLをコピーしました!
目次