【GCP】Firebaseについてまとめる

#公式ドキュメント
https://firebase.google.com/docs?hl=ja

#概要
Firebaseは、Goolgeが提供する mobile Backend as a Service（mBaaS）です
クラウドサービスの形態では BaaS に位置付けされます。
Firebaseを利用すれば、開発者はアプリケーションの開発に専念でき、バックエンドで動くサービスを作成する必要も管理する必要もありません。
Firebase は元々 Google とは独立したサービスでしたが、2014年に Google に買収され、現在 GCP の様々なサービスと連携することが可能です。

MBaaSとはモバイルアプリのバックエンド環境を提供するサービスの総称で、その中でも最も有名なのがFirebaseです。効率よくアプリを開発できるようになり、スピーディーにアプリをリリースできます。

#Firebaseの特徴
Firebaseの最大の特徴はリアルタイム同期
Firebaseの最大の特徴は、リアルタイム同期型のデータベースを使用できる点です。

一般的なサーバー上のデータベースでは、アプリケーションからクラウド上にあるデータベースにアクセスし、直接データを書き込んだり取得したりします。

同期のイメージ
しかしFirebaseの場合は、アプリケーションがデータベースのローカルコピーを保持し、ローカルコピーへの書き込みを行います。ローカルコピーに対する変更は、リアルタイムにサーバー上のデータベースと同期されて、自動的に個々のアプリケーションのローカルコピーがデータベースに統合されます。

リアルタイム同期のイメージ
このようなリアルタイム同期のメリットは、応答の速さやオフライン時の処理に現れます。ローカルコピーはオフラインのものなので、インターネットの接続が不安定な場合でも、アプリケーションの応答の速さに影響が出ません。

また、オフラインでもオンライン時のデータ（ローカルコピー）をそのまま閲覧でき、オフラインで処理した内容もサーバーと接続ができた時点で同期される仕組みなので、ユーザーはインターネット環境に左右されずアプリケーションを使用できるといえます。

#その他の機能
Firebaseの主な機能について、概要とできること、そしてメリットについてなど、各機能をわかりやすく紹介します。

###Firebase Realtime Database
先述したFirebase Realtime Databaseは、クラウドホスト型NoSQLデータベースです。データはJSON形式で保存され、すべてのクライアントと、ほとんどタイムラグなく同期されます。
一般的なPull型のデータベースとは異なり、データの変更が即座に各クライアントへと通知されるPush型で、各クライアントは発生するイベントを適切に処理することにより、リアルタイムな体験をユーザーに提供できます。 

###Google Analytics for Firebase
Google Analytics for Firebaseは、アプリの使用状況とユーザーエンゲージメントについて分析できる機能です。単純なユーザーの行動だけでなく、属性別のユーザーの行動や広告の効果、課金の状況など、最大で500種類の個別のイベントを分析し、レポートを生成することも可能です。

###Firebase Hosting
Firebase Hostingは、静的なWebページやWebアプリを簡単な操作でデプロイできる機能です。
HTML、CSS、JavaScriptを使用する程度のWebサイトであれば、Firebase Hostingによって簡単に公開できるため、レンタルサーバーを契約したり、サーバーを立てたりする必要はありません。iOSやAndroidアプリにも簡単に流用でき、独自ドメインも設定可能です。

###Firebase Authentication
Firebase AuthenticationはGoogle、Twitter、FacebookなどのSNSのアカウントを使った認証、いわゆるソーシャルログインや、電話番号認証、メールとパスワードに基づく認証など、アプリで必要な認証を実装するための機能です。
ユーザー認証は、アプリ開発においてニーズのある機能ですが、様々な認証方法に対応したアプリの開発は非常に手間がかかります。しかしFirebase Authenticationでは認証機能を実装するためのSDKが提供されており、これを利用することでユーザー認証機能の開発のコストを低減できます。

###Firebase Cloud Messaging
Firebase Cloud Messagingは無料でメッセージ（プッシュ通知）を送受信できる機能です。新しいメッセージを受信した時に、クライアントのアプリに通知することができます。
iOSやAndroidなど異なるデバイス間へのメッセージの送受信も可能です。また、セグメントを使ったメッセージの送信先の設定もでき、送信したメッセージはダッシュボード上でモニタリングできます。

###Cloud Storage
ユーザーがアップロードした画像や動画などのファイルの保管や共有を行い、アプリに組み込むことができる機能です。ユーザー投稿型のSNSのような機能を作成する際には、重宝するでしょう。
データはGoogle Cloud Storageパケットに格納されるため、サーバーからアクセス可能です。

###Firebase Console
Firebase ConsoleはFirebaseの様々な機能を利用するために使うものです。Firebase Consoleを使うためにはGoogleアカウントが必要です。Console内のNotifications Composerを使用することで、iOSやAndroid端末に通知メッセージを送信することもできます。

###そのほかの機能
Googleの機械学習機能をアプリとして提供できる「ML Kit」や、開発途中のアプリケーションをテスターに配布できる「App Distribution」、製品やマーケティングのテストを簡単に実行、分析できる「A/B Testing」などの機能があります。

