Firexportガイド
Firestore のデータを JSON にエクスポートする方法
Realtime Database には Firebase コンソールに「JSON をエクスポート」ボタンがありますが、Firestore にはありません。 Firestore のドキュメントを JSON として取り出す実用的な方法は 3 つあり、1 つのクエリの結果から、サブコレクションを含む コレクション全体まで扱えます。
2026年9月24日 更新。 方法 1 の拡張機能 Firexport は私たちのものです。方法 2 と 3 には不要です。
結論から言うと
| 1. コンソール + 拡張機能 | 2. Admin SDK スクリプト | 3. gcloud + BigQuery | |
|---|---|---|---|
| 準備 | Chrome 拡張機能をインストール | Node.js と Google Cloud の認証情報 | Cloud Storage バケットと BigQuery データセット |
| 課金の有効化 | 不要 | 不要 | 必要(Blaze プラン) |
| ファイル | JSON 配列 1 つ | JSON 配列 1 つ | 改行区切りの JSON。1 行に 1 ドキュメント |
| サブコレクション | 別途、コレクション グループのクエリとして | 各ドキュメントの下にネスト(任意) | 別途、コレクション ID ごとに 1 テーブル |
| タイムスタンプ | コンソールの表示どおり(Advanced では ISO 8601) | ISO 8601 | BigQuery のタイムスタンプ文字列 |
1. Firexport で Firebase コンソールからエクスポート
Firebase コンソールの Firestore ページには、クエリを実行して結果を表に表示するクエリビルダー(Query builder)がありますが、それをダウンロードする手段はありません。 Firexport は、その結果の横にエクスポート ボタンを追加する無料の Chrome 拡張機能です。
- Chrome ウェブストアから Firexport をインストールします。
- Firebase コンソールで Firestore Database を開き、パネルビュー(Panel view)からクエリビルダー(Query builder)に切り替えます(データタブの右上)。
- クエリのスコープ(Query scope)とパス(Path)でコレクションを選び、必要なら フィルタや上限を加えて、実行(Run)をクリックします。
- エクスポート ボタンの横の ⋮ メニューを開き、JSON にエクスポートを選びます。Firexport が結果の全ページをたどり、JSON ファイルを 1 つダウンロードします(エクスポート ボタン自体は CSV を保存します)。

