こんにちは。
株式会社エス・スリーのスタッフです。
今日は(も?)Firebase関連の話題となります。
タイトル通りですが、
Cloud functionsを使って
firestoreのデータをテキスト形式で
Cloud storageへ書き出します。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({ origin: true });
const gcs = require('@google-cloud/storage')();
const bucket = gcs.bucket("バケット名");
const path = require('path');
const os = require('os');
const fs = require('fs');
//データ量が多い場合の設定
const runtimeOpts2G = {
timeoutSeconds: 120,
memory: '2GB'
}
module.exports = functions.runWith(runtimeOpts2G).https.onRequest((req, res) => {
cors(req, res, () => {
let fileName = "tmp.txt";
const tempFilePath = path.join(os.tmpdir(), fileName);
let destFileName;
const stream = fs.createWriteStream(tempFilePath);
let ref = admin
.firestore()
.collection("書き出したいコレクション名")
.orderBy("並び変えたいフィールド名")
.limit(30000);
ref.get().then(function (snapshot) {
snapshot.forEach(async function (childSnapshot) {
let d = childSnapshot.data();
destFileName = d.dateTime + ".txt";
stream.write(
d.dateTime + " "
//書き出したいフィールドを羅列
+ "\n"
);
let dRef = admin.firestore().collection("書き出したいコレクション名").doc(childSnapshot.id);
await dRef.delete();
});
stream.end("\n");
var destPath = '/任意のディレクトリ/' + destFileName;
bucket.upload(tempFilePath
, {
destination: destPath
}).then(function () {
res.status(200).send('ok');
})
});
// エラー処理
stream.on("error", (err) => {
if (err)
console.log(err.message);
});
})
})
これをindex.jsで読み込んで使います。
何かに使える・・・?かもしれません。
上のコードはhttp起動です。
最後までお読みいただき、ありがとうございます。