最近リリースした積読用のWebサービスの『積読ハウマッチ』、
Qiita記事を書いた結果、たくさんの方々が登録者してくれました
ちゃんと計測してみたいなと思ってたら、Firebase Admin SDKを使うと、
Firebase Authの登録日から日毎のユーザ数を集計できそうなので、試してみました!
できたグラフはこちら
こんなグラフを出したかったのです...
ちなみに、前の記事を書いたのが8/14で、1日トレンドが8/16なので、約5倍...うれしい...
ただ、INTERNET Watchさんやnabettuさんにも紹介いただいていたので、純粋な数字ではない...
このグラフを出すためには、こんなCSVがほしい...
日付
とその日の登録ユーザ数
の2カラムのデータがあれば、
2019-08-11 3
2019-08-12 12
2019-08-13 46
2019-08-14 13
2019-08-15 38
2019-08-16 65
2019-08-17 18
Googleスプレッドシートでグラフを出せるので、

とりあえず、これが出したいなと。。(´ω`)
ユーザ数を日毎に集計するソース
Firebase Authのユーザの一覧を取得して、集計して、
console.log()
で出力するソースです!!
ローカルPCでfirebase-adminを使うときの初期設定とかはこちらを参照
const dayjs = require("dayjs");
const admin = require("firebase-admin");
// 配置したサービスアカウントの秘密鍵を取得
const serviceAccount = require("./key/XXXXX.json");
// firebase-adminを初期化
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
// firestoreのインスタンスを取得
const db = admin.firestore();
/**
* Firebase Authからユーザの一覧を取得する関数。
* 最大1000件の取得条件があるので、再起で呼び出す
*/
async function listAllUsers(users = [], nextPageToken) {
try {
const res = await auth.listUsers(1000, nextPageToken);
res.users.forEach(userRecord => users.push(userRecord.toJSON()));
if (res.pageToken) await listAllUsers(users, res.pageToken);
} catch (error) {
console.log("Error listing users:", error);
}
return users;
}
// ****************************
// * MAIN
// ****************************
async function main() {
console.log(`***** START MAIN`);
// Firebase Authのユーザ数を取得
const users = await listAllUsers();
// 日付ごとに集計
const summary = {};
users.forEach(userRecord => {
const creationTime = userRecord.metadata.creationTime;
const createAt = dayjs(creationTime).format("YYYY-MM-DD");
if (createAt in summary) summary[createAt] = summary[createAt] + 1;
else summary[createAt] = 1;
});
// 集計結果を出力
Object.entries(summary)
.sort((a, b) => dayjs(a[0]).diff(dayjs(b[0]))) // 日付の昇順にソート
.forEach(([key, val]) => console.log(`${key},${val}`)); // 書き出し
console.log(`***** END MAIN`);
process.exit(0); // プロセスが終了しない時があるので、exitしてます...
}
main().then();
中身的にはシンプルで、
- Firebase Authでユーザの一覧を取得してきて
- 日付ごとに集計
- 集計した結果をCSV形式で出力
なお、日付の計算はdayjsを使っています。
必要に応じてnpm install dayjs --save
などでインストールしてください!
Firebase Authではこんな情報を取得できます
res.users.forEach(userRecord => users.push(userRecord.toJSON()));
の部分のuserRecord.toJSON()
では、こんな情報が取得できます。
{
"uid": "....",
"email": undefined,
"emailVerified": false,
"displayName": "めもらば@公式",
"photoURL": "https://xxxxxx.png",
"phoneNumber": undefined,
"disabled": false,
"metadata": {
"lastSignInTime": "Tue, 06 Aug 2019 08:46:10 GMT",
"creationTime": "Mon, 22 Jul 2019 16:24:06 GMT"
},
"passwordHash": undefined,
"passwordSalt": undefined,
"customClaims": undefined,
"tokensValidAfterTime": "Mon, 22 Jul 2019 16:24:06 GMT",
"providerData": [
{
"uid": "xxxxxx",
"displayName": "めもらば@公式",
"email": "xxxx@email.com",
"photoURL": "https://xxxx.png",
"providerId": "twitter.com",
"phoneNumber": undefined
}
]
}
いろいろできるので、ユーザ管理用にスクリプトとかを用意しておくのもよさそう(´ω`)
おわりに
以下の記事でも書いたけど、firebase-admin便利...ヽ(=´▽`=)ノ
ちなみに、計測した対象のサービスはこちらです♪
積読総額ランキングや人気の本などもあるので、よかったらあそんでもらえれば!!
積んでる本の総額がわかる読書管理サービス
『積読ハウマッチ』
