18
19

More than 5 years have passed since last update.

Firebase Functions で Cloud Firestore内のデータをCSVでダウンロードする

Posted at

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 でアクセスできます。

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19