Firebaseの各機能を3行で説明する


Firebase は機能が多すぎてよく分からなかったので、自分の整理用に**「 Firebase で何ができるか」**をだいたい3行でまとめてみました。

利用可能な環境かどうかは、以下のアイコンで示しています。
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"> … Android 利用可能
<img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"> … iOS 利用可能
<img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">… Web 利用可能

[追記] 新しい機能が増えたので2018/09/26時点で整理しました。

# Analytics

## Google Analytics for Firebase
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
イベントベースでデータ収集・分析ができる。無料。
アプリの場合は Google Analytics for Firebase を、ウェブサイトの場合は Google Analytics を使うことになる。
BigQuery と統合して複雑な解析を行うこともできる。

# Develop

## Firebase Authentication
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
メールアドレスとパスワードを利用したユーザー認証だけでなく、Google / Facebook / GitHub / Twitter　などのアカウントを利用した認証も簡単に実装できる。無料。
ユーザーのメールアドレス等は Authentication 側で管理し、それ以外の会員情報は Authentication から得られる一意なIDを key としてアプリケーションサーバーの Database に保持するのがよさそう。

## Firebase Realtime Database
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
データをクラウド上の NoSQL データベースに保存し、複数のユーザー / 端末間で同期することができる。
オフライン時は端末のローカルキャッシュに保存され、オンラインになったタイミングで同期される。
[料金](https://firebase.google.com/pricing/)は同時接続数・保存データ量・ダウンロードデータ量によって決まるが、無料枠もある。
※ Cloud Firestore（ベータ版）がリリースされ、現在はそっちのほうが推奨されているようです。

## Cloud Firestore
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
Firebase Realtime Database と似た NoSQL データベース。（違いについては[こちら](https://firebase.google.com/docs/database/rtdb-vs-firestore)）2018/09/26 時点ではベータ版。
利用できるデータ型が増えたので、ベータ版であることを気にしなければこちらのほうがいいらしい。
[料金](https://firebase.google.com/pricing/)は Firebase Realtime Database と若干違い、保存データ量・月間帯域量・データの読み書き量によって決まるが、無料枠もある。

## Cloud Storage for Firebase
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
写真や動画などのコンテンツを保管、取得することができる。
格納先は Google Cloud Storage なので、mruby で動的に画像変換をしてから取得するといったことも可能。
[料金](https://firebase.google.com/pricing/)は保存データ量・ダウンロードデータ量・アップロード/ダウンロード回数によって決まるが、無料枠もある。
ただし BLAZE プランでは、使用量に応じて料金が変化するので注意が必要。

## Firebase Hosting
<img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
アセット（HTML、CSS、JavaScript、画像ファイルなど）をホストし、静的なサイトを提供できる。
[料金](https://firebase.google.com/pricing/)は保存データ量・ダウンロードデータ量によって決まるが、無料枠もある。
HTTP/2 にも対応している。

## Cloud Functions for Firebase
Firebase の機能や HTTPS リクエストをトリガーとして、コードを実行できる。AWS でいうところの Lambda 。
利用できる言語は今のところ node.js のみ。（ただ、TypeScript で記述することもできる）
[料金](https://cloud.google.com/functions/pricing)は呼び出し回数・コンピューティング時間によって決まるが、無料枠もある。

## ML Kit for Firebase
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
モバイル向けの機械学習機能が利用できる。2018/06/27時点ではベータ版。
よく使われそうなテキストの認識や顔の検出などの API が揃っている。
[料金](https://firebase.google.com/pricing/)は API のコール数とカスタムモデルの保存・利用量によって決まるが、無料枠もある。

# Stability

## Firebase Crashlytics
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
クラッシュ時のエラーを、類似のスタックトレースのクラスタごとにグループ化し、ユーザーに与える影響の大きさで優先順位付けしたものを Firebase console から確認することができる。無料。
また JIRA と統合することでクラッシュの issue を自動で起票することが、アナリティクスと統合することでクラッシュに至るイベントの経路をトラッキングすることができる。

## Firebase Performance Monitoring
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
アプリの起動時間やネットワークリクエストなどを自動的に測定し、パフォーマンスや改善点を Firebase console から確認することができる。無料。

## Firebase Test Lab
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
Google のデータセンターにある端末上でアプリをテストできる。Android / iOS ともに利用可能だが、iOS は 2018/06/27 時点ではベータ版。
[料金](https://firebase.google.com/pricing/)はテスト回数によって決まるが、無料枠もある。
AWSやXamarinでも類似サービスがあるが、料金や使用できるテストフレームワークが異なるので、[こちら](https://www.linkedin.com/pulse/amazon-device-farm-vs-google-cloud-test-lab-xamarin-somenath-ghosh)を参考に選定するとよさそう。

## Firebase Crash Reporting
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
<del>
クラッシュ時のエラーを、類似のスタックトレースのクラスタごとにグループ化し、ユーザーに与える影響の大きさで優先順位付けしたものを Firebase console から確認することができる。Webは非対応。無料。
Android および iOS でいくつかの既知の問題があるらしく、2016/12/8の時点でベータ版となっている。</del>
こちらは非推奨となったので、Firebase Crashlytics を代わりに使用してください。

# Grow

## Firebase Cloud Messaging
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
Google の FCM 接続サーバーへ自前のアプリケーションサーバーから XMPP または HTTP プロトコルでデータを送信することで、クライアントにプッシュ通知を送ることができる。無料。
XMPP プロトコルであれば非同期でメッセージングできる。

## Firebase In-App Messaging
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
ユーザーがアプリを操作しているときに、登録や購入などを促すポップアップやトップバナーを表示することができる。ベータ版。（無料？）
規定のレイアウトをカスタマイズするだけなので実装は簡単だが、そのレイアウトに従う必要がある。

## Firebase Predictions
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
Google の機械学習機能に基づき、ユーザー行動を予測・分類してくれる。2018/06/27 時点ではベータ版。無料。
Firebase Remote Config / Firebase Notifications と統合することができ、離脱しそうなユーザーに対してのみパラメータを変更したり、通知を送るといったことができる。

## Firebase Remote Config
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
アプリのアップデートなしに、Firebase console からアプリ内のパラメータ（Key-Value 形式）を変更できる。Web は非対応。無料。
見た目を変えるパラメータに利用すれば A/B テストが実現できる。
変更の適用ルールを設定することができ、例えばユーザーの 0.05% だけパラメータを変更するといったことも可能。

## Firebase A/B Testing
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
指標に基づいた A/B テストを行い、その統計を取れる。2018/06/27 時点ではベータ版。無料。
Firebase Remote Config のラッパーのような立ち位置で、テストの目標を立てて、それに基づいたパラメータ変更やメッセージの変更を行い、結果の統計を取るという一連の流れをまとめることができる。

## Firebase Notifications
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
Firebase console からクライアントにプッシュ通知を送ることができる。無料。
Firebase Cloud Messaging と異なり、自前のアプリケーションサーバーは不要。
また、クライアントが所定のトピックに登録していれば、そのトピックにのみ通知を送ることができる。

## Firebase App Indexing
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
アプリを Webブラウザ の Google 検索上に表示することができる。無料。
対応する Web サイトが必要なのと、iOS の場合 Universal Links で起動するので、iOS9 以降でなければ使えない。

## Firebase Dynamic Links
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png"><img width="34" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/5a9ddbfa-f43c-98ba-d65c-8668fdaa2b0b.png">
例えばメールに記載された URL など、リンクをからアプリを開いた場合に、プラットフォームを意識せずにアプリの対応するコンテンツにリンクさせることができる。無料。
アプリがインストールされていない場合は、もちろんストアページに飛ばすこともできる。

## Firebase Invites
<img width="26" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/0c392d25-00a6-45a4-c2f5-d8140aa1ecfb.png"><img width="28" height="26" src="https://qiita-image-store.s3.amazonaws.com/0/37435/3eee5921-a8b8-8cc9-be1b-87f810a4beaa.png">
アプリの共有ボタンを押したら端末の連絡先にあるユーザーに対して招待状を送信することができる。
Firebase Invites は送信、Firebase Dynamic Links は受信という関係性となる。
[おすすめの方法](https://firebase.google.com/docs/invites/best-practices)があるので、とりあえずはそれに準拠しておくとよさそう。

# まとめ
モバイルアプリで必要な機能が一通り揃っているので、積極的に使っていきたいですね。
触ったことのない機能についても書いていますので、間違っている点ありましたらご指摘お願いします :bow: