Firebase FunctionsをHTTPリクエスト経由で呼び出す
ブラウザから呼び出す仕組みがあります。
https://firebase.google.com/docs/functions/http-events?hl=ja
これを利用してFirebaseのDBのレコードを取得します。
jsonをcsvにするjson2csvをインストール
Firebaseの基本モジュールには入っていないようなのでローカルでデプロイ前にインストールしておく
# npm install json2csv
関数の作成
index.js内にこんな関数を作成します。サンプルではusersコレクション内すべてのレコードをcsvにする例
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp();
exports.userlist = functions.https.onRequest((request, response) => {
const json2csv = require("json2csv").parse;
const db = admin.firestore();
const ordersRef = db.collection('users');
return ordersRef.get()
.then((querySnapshot) => {
const orders = [];
querySnapshot.forEach(doc => {
const order = doc.data();
orders.push(order);
});
const csv = json2csv(orders);
response.setHeader(
"Content-disposition",
"attachment; filename=users.csv"
);
response.set("Content-Type", "text/csv");
response.status(200).send(csv);
return ""
}).catch((err) => {
response.status(200).send("エラー発生: " + err);
return Promise.resolve();
});
})
collection内のデータを取得して1コレード単位で配列に入れてCSVに変換後、ヘッダを指定して出力するだけ。データの取得条件はもう少し複雑にできるはず。
また、.then()を使う場合は何かをreturnしなきゃいけないので空文字をreturnしています。この辺の仕様はあまり厳密ではないのかも。。。調査中です。
https://us-central1-[PROJECT_NAME].cloudfunctions.net/userlist でアクセスできます。