わかる！Firebase ～全てのサービスをおつまみ紹介～


## はじめに

![firebase.png](https://qiita-image-store.s3.amazonaws.com/0/28930/011b651a-b71c-f09b-4343-b1f93683682f.png)


Firebase がちょっとバズってるようなので、「Firebaseって何？どんなことができるの？」をざっとまとめました。


## TL; DR（3行で言うと？）

- Google「君らサービス開発する時、毎回似たようなもの用意したり作るでしょ？[それもうやっといたから](https://firebase.google.com/products/?hl=ja)。まとめてFirebaseって呼ぶわ。」
- Google「サーバを持ってない？必要ならマシン貸すよ。もしサーバを管理したくないならソースコードだけくれたらそれで勝手にホスティングしてオートスケールするよ」
- Google「お金？[個人の趣味範囲なら要らんよ](https://firebase.google.com/pricing/?hl=ja)」


## それぞれのサービスを紹介（アプリの開発とテスト編）

### [Realtime Database](https://firebase.google.com/products/database?hl=ja)

- NoSQL で JSON をやりとりできる
- DBサーバとクライアントがダイレクトに通信するイメージ
	- 中間にサーバを経由しない分高速
	- その分セキュリティが心配かもしれないが、しっかり権限を絞れる
- オフライン中の書き込みも、オンラインになり次第自動的に同期する
- マルチプラットフォーム対応
	- iOS, Android, C++, Unity, Web
- [リアルタイムでクライアント全体の状態を同期させるのに向いている](https://firebase.google.com/docs/database/rtdb-vs-firestore?hl=ja)
- AWSでいうところの[AppSync](https://aws.amazon.com/jp/appsync/)

### [Crashlytics](https://firebase.google.com/products/crashlytics/?hl=ja)

- iOS, Android のクラッシュレポートを見られる
	- ライブラリの導入が必要
- [利用規約](https://firebase.google.com/terms/crashlytics/)がちょっとだけ厄介
	- サービスが提供されている国である米国の法律に従うため、13歳未満のユーザの情報を集めてはいけない
	- または、親の同意を得る必要がある ([COPPA](https://play.google.com/intl/ja/about/families/coppa-compliance/child-directed/index.html))
	- また、欧州のユーザがいる場合、[GDPR](https://ja.wikipedia.org/wiki/EU一般データ保護規則)にも対応させないといけない
	- 私は弁護士でもなく専門家でもないため、個別案件の判断はできませんのでご自身で判断下さい

### [Cloud Firestore](https://firebase.google.com/products/firestore/?hl=ja)

- NoSQL の DB
- オフライン中の書き込みも、オンラインになり次第自動的に同期する
- SQLサーバとクライアントがダイレクトに通信するイメージ
	- 中間にサーバを経由しない分高速
	- その分セキュリティが心配かもしれないが、[しっかり権限を絞れる](https://firebase.google.com/docs/firestore/security/get-started?hl=ja)
- マルチプラットフォーム対応
	- iOS, Android, Web (REST API, RPC API), Node.js, Java, Python, Go
- [モバイルアプリ開発用の新しいDBで、Realtime Databaseより高速なクエリとスケールを備える](https://firebase.google.com/docs/database/rtdb-vs-firestore?hl=ja#which_database_is_right_for_your_project)
- AWSでいうところの [DynamoDB](https://aws.amazon.com/jp/dynamodb/)？
	- ちょっと違うかもしれない

### [Authentication](https://firebase.google.com/products/auth/?hl=ja)

- ユーザ認証を全部やってくれるスゴイやつ
	- メールアドレス＆パスワード、Google, Twitter, Facebook, Github, OAuth 2.0, OpenID Connect, 電話等
	- メールの有効性確認（Verification、サービス登録したらよく「メールアドレスの確認」のメールが来るやつ）も対応
	- パスワードの再設定も対応
	- reCAPTCHA（みんなが嫌いな「自動車のタイルを選んでください」）も対応
	- もちろん[管理者はユーザの管理もできる](https://firebase.google.com/docs/auth/admin/?hl=ja)
- これが一番アプリ＆サービス開発を爆速化させるんじゃないかと思う
- マルチプラットフォーム対応
	- iOS, Android, Web (JS), C++, Unity
- （私感）これを使いこなせるようになったら、サービスの本質の部分に集中できるようになるかも？

### [Cloud Functions](https://firebase.google.com/products/functions/?hl=ja)

- サーバレス
	- サーバの面倒（オートスケール、セットアップ、セキュリティ…等々）の面倒から解放される
	- Node.jsのソースコードをアップロードして、必要なメモリを指定してやれば、その範囲内で動く
		- 色々やればPythonやGoも使えるらしい（未検証）
	- サーバリソースが消費された＝CPUとメモリが占有された秒数が主な課金対象
		- 呼び出し回数も課金対象
		- 常に動き続けるようなプログラムには不向き（コストが高い）
- AWS でいうところの [Lambda](https://aws.amazon.com/jp/lambda/)
- （私感）筆者がFirebase & GCPで一番好きなやつ
	- 筆者は [AI Deep Kabu](https://ai-deep-kabu.com) で使っている

### [Cloud Storage](https://firebase.google.com/products/storage/?hl=ja)

- なんでも保存してくれるやつ
	- 低コストのファイル置き場
	- 処理が途中で途切れても再開可能（レジューム機能）
- マルチプラットフォーム対応
	- iOS, Android, Web (JS), C++, Unity
	- クライアントから直接アップロードできる
	- 「アップロードのみでダウンロードはできない」のような権限も可能
- 高いスケーラビリティ
	- [Spotify や Google フォトと同じインフラストラクチャ](https://firebase.google.com/docs/storage/?hl=ja#key_capabilities)らしい
- AWS でいうところの [S3](https://aws.amazon.com/jp/s3/)
- GUI上はファイル構造があるように見えるが、実際はスラッシュ込みのファイル名が全てルートにぶら下がっている感じ
- （私感）S3よりちょっとGUIのレスポンスが遅い？
	- GCEのインスタンスから毎日 UL/DL するが、たまにUL/DLに失敗する
	- 筆者は [AI Deep Kabu](https://ai-deep-kabu.com) で使っている


### [Hosting](https://firebase.google.com/products/hosting?hl=ja)

- アップロードしたHTMLファイル等の静的ファイルで、Webページのホスティングが可能
- 無料のSSL証明書
- 高信頼性、低レイテンシ
- バージョン管理されており、ロールバックも可能
- （私感）サービスのLPをこれでホスティングしておけば、本体が落ちてもLPは生き続けるので良いと思う


### [Test Lab](https://firebase.google.com/products/test-lab/?hl=ja)

- Google「スマホいっぱい購入して動作テストするの大変でしょ？貸してあげるよ」
    - iOS & Android どっちもOK
- AWS でいうところの [Device Farm](https://aws.amazon.com/jp/device-farm/)

### [Performance Monitoring](https://firebase.google.com/products/performance/?hl=ja)

- スマホアプリのパフォーマンスチェック
	- アプリ起動時間
	- HTTPリクエスト等
- コードを1行も書かなくて良い


## それぞれのサービスを紹介（ユーザー層の拡大と利用促進編）

### [Google アナリティクス](https://firebase.google.com/products/analytics/?hl=ja)

- もはや説明不要のアクセス解析サービス
	- 数多のアクセス解析サービスがこれに喰われて去って行った…
	- 昔はアクセスカウンタと一緒になったアクセス解析ありましたよねー
- 後述するAdWordsと組み合わせて、広告効果の測定や、ページor画面毎の価値を算出したりもできる

### [Cloud Messaging](https://firebase.google.com/products/cloud-messaging/?hl=ja)

- アプリに通知を送るやつ
	- 昔は [Google Cloud Messaging](http://www.atmarkit.co.jp/ait/articles/1804/13/news051.html) というやつがいたが、来年廃止になる
	- 今から使うなら絶対これ
- PWA のプッシュ通知もできる

### [Predictions](https://firebase.google.com/products/predictions/?hl=ja)

- ユーザの行動を機械学習して、ユーザの分類をするやつ
	- 例えば全ユーザの日々のガチャを回すまでの一連の流れを学習させると、「毎月20日～24日頃にガチャを回す回数が激減するユーザは、25日（給料日）後に魔法石の10％割引チケットを与えると買いやすい」とかが導かれるかもしれない？

### [Dynamic Links](https://firebase.google.com/products/dynamic-links/?hl=ja)

- アプリがスマホにインストールされていなくても、良い感じにジャンプできるリンク
	- アプリが入っていなければ、ストアに飛ばしてインストールさせた後、ジャンプする
- 例えばGoogle Mapの「別のモバイル端末に送信」
	- PCで見ていた地点や経路のリンクをスマホに送って、そのまま閲覧を再開できる


### [Remote Config](https://firebase.google.com/products/remote-config/?hl=ja)

- クラウドでクライアントの環境変数をいじれる感じ
	- 例えばA/Bテストの実施、イベント開始にフラグを立てる等
- 値の変更に、アプリのデプロイは不要

### [Invites](https://firebase.google.com/docs/invites/?hl=ja)

- 友達紹介リンクを良い感じに作って送ってくれるまでをやってくれる
- Google Analytics と連携できる
	- ユーザーがいつ招待によってアプリを開いたりインストールしたりしたかがわかる

### [App Indexing](https://firebase.google.com/products/app-indexing/?hl=ja)

- Webとアプリで同じURLを使っていれば、ユーザがスマホで検索した時にヒットしたコンテンツを「アプリで開く」ことができる
	- 通常の検索結果より上位で表示されるため、ユーザがアプリへ戻ってきやすい
- [食べログ](https://firebase.google.com/docs/app-indexing/partners/case-study-tabelog.pdf?hl=ja)や[クックパッド](https://firebase.google.com/docs/app-indexing/partners/case-study-cookpad.pdf?hl=ja)で使われている

### [AdMob](https://firebase.google.com/docs/admob/?hl=ja)

- 広告で収益化
	- Google AdSense のアプリ版のようなもの
- 広告がアプリで表示されたりタップされたりすると Google からお金をもらえる

### [AdWords](https://firebase.google.com/docs/adwords/?hl=ja)

- Google にお金を払って広告を載せてもらう
- Google Analytics と連携できる

## Firebase と Google Cloud Platform

- Firebase で紹介した機能・サービスの他に、Google Cloud Platform (GCP) というものがある
- 主なものでは以下のようなものがある
	- [Compute Engine](https://cloud.google.com/compute/)　(GCE)
		- マシンの時間貸し
			- GPUもあるよ
		- AWS の [EC2](https://aws.amazon.com/jp/ec2/)
	- [Kubernetes Engine](https://cloud.google.com/kubernetes-engine/) (GKE)
		- Kubernetes でコンテナ化されたアプリケーションを管理
		- AWS の [ECS](https://aws.amazon.com/jp/ecs/)
	- [Pub/Sub](https://cloud.google.com/pubsub/)
		- リアルタイムのイベントストリーミング
		- AWS の [SQS](https://aws.amazon.com/jp/sqs/)
	- [Stackdriver](https://cloud.google.com/stackdriver/)
		- ログビューワ
		- AWS の [CloudWatch](https://aws.amazon.com/jp/cloudwatch/)
- [組み合わせて使うことができる](https://firebase.google.com/firebase-and-gcp/?hl=ja)

## おわりに

Firebase と一口に言っても、それが指すサービスは様々です。議論の際には個々のサービス名まで含むと互いに齟齬が生まれにくいと思います。

なお、本文中に何度か登場しましたが、筆者が運営している [AI Deep Kabu](https://ai-deep-kabu.com) では AWS の S3 と GCP の Cloud Engine, Pub/Sub, Cloud Functions, App Engine, Cloud Storage, Stackdriver を使って人工知能によるおすすめ株を毎日配信しています。それ関連の技術記事を書いていくので、よろしければフォローをお願いします。

最後になりましたが、ここまでご覧いただきありがとうございました。参考になりましたら画面左または最上部のいいね :+1: ボタンを押して頂けると励みになります。

もし誤りがあればコメントでご指摘頂くか、編集リクエストをお送り頂けると幸いです。

（2時間30分）

## 謝辞
2018/06/28
誤字の修正リクエストをいただいた @khsk さん、ありがとうございました :bow: 

> Kubernates → Kubernetes

2018/07/01
誤った表現を含む部分について編集のご提案をいただいた @taiga_takahari さん、ありがとうございました :bow:

> SQLサーバ → DBサーバ

2018/07/04
誤字の修正リクエストをいただいた @yancya さん、ありがとうございました :bow:

> Stackdrive → Stackdriver