FirestoreとFunctionsでシンプルなカウンターを作る
概要
アクセスカウンターのように認証なしでカウントする機能をFirebaseで提供されているFirestoreとFunctionsで実現します。
HTTPトリガーを利用して、/counterにアクセスする度に数値が増えていくようにします。
環境
Firebaseのプロジェクト作成や環境構築についてはここでは割愛します。
無料プランではFunctionsが利用できないようなのでご注意ください。
方法
Firestore
まず、Firestoreに数値を保持するデータを作成しておきます。
ここでは適当に以下のように作成しました。
counter: { counter: { count: 0 } }
Functions
functions/index.jsに関数を作成してデプロイします。
const functions = require("firebase-functions"); const firebase = require("firebase-admin"); firebase.initializeApp(); exports.counter = functions.https.onRequest(async (request, response) => { const docRef = firebase.firestore().collection("counter").doc("counter"); await docRef.update({ count: firebase.firestore.FieldValue.increment(1), }, {merge: true}); return docRef.get().then((s) => { response.send(s.data().count.toString()); }); });
FieldValue.incrementで指定した分だけ数値を増加させることができます。
トランザクション処理も特に気にしなくてよいので便利です。
https://firebase.blog/posts/2019/03/increment-server-side-cloud-firestore
ただし、更新頻度は最大で1回/1秒ということなので、用途によっては注意が必要かもしれません。
https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja
サーバーサイドからFirestoreを操作する形なので、ルールはデフォルトのallow read, write: if false;
のままで大丈夫です。
動作確認
デプロイした関数のurlにアクセスすると数値が増えていきます。