Firebase ってなに？【前提知識】

# firebaseとは？
- web・モバイルアプリのバックエンド側での主たる機能を提供してくれるクラウドサービス
- 例えば、SNS利用のアカウント作成やチャット機能や認証機能(バックエンド側)を提供してくれる
- Firebase はアプリ開発で便利な15以上のサービス・機能の総称
- 開発者は、提供されているサービスの中から必要なバックエンド機能を提供するサービスを使用する

# 主な機能
## Firebase Realtime Database
Firebase Realtime Databaseとは、クラウドホスト型のNoSQLデータベースであり、
JSON形式でまるまるデータを保存してリアルタイムに同期できる。
また、オフラインでも動作するため、ネットワーク接続がなくてもデータを更新する。
Realtime Databaseの料金は、保存、ダウンロードする容量ごとであり、通信の回数や書き込み回数は料金に影響しない。なので、更新頻度が高く小さなデータを保存することに適正がある。

### リアルタイムに同期？
データが変更されるたびに接続されているあらゆるデバイスがその更新を数ミリ秒以内に受信される。
（データベースの更新がクライアント側へ通知されるという認識）

### オフラインでも動作？
DBへの接続がオフラインになってもアプリ自体は動作。
各デバイスの接続が復帰した際にオフラインの間に発生したデータの変更を含めてRealtime Database側に更新を同期、競合をマージする仕組みとなっている。
電波状況が不安定なモバイル端末や、回線が不安定な状況などでの使用を想定される場合と相性がよい。

https://firebase.google.com/docs/database?hl=ja

## Cloud Firestore
Cloud Firestoreとは、モバイルやWebアプリのデータの保存、同期、照会が
簡単にできるNoSQLデータベースとして使えるツール。

### Firebase Realtime Databaseとの違いは？
Firebase Realtime Databaseと機能としては同じものに見えるが、違いは下記に公式の記載がある。
https://firebase.google.com/docs/database/rtdb-vs-firestore?hl=ja

こちらのサイト様によりわかりやすく違いがまとめられている。
これを読む限りでは基本的にCloud Firestoreの方を使うべきように思える。
https://techblog.kayac.com/rtdb-vs-firestore

## Firebase Hosting
ウェブサイトやウェブアプリケーションを簡単にデプロイできるツール。
開発者はWebサーバーの設定や管理に時間を費やすことなく、素早くアプリを公開できる。
また、Firebaseの他の機能と統合されており、データベースや認証機能なども連携可能。
ウェブアプリやブログ、SPAやランディングページ等の公開で活用される。

https://firebase.google.com/docs/hosting?hl=ja

## Firebase Authentication
ウェブアプリに簡単に認証機能を追加することが可能になるツール。
独自に認証機能を追加する必要がなくなる。
下記パターンの認証機能が追加することができる。
1. Google、Apple、Twitter、Facebook、GitHubのアカウントを利用した認証
2. メールアドレスとパスワードでの認証
3. 電話認証
4. カスタム認証システムの統合（アプリ側で利用していた認証システムを、Firebase Authentication SDKに接続して利用する）
5. 一時的な匿名アカウント認証（その後一時アカウント情報を利用して、本アカウントとして登録しなおしてもらうことも可能）

https://firebase.google.com/docs/auth?hl=ja

## Firebase Analystics
アプリのユーザー行動をデータ化し、分析するための機能を備えたツール。
アプリ内でのユーザーの行動をトラッキングし、属性別のユーザーの行動を分析できる。

## Firebase Cloud Messaging
iOS、Android、Webアプリで無料でメッセージや通知の送受信ができる機能
たとえば、プッシュ通知のような機能を実現するのに役立つサービスの模様。
高速で信頼性が高く、大量のユーザーに対してもスケーラブルな通知を実現が可能。
![](https://storage.googleapis.com/zenn-user-upload/3f5e43f7efbf-20240424.png)

https://firebase.google.com/docs/cloud-messaging?hl=ja

## Cloud Functions for Firebase
AWSをご存知の方向けに一言でいえば、AWS lambda。
サーバ不要でバックエンドを開発できるサービスのこと。
HTTPSリクエストをトリガーに実行するプログラムをサーバレスで実行させられるサービス。
トリガーされたイベントに応じてバックエンド側のコードを実行する。

https://firebase.google.com/docs/functions?hl=ja

### サーバレス？
ここでいうサーバレスとは、サーバーの構築や保守をすることなく、
サーバー上でプログラムを実行できる仕組みのことであり、
決してサーバなしで動かすということではない。

## Cloud Storage for Firebase
ユーザーが作成したコンテンツ(写真や動画など)を保存・提供できる機能
ストレージは高速かつ安全で、多くのユーザーが同時にアクセスしても問題なく利用できる
クライアントからファイルのアップロード・ダウンロードする際に活用される機能のイメージ。
実際の保存先は Google Cloud Storage となっており、 Firebase と Google Cloud の両方からアクセスが可能。オートスケールやリジューム機能にも対応。

https://firebase.google.com/docs/storage?hl=ja

# 料金プラン
- Firebase には大きく無料プランの『Spark』と有料プランの『Blaze』が存在する
- そこから更に各機能ごとに細かな料金設定が記載されている
- Blaze プランは利用した分だけ費用がかかる従量課金制という仕組みになっている
https://firebase.google.com/pricing?hl=ja

# 終わりに
ここまでいろいろ調べた事で、Firebaseがどういうものなのかは理解できたが、
実際に利用する際のイメージがつかめていないため
次は実践編として実際に活用してアプリを作ってみたい。

# 参考
https://n-v-l.co/blog/what-is-firebase

https://cloud-ace.jp/column/detail175/

## Firebase Realtime Database
https://n-v-l.co/blog/what-is-firebase#index_k5YS9c74
https://qiita.com/seiya1121/items/1436fde30752843daa47
https://codezine.jp/article/detail/18308

## Cloud Firestore
https://n-v-l.co/blog/what-is-firebase#index_5vW8rdzj
## Firebase Hosting
https://n-v-l.co/blog/what-is-firebase#index_0ENC9zgM

## Firebase Authentication
https://codezine.jp/article/detail/18203
https://giginc.co.jp/blog/giglab/Firebase_Authentication

## Firebase Cloud Messaging
https://n-v-l.co/blog/what-is-firebase#index_5aCXvyA3

https://gihyo.jp/dev/serial/01/firebase/0009

## Cloud Functions for Firebase
https://n-v-l.co/blog/what-is-firebase#index_YojIe2aL
https://zenn.dev/tentel/books/a96e4a64d3a672911f25/viewer/dfb375

## Cloud Storage for Firebase
https://www.topgate.co.jp/blog/google-service/26796#cloud_storage_for_firebase_%e3%81%a8%e3%81%af%e4%bd%95%e3%81%8b%ef%bc%9f