#使い方
Firebaseのコンソールにログイン
プロジェクトを作成
CLIツールをローカルにインストール
https://firebase.google.com/docs/cli?hl=ja

コンソール上から操作する

#料金
Blaze プランのみ利用可能

「Blaze プラン」は、Flameプランの機能では足りないレベルの大規模なアプリを開発する際に適したプランです。

Cloud Firestoreの容量が1GiB当り0.18ドル、Cloud Functionsが100万回利用ごとに0.4ドルになるなど、各機能の利用状況に応じて課金されます。またプロジェクトごとに複数のデータベースを作成したり「Cloud Vision API（画像分析機能）」機能が利用可能になったりと、機能も一気に拡張されます。

以下に無料で利用可能な機能を記載します。

A/B テスト
Analytics
App Distribution
App Indexing
Cloud Messaging (FCM)
Crashlytics
Dynamic Links
アプリ内メッセージング
パフォーマンス監視
Predictions
Remote Config

https://firebase.google.com/pricing?hl=ja

#ユースケース
GCPの機能と連携した場合などを含めて以下にユースケースの一例を記載します。

###アプリの機能拡張やスケール自動調整
#####Cloud Functions
簡単なバックエンドコードを入力するだけで、
Firebaseサーバーを通してさまざまな機能をアプリに実装
たとえばアカウント登録してくれたユーザーにサンクスメールを送ったり、ストレージサーバー上にユーザーがアップロードした画像を加工したりといったことが可能になります。

#####Cloud Firestore
Firebaseのクラウドストレージ上にデータを格納し、複数の端末と同時に同期が可能
データに変更があった場合はすぐ端末に内容が反映され、スケールもクラウド側で自動で行ってくれるので処理落ちなどの心配も減少します。

###アプリのテストやバグ修正
#####Test Lab
Firebase上にホストされているパソコン、スマホ、タブレットなどの
各端末で開発中のアプリを動作させる
全般的な機能動作や特定状況下での稼動状況などをテストし、レポートで確認可能です。ですからわざわざ自社で複数の端末を用意し、ちまちまアプリ動作をテストする必要がありません。

#####Crashlytics
細かいバグの確認ができる
Crashlyticsではたとえばアプリがクラッシュした場合、根本的な原因を自動で特定して開発者に教えてくれます。また対応すべきクラッシュの優先順位も分かるので、効率よくバグフィックスを行うことができます。

###データ分析・マーケティング施策の実行
#####Firebase Cloud Messaging
アプリの利用ユーザーに簡単にメッセージを送信できる
Firebase Cloud Messagingを使うと端末ごとや端末グループごとなど、セグメントに応じてメッセージを分けて発信できます。効果測定も可能で、メッセージがアプリ集客などにどれだけ効果があったのかなどを計測しながら改善が可能です。

#####Google Analytics fore Firebase
ユーザーのアプリ内での状況が確認できる
ユーザーがアプリ内でどういった行動をとっているのか、平均利用時間、課金額などを細かく確認することができます。分析は、「Firebase SDK」をアプリに組み込むだけですぐ開始できます。

ここでご紹介した以外にも実にさまざまな機能がFirebaseでは公開されており、状況に応じて各機能を活用すれば効率的にアプリ開発や運用、分析などが可能になります。

#参考URL
Firebase の基本操作を理解しよう！【はじめてみよう Firebase】
https://www.topgate.co.jp/firebase02-how-to-use-firebase

Googleが提供するFirebaseとは何か？機能や料金、導入時の注意点などをわかりやすく解説！
https://onl.tw/J6eS4Qd

【入門】Firebaseとは？初心者向けにわかりやすく解説
https://engineer-life.dev/firebase/

Firebaseとは？Google社の強みを活かしたメリットや機能をご紹介
https://udemy.benesse.co.jp/development/system/what-is-firabase.html

Firebaseの始め方
https://qiita.com/kohashi/items/43ea22f61ade45972881


![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/13bad2e2-08d4-a456-91ef-8c63c7de591a.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/d4a02b86-0fb9-05e3-fb8e-6ceb5068e7f6.png)

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/0b68581d-9c2a-997d-5a1d-4797ab7c07f4.png)
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/f806f3ed-7869-9c6d-cc4e-30ee6e7628c1.png)
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/51b7e41b-ae10-2ddb-be06-ea610f6a5c23.png)
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/65bbd2e0-72b0-2428-329c-3a47da5cb507.png)
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/313d49e3-5952-db70-98fd-12ef563cee0c.png)
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/b2aee3ff-8d78-7feb-c1e4-186ec817dacb.png)
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/5076df85-63d1-a1f4-3f4b-e9aa85737ebc.png)
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/ef6574e0-9f46-19cf-fa97-6de327683ac7.png)
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/a30bbe58-73f7-00d4-799e-339f7dbae80b.png)
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556084/7e3169b3-2e98-444e-2050-f543035a2837.png)