Firestoreにテストデータを作る(+注意点)


やること自体は難しくない。
for等でループしてadd()かset()するだけ。

私は、docを指定したかったので、set()を利用しました。以下。

index.js
var admin = require("firebase-admin");
var serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://{project}.firebaseio.com"
});

var db = admin.firestore();

//memoly leakのwarningを出ないようにする。
require('events').EventEmitter.defaultMaxListeners = 0;

//ループ
for (let i = 1; i < 100; i++) {

    let i0 = ('0000000000' + i).slice(-10);

    db.collection('users').doc(i0).set({
        member_id: i0,
        name: "user" + i,
        email: "user" + i + "@test.com",
        age: Math.floor(Math.random() * 60) + 15, //15 ~ 74
        created_at: admin.firestore.FieldValue.serverTimestamp()
    });
    console.log("create:" + i0);
}

注意?点

set()処理自体は正しくされましたが、(最初)下記のようなエラーがでました。

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 close listeners added. Use emitter.setMaxListeners() to increase limit

標準ではListenerの上限が10になってることから起こるようです。とりあえずWarningを消すには、下記のようにdefaultMaxListenersの数を適切に設定するといいようです。

require('events').EventEmitter.defaultMaxListeners = 0;

なお、0に設定すると無制限ということのようです。

fakerを使ってみる

ダミーデータといえばfaker。使ってみます。

npm install faker

書いてみる。いちおうlocalでjaが指定できるみたい。

ただ、jaにするとメアドとか超テキトーな感じになります。


....省略...

const faker = require('faker');
faker.locale = "ja";

for (let i = 1; i < 100; i++) {

    let i0 = ('0000000000' + i).slice(-10);

    db.collection('users').doc(i0).set({
        member_id: i0,
        name: faker.name.findName(),
        email: faker.internet.email(),
        age: Math.floor(Math.random() * 60) + 15,
        created_at: admin.firestore.FieldValue.serverTimestamp()
    });
    console.log("create:" + i0);
}

その他の使い方はこちらを見る。