Firexport のロゴ

Firexportガイド

Firestore のデータを CSV にエクスポートする方法

Firebase コンソールは Firestore のデータを表示しますが、CSV としてダウンロードするボタンはありません。Firestore から CSV ファイルを取り出す実用的な方法は 3 つあります。どれが合うかは、データの量と、どれだけの準備をするかによります。

2026年9月24日 更新。 方法 1 の拡張機能 Firexport は私たちのものです。方法 2 と 3 には不要です。

結論から言うと

  • いま、1 つのクエリの結果だけ: コンソールのクエリビルダー(Query builder)で実行し、ブラウザ拡張機能でエクスポートします。 方法 1
  • 繰り返し実行したい、または列の形を自分で決めたい: 短い Admin SDK スクリプト。 方法 2
  • 大きなコレクションの全ドキュメント、またはすでに BigQuery を使っている: gcloud のマネージド エクスポートのあと、BigQuery から CSV へ。 方法 3
1. コンソール + 拡張機能2. Admin SDK スクリプト3. gcloud + BigQuery
準備Chrome 拡張機能をインストールNode.js と Google Cloud の認証情報Cloud Storage バケットと BigQuery データセット
課金の有効化不要不要必要(Blaze プラン)
エクスポート対象クエリビルダーのクエリ 1 つ(フィルタ・並び順・上限つき)コードがクエリしたものコレクション全体
タイムスタンプコンソールの表示どおり(Advanced では ISO 8601)ISO 8601BigQuery の TIMESTAMP
マップと配列コンソールの表示テキスト。長い値は「…」で切れることがある(Advanced では全体)1 つのセルに JSONフラット化クエリのあと、1 つのセルに JSON

1. Firexport で Firebase コンソールからエクスポート

Firebase コンソールの Firestore ページには、クエリを実行して結果を表に表示するクエリビルダー(Query builder)がありますが、それをダウンロードする手段はありません。 Firexport は、その結果の横にエクスポート ボタンを追加する無料の Chrome 拡張機能です。

  1. Chrome ウェブストアから Firexport をインストールします。
  2. Firebase コンソールで Firestore Database を開き、パネルビュー(Panel view)からクエリビルダー(Query builder)に切り替えます(データタブの右上)。
  3. クエリのスコープ(Query scope)とパス(Path)でコレクションを選び、必要なら フィルタや上限を加えて、実行(Run)をクリックします。
  4. 結果の上のエクスポートをクリックします。Firexport が結果の全ページをたどり、CSV ファイルを 1 つ ダウンロードします。JSON にするには、ボタンの横の ⋮ メニューを開いて JSON にエクスポートを選びます。
Firebase コンソールの Firestore クエリビルダーと、Firexport がクエリ結果の上に追加したエクスポート ボタン
エクスポート ボタンはクエリビルダーの結果の上にあります。

ファイルに入るもの:

  • ドキュメント ID(Document ID)の列、続いてコンソールの表に表示される順にフィールドごとの列。
  • 値はコンソールの表示どおりです。無料版では、タイムスタンプはコンソールの表示形式(ブラウザの言語とタイムゾーン)、 参照は短縮され、長いマップや配列は「…」で切れることがあります。
  • 買い切りライセンスの Firexport Advanced は、コンソールがすでに読み込んだデータから、ISO 8601 のタイムスタンプ、 参照の完全なパス、ジオポイント、切り詰められていないマップと配列を復元します。

サービス アカウント キーも課金の設定も不要です。すでにサインインしているコンソールのセッションで動き、ファイルは ブラウザの中で作られます。一度に 1 つのクエリをエクスポートするので、サブコレクションはコレクション グループとして クエリしたときだけ含まれます。Chrome とその他の Chromium ベースのブラウザで動きます。

スクリプトもサービス アカウント キーもなしで、次の Firestore クエリをコンソールからエクスポートしましょう。

Chrome に追加 — 無料

2. Admin SDK スクリプトでエクスポート

拡張機能を使いたくない場合や、エクスポートをスケジュールで実行する必要がある場合は、Firebase Admin SDK を使う短い Node.js スクリプトで済みます。Firestore を読めるアカウントが必要です。プロジェクトのオーナーか編集者、または Cloud Datastore 閲覧者のロールです。

  1. SDK をインストール: npm install firebase-admin
  2. ローカルの認証情報でサインイン: gcloud auth application-default login。サーバーでは代わりに GOOGLE_APPLICATION_CREDENTIALS でサービス アカウント キーを指定します。
  3. 下のスクリプトを export-to-csv.mjs として保存し、your-project-id を置き換えて、 node export-to-csv.mjs users を実行します。
// Usage: node export-to-csv.mjs users   → writes users.csv
import { writeFileSync } from 'node:fs';
import { initializeApp } from 'firebase-admin/app';
import {
  getFirestore,
  FieldPath,
  Timestamp,
  GeoPoint,
  DocumentReference,
} from 'firebase-admin/firestore';

initializeApp({ projectId: 'your-project-id' });
const db = getFirestore();
const collection = process.argv[2];
if (!collection) throw new Error('Usage: node export-to-csv.mjs <collection>');

// Read the collection 1,000 documents at a time, so large collections don't time out.
const docs = [];
let last;
while (true) {
  let query = db.collection(collection).orderBy(FieldPath.documentId()).limit(1000);
  if (last) query = query.startAfter(last);
  const page = await query.get();
  if (page.empty) break;
  docs.push(...page.docs);
  last = page.docs[page.docs.length - 1];
}