ファイルはドキュメントごとに 1 つのオブジェクトを持つ JSON 配列 1 つです。Document ID キーのあとに ドキュメントのフィールドが続きます。数値・ブール値・null は JSON の型のまま、マップと配列はネストしたまま出ます。 無料版と Advanced で違うのは、コンソールがテキストとしてしか表示しない値です:
無料版 — タイムスタンプ・ジオポイント・参照はコンソールの表示どおり:
[
{
"Document ID": "2PomjkgoCISvwnlGrypP",
"name": "firexport",
"count": 1,
"tags": ["dev", "export"],
"settings": { "theme": "dark", "beta": true },
"createdAt": "August 24, 2026 at 1:16:09 PM UTC+9",
"location": "[37.5665° N, 126.978° E]",
"owner": "/users/u1"
}
]Advanced(買い切りライセンス) — 同じ値を、コンソールがすでに読み込んだデータから復元:
[
{
"Document ID": "2PomjkgoCISvwnlGrypP",
"name": "firexport",
"count": 1,
"tags": ["dev", "export"],
"settings": { "theme": "dark", "beta": true },
"createdAt": "2026-08-24T04:16:09.012207Z",
"location": { "latitude": 37.5665, "longitude": 126.978 },
"owner": "projects/my-app/databases/(default)/documents/users/u1"
}
]無料版では、コンソールのテキストを JSON として読み戻せないマップや配列(たとえばコンソールが「…」で切ったもの)は 文字列のままです。Advanced はそれを完全な形で書き出します。どちらでも、サービス アカウント キーも課金の設定も 不要です。すでにサインインしているコンソールのセッションで動き、ファイルはブラウザの中で作られます。Chrome と その他の Chromium ベースのブラウザで動きます。
スクリプトもサービス アカウント キーもなしで、次の Firestore クエリをコンソールから JSON にエクスポートしましょう。
2. Admin SDK スクリプトでエクスポート
Firebase Admin SDK を使う短い Node.js スクリプトはコレクション全体をエクスポートでき、ほかの 2 つの方法にはできない サブコレクションへの下降もできます。Firestore を読めるアカウントが必要です。プロジェクトのオーナーか編集者、 または Cloud Datastore 閲覧者のロールです。
- SDK をインストール:
npm install firebase-admin - ローカルの認証情報でサインイン:
gcloud auth application-default login。サーバーでは代わりにGOOGLE_APPLICATION_CREDENTIALSでサービス アカウント キーを指定します。 - 下のスクリプトを
export-to-json.mjsとして保存し、your-project-idを置き換えて、node export-to-json.mjs usersを実行します。各ドキュメントのサブコレクションも含めるには--subcollectionsを付けます。
// Usage: node export-to-json.mjs users [--subcollections] → writes users.json
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, flag] = process.argv.slice(2);
if (!collection) throw new Error('Usage: node export-to-json.mjs <collection> [--subcollections]');
const withSubcollections = flag === '--subcollections';
// Firestore types become JSON 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;
}
// Read a collection 1,000 documents at a time. With --subcollections, each document also gets its
// subcollections under "__collections__", read the same way.
async function readCollection(ref) {
const docs = [];
let last;
while (true) {
let query = ref.orderBy(FieldPath.documentId()).limit(1000);
if (last) query = query.startAfter(last);
const page = await query.get();
if (page.empty) break;
for (const doc of page.docs) {
const row = { documentId: doc.id, ...plain(doc.data()) };
if (withSubcollections) {
for (const sub of await doc.ref.listCollections()) {
row.__collections__ ??= {};
row.__collections__[sub.id] = await readCollection(sub);
}
}
docs.push(row);
}
last = page.docs[page.docs.length - 1];
}
return docs;
}
const docs = await readCollection(db.collection(collection));
writeFileSync(`${collection}.json`, JSON.stringify(docs, null, 2));
console.log(`Wrote ${docs.length} documents to ${collection}.json`);--subcollectionsを付けると、サブコレクションを持つ各ドキュメントに、それらを収めた__collections__キーが付き、深さのぶんだけネストします。見つけるのにドキュメントごとに 1 回余分な リクエストがかかるので、大きなコレクションでは時間がかかります。- それ自体が存在しないドキュメント(コンソールが ID を斜体で表示するもの)の下のサブコレクションには、親の コレクションからは届きません。そういうものはコレクション グループでエクスポートしてください。
- このスクリプトはファイルを書く前にすべてをメモリに保持します。数百万ドキュメントなら方法 3 を使ってください。
3. gcloud と BigQuery でエクスポート
Firestore のマネージド エクスポートは、JSON ではなく Firestore 独自の形式のバックアップを Cloud Storage に 書き出します。BigQuery はその形式を読み込んで JSON として書き戻せます。大きなコレクション向けの道ですが、課金の 有効化(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
# 3. Write it out as newline-delimited JSON and download it.
bq extract --destination_format=NEWLINE_DELIMITED_JSON firestore_export.users gs://YOUR_BUCKET/users.json
gcloud storage cp gs://YOUR_BUCKET/users.json .- ファイルは改行区切りの JSON です。1 つの配列ではなく、1 行に 1 ドキュメントです。配列にするには
jq -s . users.json > users-array.jsonを実行します。 - マップと配列はネストしたままです。各行にはエクスポート由来の
__key__オブジェクトもあり、そこに ドキュメント ID が入っています。 - BigQuery はファイル 1 つに最大 1 GB を書きます。それより大きい場合は
gs://YOUR_BUCKET/users-*.jsonのようなワイルドカードを使います。 - エクスポートはドキュメントごとに 1 回の読み取りとして課金されます。終わったら、Cloud Storage を使い続けないよう エクスポート フォルダを削除してください。
FAQ
Firebase コンソールから Firestore のデータを JSON にエクスポートできますか?
いいえ。Realtime Database にはデータビューアのメニューに「JSON をエクスポート」がありますが、Firestore のデータタブにダウンロードはありません。マネージド エクスポート(Google Cloud コンソールのインポート/エクスポート ページ、または gcloud firestore export)は、JSON ではなく Firestore 独自の形式のバックアップを Cloud Storage に書き出します。
Firestore の REST API はなぜ {"stringValue": "..."} のような値を返すのですか?
REST API はすべてのフィールドを stringValue、integerValue、timestampValue、mapValue などの型で包みます。JSON ではありますが、ドキュメントの形ではありません。Admin SDK(方法 2)がその型を外してくれます。
JSON を Firestore に戻せますか?
直接は戻せません。gcloud firestore import はマネージド エクスポートしか読まず、これらの JSON ファイルはどれもそれではありません。JSON ファイルを読み込むには、スクリプトで書き戻します(大きなバッチは Admin SDK の BulkWriter が扱います)。データの復元が目的なら、JSON ではなくマネージド エクスポートとインポートを使ってください。
Firestore のデータのエクスポートには費用がかかりますか?
どの方法でもエクスポートする各ドキュメントを少なくとも 1 回読み取り、Firestore はそれをドキュメントの読み取りとして課金します。1 日の無料枠の範囲内なら費用はかかりません。マネージド エクスポートはさらにプロジェクトで課金が有効である必要があり、そのファイルは削除するまで Cloud Storage を使います。
