FirebaseやGoogle Cloudでアプリを開発する際、一時的なセッションやログデータの管理はどうしていますか?わざわざ削除用のCloud Functionsを実装するのは、少し面倒ですよね。
そこで活用したいのが、Google CloudのFirestoreに標準搭載されている「有効期間(TTL)」設定です。
なんと、ドキュメントに有効期限を埋め込んでおくだけで、あとはFirestoreがバックグラウンドで勝手にデータを消去してくれます。
本記事では、有効期間(TTL)とは何かや、初心者の方でもすぐに実践できるよう、具体的なコンソールでの設定手順を実例付きで詳しく解説しています。
有効期間(TTL)とは何か?
Google CloudのCloud Firestoreの「有効期間(TTL: Time To Live)」とは、指定した日時が過ぎたドキュメントを自動的にバックグラウンドで削除してくれる機能です。
これまで、古いデータを削除するにはCloud Functionsなどでスケジュール実行するバッチ処理を自前で実装する必要がありましたが、TTLを使えばFirestoreの設定だけで完結することができます。
有効期間(TTL)の仕組み
TTLは、ドキュメント内の「Timestamp(タイムスタンプ)型のフィールド」を監視することで動作します。
「このコレクションのこのフィールドを有効期限として使う」というルール(TTLポリシー)を定義します。
Firestoreはバックグラウンドで常にドキュメントをチェックし、指定されたフィールドの日時が現在時刻を過ぎている(過去になっている)場合、そのドキュメントを自動的に削除します。
有効期限が切れたドキュメントは即座に消えるとは限りません。
削除はバックグラウンドで一括処理(システムのリソース状況に応じて実行)されるため、期限切れから実際に削除されるまでに数日(通常は最大72時間以内)かかることがあります。
TTLによる処理は無料
TTLのバックグラウンドプロセスによるドキュメントの削除(Delete操作)に対して、Firestoreの書き込み/削除料金は発生しません。
不要になったデータが自動で消えるため、Firestoreのストレージ保存料金(GB単位)を抑えることができます。
どういったデータに使うか?
TTLは、「一定期間が過ぎたら不要になるデータ」の管理に最適です。ストレージ容量の節約や、データクレンジングの自動化に役立ちます。
- セッションデータ・認証トークンの管理
ユーザーのログインセッションや、一時的なワンタイムパスワード(OTP)の有効期限切れによる自動破棄。 - アクティビティログ・一時的な履歴
「過去30日間の操作ログ」など、直近のものだけ残して古いものは自動で消したい場合。 - 一時的なURLや共有リンク
「24時間だけ有効な共有コード」などの管理。 - キャッシュデータ
外部APIから取得したデータの有効期限を設定し、古くなったら自動消去して再取得を促す。
TTLの使い方
TTLを利用する手順は大きく分けて「アプリ側でのデータ準備」と「GCPコンソールでのポリシー設定」の2ステップです。
【STEP1】ドキュメントに「有効期限」のフィールドを持たせる
TTLによる自動削除を行いたいドキュメントの中に、TTLのトリガーとなるTimestamp型のフィールドを作成します。
フィールド名は任意です。例えば以下のようなものが一般的です。
- epireAt
- ttlExpireAt
- ttl
- deletedAt
【Next.js (Firebase SDK) でのデータ追加例】
import { collection, addDoc, Timestamp } from "firebase/firestore";
import { db } from "./firebase"; // 初期化済みのdb
async function createTemporaryData() {
// 現在時刻から24時間後の日時を計算
const expireDate = new Date();
expireDate.setHours(expireDate.getHours() + 24);
await addDoc(collection(db, "temporary_tokens"), {
token: "abcde12345",
createdAt: Timestamp.now(),
// このフィールドをTTLの基準にする
ttlExpireAt: Timestamp.fromDate(expireDate),
});
}【STEP2】Google Cloud コンソールでTTLポリシーを設定する
Google Cloud コンソールのFirestoreを開きます。
左メニューの「有効期間(TTL)」を選択します。

「ポリシーを作成」をクリックします。

削除したいフィールドを持つコレクションとトリガーとなるフィールドをプルダウンから選択します。

トリガーとなるフィールドは、現在Firestore上にあるフィールドの中からしか選択できません。あらかじめ、対象のフィールドを持つデータをFirestoreに保存しておく必要があります。
「作成」をクリックします。

指定した内容でビルドが開始します。

※設定が反映され、バックグラウンドでのクレンジングが開始されるまで、最大で数時間かかる場合があります。
以上で、TTLの設定は完了です。
これで、指定した時刻を過ぎると72時間(3日以内に)対象のドキュメントが削除されます。

