Firestoreを運用する中で、「データのバックアップはどうすればいい?」「万が一のデータ消失に備えたい」と悩んでいませんか?
本記事では、Firestoreの公式機能である「Managed Export(マネージドエクスポート)」について、その概要から具体的な使い方まで実例を交えて分かりやすく解説しています。
Managed Backups(管理型バックアップ)とは何か?
Firestoreがネイティブで提供している定期バックアップ機能です。
データベースそのものの状態を、Googleのインフラ側が自動で「スナップショット(ある一瞬のクローン)」として丸ごと保存してくれる機能です。
日次または週次での定期実行をコンソールやgcloudコマンドから簡単にスケジュールできます。
メリット
- コストが圧倒的に安い(データ量が多い場合)
ドキュメントの読み取りが発生しないため、数百万・数千万件のデータがあっても、純粋なデータ容量のストレージ料金しかかかりません。 - インデックス情報も含む
データベースの状態をそのまま丸ごと保存します。 - 本番パフォーマンスへの影響ゼロ
バックアップ処理によってDBの読み書きが重くなることがありません。
デメリット
- 既存DBへの上書き復旧ができない
リストア時は必ず「新しいデータベース(同一プロジェクト内)」として復元されます。
アプリ側の接続先を切り替えるか、データを移行する必要があります。 - 別プロジェクトへの移動が不可
バックアップデータをローカルにダウンロードしたり、別プロジェクトに持っていったりはできません。
特徴まとめ
Managed Backupsは設定がとても簡単で、現在使っているデータベースの中身を完全に復元でき、しかも激安のバックアップシステムです。
ただし、その簡易さゆえ、用途は現在使用しているデータベースのみに限定されます。つまり、復元時の自由度は低いです。
バックアップの保持期間とスケジュール
保持期間
バックアップデータの保存期間は、最小1日間 〜 最大14週間(98日間)の間で、1日単位で自由に設定できます。
保存期間を過ぎたバックアップは、Firestoreのシステムによって自動的に削除されるため、ライフサイクル管理の手間がかかりません。
スケジュール
バックアップを実行する頻度(周期)は、以下の2つのいずれかから選択します。
- 日次(Daily): 毎日1回実行
- 週次(Weekly): 毎週指定した曜日(月〜日)に1回実行
バックアップが実行される具体的な「時刻(何時何分)」をユーザー側で細かく指定することはできません。設定した周期(毎日、または指定した曜日)に基づいて、Firestore側で自動的にスケジュール・実行されます。
発生するコスト(試算あり)
本番のGoogle Cloud / Firebase環境でManaged Backupsを有効にした場合、「バックアップデータの保存容量(ストレージ容量)」に対してのみ課金されます。
発生コストはストレージ単価のみ(安価)
バックアップデータは通常のFirestoreアクティブストレージ(東京リージョンで約 $0.18/GB)とは別の領域に保存されるため、単価が安く設定されています。
Read(読み取り)とリストアは0円
通常のManaged Export(エクスポート機能)と異なり、バックアップ取得時に「全ドキュメントを読み取る」という処理が発生しません。そのため、数百万・数千万件のデータがあっても、Firestoreの読み取り料金は一切発生しません。
バックアップから新しいデータベースへ復元(リストア)する際も、データの読み書き料金はかかりません。
具体的な料金の目安(東京リージョン:asia-northeast1)の場合
現在の一般的な料金ベース(※米国ドル)での試算です。
- バックアップストレージ料金: 約 $0.024 / 1 GBあたり(月額)]
- リストア(復元)処理料金: 無料(ストレージ料金のみ)
例えば、Firestore全体のデータ容量が 10 GB のシステムで、「毎日バックアップを取得し、7日間保持(最大7世代)」するスケジュールを組んだ場合:
- 1回分のバックアップサイズ = 約10 GB
- 7日間保持されるため、常時蓄積される容量 = 10 GB × 7日 = 70 GB
- 月額コストの目安: 70 GB × $0.024 = 約 $1.68 / 月(日本円で約250円前後)
(補足)Firestore全体のデータ容量が 10 GBだと、アクティブユーザーが数万人〜数十万人規模の中~大規模のアプリ想定になります。
データ容量そのものが大きい(数百GB〜数TB規模)システムの場合は保持日数(世代数)に応じてそれなりのストレージ費用になります。
少〜中規模なシステムであれば、驚くほど低コスト(月数百円程度)で強固なデータ保護環境を手に入れることができます。
容量はどこで確認できるか?
現在使用しているシステムの確認は、届いた請求書を見るか、Google Cloudの「お支払いレポート」でサービスをFirestoreに絞り込み、SKUごとの「使用量(GiB)」を確認する方法があります。
ただし、プロジェクト作成直後や、データ量が極めて少ない場合は、お支払いレポートのサービス一覧に「Cloud Firestore」という項目自体が出現しないことがあります。
その場合は、Firestoreにまだほとんどデータが入っていない(安全な無料枠内である)証拠です。
どうしても正確な容量を知りたい場合は、GCPの「Cloud Monitoring」から Storage Size の指標を見ることで、数バイト単位の正確なデータ量が確認することができます。
エミュレーターでは使えない
Managed Backupsは、Firebase Local Emulator Suite(ローカルエミュレーター環境)では使用できません。
ローカルエミュレーターは、アプリの挙動やセキュリティルールの検証、CIでのテストを目的に最適化された軽量なインメモリ動作(メモリ上でのデータ保持)であるため、クラウド側の「定期的なスケジュール処理」や「内蔵コールドストレージへの書き出し」といったインフラ機能はサポートされていません。
代わりとなるローカル環境のベストプラクティス
ローカル開発でテスト用データを保存・復元(バックアップのようなこと)をしたい場合は、エミュレーター起動時の 「Export/Import オプション」 を使用します。
エミュレーター終了時にデータをローカルのフォルダに書き出し、次回起動時にそのデータを自動で読み込ませることができます。
# エミュレーター終了時に `./emulator_data` フォルダへ自動エクスポート
firebase emulators:start --export-on-exit=./emulator_data
# 次回起動時、保存したデータを自動インポートして再開
firebase emulators:start --import=./emulator_dataManaged Buckupの設定方法
Managed Buckupの設定には以下の2種類があります。
- gcloudを使った「コマンドライン」からの実行
- Google Cloudのダッシュボードからの設定
※ダッシュボードはFirebaseのものではありません。Google Cloudの中のFiresotreで行います。
ここではより簡易的なダッシュボードからの設定方法を紹介します。
「Google Cloud > Firestore > 障害復旧」を開きます。

設定の「編集」アイコンをクリックします。
パネルが開くので「毎日」または「毎週」にチェックを入れ、保持期間を指定し、「保存」をクリックします。

「スケジュールバックアップ」に指定した内容が表示されます。

以上で、Managed Buckupの設定は完了です。
スケジュールや保持期間を変更したいときは、再度「編集」から設定できます。

