まだ間に合う!着々と進化しているFirebaseをまとめてみるよ #Firebase #FJUG

今回の記事は,Firebaseをこれから触る人,以前触ってしばらく離れていた人,全体像を復習したい人向けになります.
既にある程度知っているよ~というかたは,併せて過去記事もご覧ください.

適宜加筆していきます.

tl;dr

そのうちAWSも超えそうなパワーみ感じる
Firestore,Predictions, Cloud Functionsあたり一押し
いろんな使い方できるね

おしながき

そもそもFirebaseとは何か
利用実績
追加されてきた良機能
全機能まとめ
具体的な使い方(システム構成)
公式による使い方一覧
サンプル

そもそもFirebaseとは何か

AWSやGCPのようなもの,そしてもう少し的を絞ったもの
と考えると,なんとなくのイメージは掴めるかもしれません.

むしろAWS超えるくらいのポテンシャルは秘めている1と考えています.
(GCPでサービスを選ぶためのフローチャートでも,Firebaseにゴールしやすくなっています2
GCP decision tree
(長いので以下略)
 
もう少し具体的には,
手軽だが大規模にもできる3システム基盤 + 便利なツール群(mobile向けが多いがPC向けとしても十二分に使える)」
と言った感じです.
 
Web, Android, iOSはもちろん,UnityやC++(Cocos2d-x含む)もSDKが用意されています.
platform

管理用のSDKも,Node.js, Java, Python, Goがあります.
最近はIoTあたりでも,手軽に使えると注目を浴びているようですね!

一般的にはmBaaS(mobile Backend as a service)と呼ばれる類です.
良くも悪くも,mBaaS界はFirebase一強状態かなぁと思います.
FirebaseはGoogleに買収4されており,Googleの異次元な技術力とFirebaseの使いやすさが融合して(進行形)いい感じです.

利用実績

論より証拠,実際どんな企業に使われているかをお見せしましょう.

などなど…

まぁFirebase内にも多くのサービスがあるので,フルに使っているところもあれば,一つだけというところもあります.

ちなみに,日本でそこそこ知名度ありそうなもののみにしています.
それから,Firebase公式サイトに掲載されていない企業は一応伏せ字にしておきます.
もし問題ある場合はご一報ください.

追加されてきた良機能

Firebaseは,話題としてはだいぶ前から挙がっていました.
自分が使い始めた時ですら,「2週遅れで始める~」という記事を見かけた覚えがあります.

しかし,Firebaseは当時から明らかに進化しています!
そこで,一度触った/調べたことあるけどイマイチだったよなぁ,という人向けに,追加されてきた良い機能を独断と偏見でピックアップしてみます.

Cloud Firestore

これは本当にすごい.
手軽なのに実戦投入も余裕,しかも安めなデータベース(ただし17/12/05現在β).

手軽さを具体的に言うと,クライアントから直接書き込める,リアルタイム,オフライン対応
実戦のほうは,障害・ダウンタイムまずない,スケーラビリティ青天井,マルチリージョン,クエリもそれなりに
ただしNoSQLなのは注意です.

関連記事:
Firebase RTDB + GCP datastore = Firestoreについて第一印象
DatastoreとFirestoreとApp Engineの関連
Cloud Firestoreは進化したFirebase Realtime Database
Cloud Firestore のご紹介: アプリ用の新しいドキュメント データベース(公式ブログ)
Realtime Database デベロッパーのための Cloud Firestore(公式ブログ)

Predictions

今はやりの機械学習,これがちょー簡単に活用できちゃう(ただし17/12/05現在β).

Analytics内の好きなパラメータを選ぶだけで,一週間後の予測ができ,更にそれに対して通知を送るなどのアクションもできます.
(デフォルトで「課金してくれるかどうか」「離脱しちゃうかどうか」は設定済)
しかも無料

TensorFlowなど,機械学習で最前線を走るGoogleならではのサービスでしょう.

関連記事:
Firebase Dev Summit 2017 で発表された新機能ざっくり,これまでとの違いも
Announcing Firebase Predictions Beta(公式ブログ)

Cloud Functions

サーバ管理なしにサーバ側の処理を行えます(ただし17/12/05現在β).

AWSで言うLambda5,いわゆるFaaSですね.
Firebase内やGCP内の他サービスとも連携しやすいです.
途中でHostingとの連携にも対応し,みんな大好きServer Side Rendering6ができるようになりました.
 
その他,バッチ処理やbotでない確認の実装方法なども公式ブログには掲載されていました.
上述2件と比べると派手ではないけどとても重要ですね.
 
関連記事:
Vue.js サーバサイドレンダリング on Cloud Functions for Firebase
Cloud Functions を使って Firebase Hosting から動的コンテンツを提供する(公式ブログ)
Cloud Functions for Firebase でジョブをスケジューリング(cron)する(公式ブログ)
reCAPTCHA と Firebase でウェブ コンテンツを不正使用から守る(公式ブログ)

全機能まとめ

たくさんあるので正直わからないですよね.
短く表にまとめてみましたのでご参考にどうぞ.
(個人的にはもうちょっとわかりやすく分類できる気がするのですが,ひとまず表のほうは公式準拠としておきます7
 

サービス名 一言で ポイント 価格 備考
Develop
Authentication twitter認証とか簡単に メルアド会員,仮会員や電話認証も
カスタム認証もいける
無料 他サービスでの権限付与連携
Realtime Database 便利なデータベース クライアントと直接
オフライン対応
リアルタイム
DL $1/GB など クエリ貧弱
レイテンシはFirestoreより強い
Cloud Firestore 便利で強力なデータベース 詳細上記参照 $0.18/10万write など β
Cloud Storage メディア置き場 ネット状況に応じDL一時停止・再開 DL $0.12/GB など
Hosting ウェブサイトの配信 https対応
バージョン管理
DL $0.15/GB など
Cloud Functions サーバ側処理 詳細上記参照 β
Stability
Crashlytics エラー分析 エラーの優先順位
グループ化
脱獄機マーク
「解決済み」ボタン
無料 β
Crash Reporting エラー分析 Crashlyticsに移行する運命
Performance Monitoring 時間計測で性能監視 バックグラウンドでのアクティビティ,ネットワークリクエストなども 無料 β
Test Lab for Android クラウドでアプリテスト 既存環境と容易に統合
テストコードなしでも
仮想 \$1/機器/hr
実機 $5/機器/hr
Analytics
Analytics ユーザ統計 カスタムのユーザ情報,イベント
多数の広告サービスと連携
BigQueryとも
無料 変更できない問題は未だに
Grow
Predictions ユーザグループの行動予測 詳細上記参照 無料 β
Cloud Messaging
(Notifications)
通知 ブラウザにも
優先度
有効期限
無料
Remote Config ユーザのアプリ更新なしで変更 A/Bテストは目標設定なども可能 無料
Dynamic Links アプリ内への直リンク 無料
AdMob 広告収入 コンテンツそっくり広告もある N/A
その他
Invites 招待機能 無料 Dynamic Links上のサービス
App Indexing アプリをグーグル検索に コンテンツも反映 無料
AdWords 広告入稿 ものにより

具体的な使い方(システム構成)

後述しますが,公式にも使い方の記事は多くあります.そのため別の粒度でざっくり書いてみます.
ちなみに,ツール群については好みでいくらでも組み合わせが考えられると思うので,システム基盤のほうのみ書きます.

大抵のウェブアプリ

これを基本構成とします.以降の場合に当てはまる場合は適宜追加してください.
Cloud Firestore + Authentication + Hosting + Cloud Storage

大抵のネイティブアプリ

これを基本構成とします.以降の場合に当てはまる場合は適宜追加してください.
Cloud Firestore + Authentication + Cloud Storage

サーバ側処理が必要な場合(バッチ処理,隠蔽すべき処理,外部API利用等)

Cloud Functionsを追加します.
上記の他にクライアント側負荷軽減,SSR等にも使えます.
詳細上記参照
公式サンプルも種類が豊富で参考になります.

検索を含む場合

検索は苦手なことの一つです.
Algoliaというサービスと連携するのがいいでしょう.
公式サンプル(Realtime DatabaseFirestore)もあります.

ElasticSearchという選択肢もありますが,ちょっと手間ですね.

複雑な統計処理など含む場合

Firebaseのデータベースは,いずれも複雑なクエリが苦手です.
そこで,Cloud Functions経由でデータをBigQueryに突っ込んでしまうのはありかもしれません(公式サンプル).

ご存知のかたも多いとは思いますが,安価で分析の得意なサービスで,Firebase同様インフラ管理は不要です.
Google同士ですし,Node.js用ライブラリも用意されているので連携も非常にしやすいです.

ただしクエリによっては10秒単位で時間がかかる8場合もあります.
それから同時に50クエリ8しか実行できません(ただクエリだけですし,ユーザ数換算ではそこそこ対応できるかとは思います).
上記が解決できるのであれば,だいぶ安価で便利だと思います.
 
難しい場合は,Cloud Spanner with 金で殴るか,無難にCloud SQLに繋ぐか,おとなしくクライアント側でごりごりデータ加工しましょう.

リアルタイムストラテジーなど,レイテンシを抑えたいゲームを作る場合

Realtime Databaseがいいでしょう.
Firestoreは同期に数秒単位でかかる場合があります.

FPSなど作ろうとすると悲しみに包まれますのでやめておきましょう.
さすがにそこまでレイテンシ低くはないですし,無料枠がすぐ蒸発します(後述).

お絵かきチャットなど,高頻度で同期させたい場合

Realtime Databaseのほうが安くつくかもしれません.
Firestoreは読み書きの度に課金されますが,Realtime DatabaseはDLした総データサイズでの課金です.

高頻度の同期が継続する場合は,課金額に注意してください.
もしやるなら,(例えばゲームなら)キー入力のみ同期して,後は各々の端末上でキー入力の影響をシミュレート,などの工夫をしたほうが良いと思います.

IoTやる場合

IoTは何を作るかで様々だとは思いますが,Realtime DatabaseとIFTTTを使いこなしているかたが多そうですね(もう少し調べたらまとめ直すかも).
Googleが最近出したキットでも,裏側ではRealtime Databaseが使われています.
https://papersignals.withgoogle.com/

外部と統合させたシステムの場合

Authenticationは導入しやすく恩恵も受けやすいかと思います.
データベースなどはケースバイケースでしょうか.

Firebaseは構成をシンプルにできるのも強みなので.Firebase内で完結できそうなら思い切って完結させてしまうのが一番,という気持ちではあります.

公式による使い方一覧

前項の冒頭に置こうとしていたのですが,案外量が多かったので別にしました.
 
公式ユースケース集

  • 効果的なオンボーディング フロー(注:ログイン画面)を作成
  • 「おかえりなさい」画面をカスタマイズ
  • 新機能を段階的に公開
  • 端末間のユーザー ジャーニー(注:ユーザ行動)をフォロー
  • アプリにチャット機能を追加
  • Optimize ads based on user behavior(注:ユーザ属性に合わせた広告最適化)
  • ユーザーが写真の共有やサイズ変更をできるようにする
  • サーバーを使用せずに、サードパーティの支払いを処理
  • Reward your referrals(注:紹介への謝礼)

カスタム オンボーディング プロセスを作成する
Firebase による支払い処理
再開画面のカスタマイズ
Follow users across devices(How to do cross-platform analytics with Google BigQuery)

また,サービス毎にもガイド内に掲載されている場合があります.

ユースケース;
Cloud Functions で可能な処理
Firebase Dynamic Links のユースケース
 モバイルウェブ ユーザーをアプリユーザーに転換する
 ユーザー間でコンテンツを共有する
 紹介報酬を付与する
Firebase Predictions を使用して収益化戦略をテストする
Firebase Predictions を使用してプロモーション戦略をテストする
Firebase Predictions を使用してユーザー定着戦略をテストする
導入事例(モバイルゲーム)

ケーススタディ;
事例紹介: ウェブ対応 Firebase Cloud Messaging(JavaScript)
事例紹介: Cloud Functions for Firebase
事例紹介: Firebase Authentication
事例紹介(App Indexing)
事例紹介(Invites)

サンプル

公式サンプル一覧
Cloud Functions 公式サンプル

まとめ

そんな感じで,
そのうちAWSも超えそうなパワーみ感じる
Firestore,Predictions, Cloud Functionsあたり一押し
いろんな使い方できるね
というおはなしでした.

コミュニティ

できたてほやほや.
ロゴかっこいいよ!よろしくね.
Firebase Japan User Group
Firebase Japan User Group

Firebase関連過去記事

 
結局Firebaseのdbでは何に気をつけるべきか?少しマニアックな内容も含め,わかりやすく説明する(realtime database)(Firestoreでも大半は参考になると思います)
大規模でも開発保守を極めて容易にする;データベースすらコンポーネント化
Firebase RTDB + GCP datastore = Firestoreについて第一印象
Firebase Dev Summit 2017 で発表された新機能ざっくり,これまでとの違いも
Firestoreに負荷試験(Loadroid)してみた+補足

 

 

 

└(・∀・)┘ヤリィ!

 

 


  1. これは使いやすさという意味ももちろんありますが,本質的には裏側で支えているGoogleの研究開発によるところが大きいです.Amazonは研究開発がGoogleほど活発ではないので,追従するにしてもかなり後手後手になると思います. 

  2. 元記事をちゃんと読むと,実は元記事に対してフローチャートがミスリードしている感は否めません.ただし,個人的にはフローチャートくらいの意味合いが妥当と思っています.なぜか?裏側で特殊な処理をするにしても,GUIはFirebaseならば容易(インフラ等管理不要)だからです.GUIに関与しない開発は少数でしょう. 

  3. まっとうなエンジニアなら,この表現に違和感を覚えるのは当然かと思います.このような独特な開発手法を取らない限りは,規模が大きくなるにつれ,やはりそれなりに複雑になる(手軽さが減少する)というのは事実です.とは言え,インフラやAPIの管理のような,本質的ではない部分の労力を大きく省けるのもまた事実です. 

  4. ちなみに買収時はまだRealtime Database, Authentication, Hostingしかありませんでした.現在ではいずれもDevelopに分類されているものたちですね. 

  5. Lambdaと比べると,Node.jsしか使えないものの,依存パッケージはnpmのpackage.jsonを書くだけで済みます. 

  6. 普段はブラウザ上で動くjavascriptを,サーバ側で演算してしまおう,という技術です.ちなみに個人的には,ちょっとなぁと思います.複雑になりやすいし,サーバ側リソースも消費するためです. 

  7. 自分的にはこんな感じに分類しています;開発系(Realtime Database, Cloud Firestore, Hosting, Authentication, Cloud Storage, Cloud Functions),便利機能系(Cloud Messaging, Dynamic Links, Invites),監視系(Analytics, Crashlytics, Performance Monitoring, Predictions),テスト系(Test Lab for Android, Remote Config),広告系(App Indexing, AdWords, AdMob) 

  8. そもそもはログなどの莫大なデータでも割と素早く分析してくれるというサービスなので,エンドユーザ向けのノリにはチューニングされていないためです.