Firebase Admin SDK에서 하루의 Authentication 사용자 수를 집계했습니다 (최대 5 배).

최근 출시한 적독용 웹 서비스의 『적독 하우 매치』,
Qiita 기사을 쓴 결과, 많은 분들이 등록자를 주었습니다

제대로 측정하고 싶다고 생각하면 Firebase Admin SDK을 사용하면,
Firebase Auth 등록일로부터 매일 사용자 수를 집계 할 수 있기 때문에 시도했습니다!

할 수있는 그래프는 여기



이런 그래프를 내고 싶었는데...



덧붙여서, 이전 기사을 쓴 것이 8/14로, 하루 트렌드가 8/16이므로, 약 5배... 기쁘다...
단지, INTERNET Watch씨나 nabettu씨에게도 소개해 주셨으므로, 순수한 숫자는 아니다...

이 그래프를 내기 위해서는 이런 CSV를 원합니다 ...


日付その日の登録ユーザ数의 두 열의 데이터가 있다면,
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을 사용할 때의 초기 설정이란?
- 로컬 PC에서 firebase-admin을 사용하여 Firestore 조작 (관리 도구) - 해파리가되고 싶다.
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();

내용적으로는 간단하고,
1. Firebase Auth에서 사용자 목록을 가져옵니다.
2. 날짜별 집계
3. 집계한 결과를 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": "[email protected]",
      "photoURL": "https://xxxx.png",
      "providerId": "twitter.com",
      "phoneNumber": undefined
    }
  ]
}

여러가지 할 수 있으므로, 유저 관리용으로 스크립트등을 준비해 두는 것도 좋을 것 같아(´ω`)

결론



아래 기사에서도 썼지만 firebase-admin 편리 ... ヽ (=´▽`=)ノ
- 로컬 PC에서 firebase-admin을 사용하여 일괄 삭제 / 일괄 업데이트 - Qiita

덧붙여서, 계측한 대상의 서비스는 이쪽입니다♪
적독 총액 랭킹이나 인기의 책 등도 있으므로, 좋으면 어쩌면 받을 수 있으면!!

쌓은 책의 총액을 알 수 있는 독서 관리 서비스
적독 하우 매치



참고로 한 사이트


  • 사용자 관리  |  Firebase
  • UserMetadata | Admin Node.js SDK  |  Firebase
  • iamkun/dayjs: ⏰ Day.js 2KB immutable date library alternative to Moment.js with the same modern API
  • 자바스크립트 잊어버리는 배열을 정렬하는 방법 - Qiita
  • 좋은 웹페이지 즐겨찾기