// Firestore types become plain values: timestamps as ISO 8601, references as paths.
function plain(value) {
  if (value instanceof Timestamp) return value.toDate().toISOString();
  if (value instanceof DocumentReference) return value.path;
  if (value instanceof GeoPoint) return { latitude: value.latitude, longitude: value.longitude };
  if (value instanceof Uint8Array) return Buffer.from(value).toString('base64');
  if (Array.isArray(value)) return value.map(plain);
  if (value && typeof value === 'object') {
    return Object.fromEntries(Object.entries(value).map(([key, v]) => [key, plain(v)]));
  }
  return value;
}

// Maps and arrays go in one cell as JSON. Quote any cell with a comma, a quote or a line break.
function cell(value) {
  if (value === null || value === undefined) return '';
  const text = typeof value === 'object' ? JSON.stringify(value) : String(value);
  return /[",\r\n]/.test(text) ? `"${text.replaceAll('"', '""')}"` : text;
}

const rows = docs.map((doc) => ({ documentId: doc.id, ...plain(doc.data()) }));
// Documents in one collection can have different fields, so the columns are all of them.
const columns = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const lines = [columns, ...rows.map((row) => columns.map((column) => row[column]))];
writeFileSync(`${collection}.csv`, lines.map((line) => line.map(cell).join(',')).join('\r\n'));
console.log(`Wrote ${rows.length} documents to ${collection}.csv`);
  • すべての親をまたいでサブコレクションをエクスポートするには、db.collection を db.collectionGroup に変えます。
  • このスクリプトはファイルを書く前に全行をメモリに保持します。数百万ドキュメントなら方法 3 を使ってください。

3. gcloud と BigQuery でエクスポート

Firestore のマネージド エクスポートは、CSV ではなく Firestore 独自の形式のバックアップを Cloud Storage に 書き出します。BigQuery はその形式を読み込んで CSV を書き出せます。大きなコレクション向けの道ですが、課金の有効化 (Blaze プラン)と、エクスポートを実行してバケットに書き込む権限が必要です。必要なロールは Google のエクスポートとインポートのドキュメントにあります。

# 1. Export one collection. BigQuery only loads exports made with --collection-ids.
gcloud firestore export gs://YOUR_BUCKET/users-export --collection-ids=users

# 2. Load it into a BigQuery dataset in the same location as the bucket.
bq --location=US mk --dataset firestore_export
bq load --source_format=DATASTORE_BACKUP firestore_export.users \
  gs://YOUR_BUCKET/users-export/all_namespaces/kind_users/all_namespaces_kind_users.export_metadata

BigQuery はネストした列を CSV に書けませんが、Firestore のエクスポートから読み込んだ表には必ず 1 つあります。 ドキュメント ID を持つ __key__ です。そこで先にクエリでマップと配列を JSON テキストにしたフラットな コピーを作り、それを抽出します。

# 3. Make a flat copy: maps and arrays become JSON text. List your own fields.
bq query --use_legacy_sql=false --destination_table=firestore_export.users_flat \
'SELECT __key__.name AS documentId, email, createdAt,
        TO_JSON_STRING(address) AS address, TO_JSON_STRING(tags) AS tags
 FROM firestore_export.users'

# 4. Write it to CSV and download it.
bq extract --destination_format=CSV firestore_export.users_flat gs://YOUR_BUCKET/users.csv
gcloud storage cp gs://YOUR_BUCKET/users.csv .
  • BigQuery はファイル 1 つに最大 1 GB を書きます。それより大きい場合は gs://YOUR_BUCKET/users-*.csv のようなワイルドカードを使います。
  • エクスポートはドキュメントごとに 1 回の読み取りとして課金されます。終わったら、Cloud Storage を使い続けないよう エクスポート フォルダを削除してください。

FAQ

Firebase コンソールから Firestore のデータを CSV にエクスポートできますか?

いいえ。Firebase コンソールの Firestore ページにダウンロード ボタンはありません。マネージド エクスポート(Google Cloud コンソールのインポート/エクスポート ページ、または gcloud firestore export)は、Firestore 独自の形式のバックアップを Cloud Storage に書き出します。データの復元のためのもので、スプレッドシートで開くためのものではありません。

Firestore のデータのエクスポートには費用がかかりますか?

どの方法でもエクスポートする各ドキュメントを少なくとも 1 回読み取り、Firestore はそれをドキュメントの読み取りとして課金します。1 日の無料枠の範囲内なら費用はかかりません。マネージド エクスポートはさらにプロジェクトで課金が有効である必要があり、そのファイルは削除するまで Cloud Storage を使います。

サブコレクションはどうエクスポートしますか?

コレクション グループとしてクエリします。コンソールでは、クエリビルダーのクエリのスコープ(Query scope)でコレクション グループ(Collection group)を選びます。スクリプトでは db.collection() の代わりに db.collectionGroup() を使います。gcloud では、サブコレクションの ID を --collection-ids に渡します。

代わりに JSON にエクスポートできますか?

はい。Firexport のエクスポート メニューに JSON にエクスポートがあります。スクリプトなら CSV の代わりに JSON.stringify(rows) を書けます。BigQuery からは bq extract --destination_format=NEWLINE_DELIMITED_JSON でマップと配列をネストしたまま出せます。