この記事はFirebaseアドベントカレンダーの5日目の記事です。
どうも!ハムカツおじさんという名前でtwitterやってます(@hmktsu)🤘
自分でだったり弊社でだったりなどFirebaseを使ってサービスを作っています。
ちなみに先日Firebase Meetup #15 Cloud Functions Dayにて下記のスライドを発表させていただいたので、興味ある人はご覧になってください!
Firebaseオンリー + React Nativeでアプリを作ると果たして簡単になるのか?
はじめに
色んなツールを作るのにFirebaseを使うととても便利だなぁという感想を持っています。
料金に関しては体感としてですが常時サーバを立ち上げてるのとは違いお安くなります。
それでももっと安く済ませたいとかそういったことはあるのでしょうか。
本番環境でそれなりにお金がかかるのはしょうがないんだけども、テスト環境ではなるべくお金かけたくないしなぁ〜ということもあるのではないでしょうか。
ということでここらへんを気をつければなるべく料金を抑えれるんじゃないかなということを今回は紹介させていただきます。
対象とするFirebaseのサービス
- Firestore
- Functions
- Hosting
ざっくり気をつけたポイント
Firestore
- リージョンをどうするか
- ドキュメントの読み出し/書き込み/削除
- ページングの方法
- セキュリティールールについて
Functions
- メモリ(CPU)の割り当て
- 料金プラン
Hosting
- どういったファイルを置いているのか
こういう風に工夫するとよいかも
Firestore
- USじゃないといけない理由がないならば他のリージョンを使う
- USはマルチリージョンなのでちょっと他よりもお高め(地域別料金)
- このデータが入っているか?という確認をしたいときに、コレクションからwhereするのではなく、複数のドキュメントを配列に格納したドキュメントを用意して、その中に入ってるかどうか比較する
- 読み出しをする際にオフセットを使わないでカーソルを使う
- オフセットを使うとそれ以前のデータも読み取り回数に入ってしまう(大きな結果セットを管理する)
- ルールの評価はリクエストごとに1回のみ課金されるので、複数ドキュメントを呼び出すときはえいやと思い切って呼び出してみる(Cloud Firestore セキュリティ ルール)
Functions
- メモリ量でGB秒やCPU秒の料金が変わるので、さっと終わる処理ならばメモリを小さくする(コンピューティング時間)
- Blazeプランを使うと料金プランページに表示されているSparkプラン以上に無料で使える範囲が広くなる
Hosting
- Storageと比べると転送量や保存量が割高なので、Storageに画像とかをちゃんとおく
まとめ
正直なところFirebaseはAWSなどで組むのと違ってあまりお金はかかりません。
それにスケーラブルなので落ちないという利点もあります。
ただその代わりこの記事みたいに落ちないからこそ、使い方などを間違えてしまうと異常な料金になってしまうこともあります。
地味によくある話としてはStorageを使わずにHostingのみでWebサイトを作り、バズってしまったがために中々な請求金額がきてしまうとか。
ちなみに最終手段ですが、1日の使用料を実は制限することができます。
また1ヶ月の予算を設定して使用料に応じてアラートを出すこともできます。
1日あたりの費用制限を設定する
1か月の予算を設定する
これらを使うこともある意味ありなんじゃないかなと思います。