search
LoginSignup
45
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Firebase Advent Calendar 2019 Day 5

posted at

updated at

Firebaseをなるべく安い料金で頑張りたい人へ

この記事は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か月の予算を設定する

これらを使うこともある意味ありなんじゃないかなと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
45
Help us understand the problem. What are the problem?