Firebaseの料金を意識したデータベースの使用

記事
IT・テクノロジー

Firebaseの料金を意識したデータベースの使用

Firebaseを利用してWebサイトを運営している場合気になるのは利用料金です。 実際に運用した経験から言うと、相当アクセス数が増えない限り無料の範囲でサイトを運営する事はそれほど難しくありません。

Firebaseの料金システムの基本

Firebaseの利用料金を決める基本的な要因は
* 使用容量(幾つかの容量の規定があります)
* アクセス数(これも沢山のアクセス数の規定があります)

使用容量に関しては基本的に
* データベースの使用容量(1GiB)
* ホスティングで使用している容量(10GBまで無料)
* ストレージの使用容量(5GBまで無料)

で通常の規模のWebサービス、Webアプリであればこの制限以内で十分運用が可能かと思います。

アクセス数も料金に影響します!

アクセス数もFirebaseの利用料金に効いてきます。 気になるのが、データベースのアクセス数です。
無料の範囲がCloud Firestoreの場合
* 書き込みが、1日当たり20万回まで無料
* 読み込みが、1日当たり50万回まで無料
* 消去が、1日当たり20万回まで無料

となっています。この数字はとても大きく感じますが、これはデータベースの照会回数ではなく、Cloud Firestoreのドキュメントの読み込み回数なので注意が必要です。
例えば、一つのコレクションに100個のドキュメントがある場合、アクセスの度に全てのドキュメントを取得する場合1度のアクセスで100回の読み込みをすることになります。100人の人がアクセスすれば、1万回になります。
利用する、コレクションが複数ある場合はその分アクセス数も増えます。 読み込み回数が1日50万回というと、コレクション100個のドキュメントに5000回アクセスがあれば到達する事になります。
1日5000回のアクセスは多いですか?
1日5000件のあるサイトとして運営する場合は、それなりの収益がWebサイト関連で上がる可能性が高いので大きな問題にはならない場合が多いかと思います。
しかし、複数のコレクションを使っていると1回のアクセスで発生する読み込み回数も増えます。従って少しWebサイトのアクセスが増えてきた場合は意外に早く無料枠を超える事は結構あります。
注意するのが「onSnapshot」の機能
Firebaseのデータベース(Cloud Firestore)の機能で便利な機能が「onSnapshot」という機能です。
何が出来るかというと、データベースが更新されたのが通知されると自動で現在持っているデータを更新してくれるという機能です。
例えば、ブログを閲覧中に新しい記事が投稿されると、リストが自動で更新されるという感じで使うことができます。利用者からするととても便利な機能です。自分でサイトを再読み込みしなくても、最新の情報に保ってくれるのは便利です。
この機能はよくFirebaseの利用事例として照会されているチャット機能を実装する場合にはとても便利です。誰かがメッセージを送ると、送られたメッセージがほぼリアルタイムで表示されます。
この機能はとても便利ですが、気を付けないとアクセス数が多くなる原因になります。例えば100人の利用者があなたのWebサイトを閲覧していたとします。サイトでは100件のリストをサイト利用時に読み込んで保持しているとします。この読み込みに「onSnapshot」を使うと、あなたがサイトのデータを更新すると閲覧中の全てのデータが更新されます。
更新時に100件のリストを読み込むようにサイトを設計している場合、1個のデータの更新で合計1万回の読み込みが発生する事になります。
読み込み時を含めると、1回のデータ更新で2万回になります。
サービスによっては、データの更新の頻度が大きい場合は、実際のサイトの来訪者は少なくても、アクセス数は大きな回数になる可能性があります。
更新が管理者だけの場合はそれほどでもない場合も多いですが、利用者がデータを更新ん可能で、更新したデータを他の利用者が参照できるようなWebサービスやWebアプリの場合、利用者の更新でもこのデータの更新イベントが起きる事になります。
const data = []
firebase.firestore().collection("test").onSnapshot((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        data.push(doc.data())
    })
})
のようにすると、更新の度に「test」コレクションのデータを読み込むことになります。
let data;
firebase.firestore().collection("test").doc("abc").onSnapshot((doc) => {
    data = doc.data();
})
の場合は、「test」コレクションの「abc」というドキュメントが変更された場合だけ、「abc」のデータが更新されます。
使いかたによって、アクセス数が大きく変わるので必要以外のリアルタイム更新はなるべく避けるようにするのがFirebaseの利用料金を抑える秘訣です。
開発中は検証の為のアクセスも多くなります。
当然ですが、WebサービスやWebアプリの開発をしている場合は、当然テストの為にFirebaseにアクセスをしますよね?
このテストのアクセスは、意外に回数が行きます。テストデータが大きいとそれだけアクセス数も増えます。
テスト用にそれほど大きなデータを使う事は少ないかと思いますが、少し複雑なデータを扱う場合には、取得したデータによって別のデータを取得するなど単純なデータアクセスではない場合もあります。そうした場合は、開発時のアクセスだけでもFirebaseの無料利用枠を超える事もあります。

予算内で利用料金を抑えるためには?

一つは利用状況を見ながら利用する事です。 Firebaseコンソールに行くと、利用状況を知る事ができます。その利用状況を見れば自分のWebサービスやWebアプリの利用傾向が分かります。予想より多い場合は、アクセスが増えている理由を検証する必要があります。
開発のアクセスが多い場合は、開発でのアクセスを調整すれば殆どの場合、開発での料金発生は防ぐことが可能です。
また、Firebase自体が予算設定をして、設定額に対する使用状況に応じて通知をしてくれるという機能もあります。この機能を利用すると、予想以上の利用を事前に感知する事ができます。
いずれにしても、稼働中のサービスを停止する事は難しいので開発段階で、アクセス数の傾向を見てある程度アクセス数の概算をしておいた方が無難です。

まとめ

Firebaseは多くの個人レベルのプロジェクトでは無料の範囲内での運用が可能です。アクセス数が増えてくると、WebサービスやWebアプリの作り方によってはアクセス数が予想以上になる事もあります。
開発段階からアクセス数の傾向を掴んで、サービス稼働前にアクセス数を抑える工夫を設計に取り込んでおくことが、少ない予算で、WebサービスやWebアプリを運営するコツです。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら