GUIDE

Firestore で「誰がデータを変更したか」を記録・確認する3つの方法

「このドキュメント、昨日と値が違う。誰が変えた?」— Firestore には変更履歴を見る画面がなく、既定では誰が何を変更したかはどこにも残りません。 この記事では、変更の追跡を後付けする3つの方法を、それぞれの限界と一緒に解説します。

方法1: Cloud Audit Logs(公式・インフラ寄り)

Google Cloud の監査ログ機能で、Firestore の「データアクセス監査ログ」を有効化すると 書き込み API の呼び出しが Cloud Logging に記録されます。

# 有効化: Google Cloud コンソール → IAM と管理 → 監査ログ
# → Firestore/Datastore API → 「データ書き込み」にチェック

# ログの確認(gcloud)
gcloud logging read \
  'protoPayload.serviceName="firestore.googleapis.com"
   AND protoPayload.methodName:"Write"' \
  --limit=20 --format=json

本格的な監査証跡としてはこれが正解ですが、制約があります。

  • 操作者はIAMプリンシパル単位 — アプリ経由の書き込みは全部「同じサービスアカウント」に見えます。「チームの誰か」までは特定できないケースが多い
  • ログの読み解きに Cloud Logging のクエリ知識が必要。長期保存や集計には BigQuery シンクの設定も
  • データ書き込みログは従量課金の対象で、書き込みが多いと無視できない量になります
  • 事故の前に有効化しておく必要があります(既定はオフ)

方法2: アプリ側で updatedBy を記録する(定番の設計)

アプリからの書き込みに、変更者と時刻を必ず埋め込む設計です。

await docRef.update({
  ...changes,
  updatedBy: currentUser.uid,
  updatedAt: FieldValue.serverTimestamp(),
});

// より厳密に: サブコレクションに変更履歴を残す
await docRef.collection("_history").add({
  changedBy: currentUser.uid,
  changedAt: FieldValue.serverTimestamp(),
  before: pick(prevData, changedKeys),
  after: pick(newData, changedKeys),
});
  • アプリのユーザー単位で追跡でき、UI にも「最終更新者」を出せる
  • 限界: この規約を通らない書き込み —コンソールや GUI ツールからの手動修正・運用スクリプト — は記録されません。 そして実務では、その「手動修正」こそ一番追跡したい変更です

方法3: 手動オペレーションをツール側で記録する(Firescope の共有ログ)

方法2の穴(手動オペレーション)を埋めるのが、筆者が開発している Firescope(Firestore GUI クライアント)のアプローチです。 Firescope 経由のすべての書き込みは自動で操作ログに記録され、共有ログを有効にすると「誰が・いつ・何を」がチーム全員で見られます。

  • 操作者名・操作種別・対象パス・成否・所要時間を記録(ドキュメントの値は記録しません)
  • 保存先はあなた自身の Firestore(専用コレクション)。外部サーバーへの送信はなく、 データ主権が手元に残ります
  • ログは30日で自動削除。日付別タイムライン・操作者/種別/期間フィルタで確認できます
  • 設定は接続を右クリック →「共有ログを記録」にチェックするだけ
共有ログ: 誰が・いつ・何をしたかの日付別タイムライン
共有ログ: 誰が・いつ・何をしたかの日付別タイムライン

まとめ: 3層で「誰が変えたか」を埋める

  • コンプライアンス目的の監査証跡 → Cloud Audit Logs(改ざん耐性が必要ならこれ一択)
  • アプリ利用者の変更追跡 → updatedBy / _history をアプリの設計に組み込む
  • 運用チームの手動オペレーション → 操作ログが自動で残る GUI(Firescope)を使う

それぞれ守備範囲が違うので、置き換えではなく組み合わせて使うのが実務的な正解です。

14日間、全機能を無料で試す

手動オペレーションの「誰が・いつ・何を」を自動で記録。14日間すべての機能を無料で試せます。

Firescope をダウンロード(Mac / Windows)