Delete User Data 拡張機能を使用する

Delete User Data 拡張機能(delete-user-data)を使用すると、ユーザーが Firebase プロジェクトから削除されたときに、そのユーザーのデータを削除できます。この拡張機能は、Cloud Firestore、Realtime Database、Cloud Storage のいずれか、またはすべてからユーザーデータを削除するように構成できます。データを削除するための拡張機能の各トリガーは、ユーザーの UserId にキー付けされます。

この拡張機能は、ユーザーのプライバシーを尊重し、コンプライアンス要件を満たすために役立ちます。ただし、この拡張機能を使用しても、政府や業界の規制が必ず遵守されるわけではありません。

前提条件

  • ユーザーを管理するには Firebase Authentication を使用する必要があります。

  • この拡張機能では、Cloud FirestoreRealtime DatabaseCloud Storage のデータのみが削除されます。他の場所にユーザーデータを保存している場合は、ユーザーを削除する際に、その保存場所からもユーザーデータを削除する必要があります。

拡張機能をインストールする

Firebase 拡張機能のインストールの手順に沿って拡張機能をインストールします。簡単に説明すると、次のいずれかの方法でインストールします。

拡張機能のインストール中に、構成パラメータの指定を求めるプロンプトが表示されます。次のパラメータを指定します。

  • Cloud Functions のロケーション:

    この拡張機能用に作成された関数をデプロイするロケーションを選択します。通常はデータベースに近いロケーションを選択します。ロケーションの選択については、ロケーション選択ガイドをご覧ください。

  • Cloud Firestore のパス:

    ユーザーデータのある Cloud Firestore インスタンスのパスを指定します。Cloud Firestore を使用しない場合は空欄のままにしておきます。複数ある場合は、それぞれのフルパスをカンマで区切って入力します。削除済みユーザーのユーザー ID は {UID} で表すことができます。たとえば、usersadmins というコレクションがあり、各コレクションにドキュメント ID としてユーザー ID を使用するドキュメントがある場合は、「users/{UID},admins/{UID}」と入力します。

  • Cloud Firestore 削除モード:

    Cloud Firestore paths パラメータを使用する場合のみ)Cloud Firestore ドキュメントの削除方法を指定します。サブコレクション内のドキュメントも削除する場合は、このパラメータを recursive に設定します。

  • Realtime Database インスタンス:

    ユーザーデータを削除する Realtime Database インスタンスを指定します。

  • Realtime Database のロケーション:

    Realtime Database instance パラメータを指定した場合のみ)ユーザーデータを削除する Realtime Database のロケーションを指定します。

  • Realtime Database のパス:

    ユーザーデータのある Realtime Database インスタンスのパスを指定します。Realtime Database を使用しない場合は空欄のままにしておきます。複数ある場合は、それぞれのフルパスをカンマで区切って入力します。削除済みユーザーのユーザー ID は {UID} で表すことができます。例: users/{UID},admins/{UID}

  • Cloud Storage のパス:

    ユーザーデータを保存する Google Cloud Storage の場所を指定します。Cloud Storage を使用しない場合は空欄のままにしておきます。保存先の Storage バケットのファイルまたはディレクトリが複数ある場合は、それぞれのフルパスをカンマで区切って入力します。削除済みユーザーのユーザー ID は {UID} で表し、デフォルトの Storage バケットは {DEFAULT} で表します。

    ここに一連の例を示します。

    • {UID}-pic.png という命名スキームを使用してデフォルト バケット内のすべてのファイルを削除するには、「{DEFAULT}/{UID}-pic.png」と入力します。
    • 命名スキームが {UID}-logs.txtmy-app-logs という別のバケット内のファイルもすべて削除するには、「{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt」と入力します。
    • ユーザー ID のラベルが付いたディレクトリとそのファイル(media/{UID} など)をすべて削除するには、「{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt,{DEFAULT}/media/{UID}」と入力します。

削除対象のデータを検出する

この拡張機能には、削除対象のデータを検出するためにいくつかのメカニズムが用意されています。拡張機能でデータを削除するには、これらのメカニズムを明示的に構成する必要があります。この拡張機能では、指定されたメカニズムで削除するように明示的に構成されたデータのみが削除されます。

また、次のようにサービスによって動作が異なります。

  • Cloud Firestore: デフォルトでは、ドキュメントは浅い深度で削除されます(サブコレクションは削除されません)。ドキュメントのすべてのサブコレクションを再帰的に削除するには、Cloud Firestore 削除モードを recursive に設定します。
  • Realtime Database: 指定したノードのすべてのデータが削除されます。
  • ストレージ: ディレクトリ パスを指定すると、すべてのファイルとサブディレクトリが削除されます。

パスによる検出

Cloud Firestore、Realtime Database、Cloud Storage のパスを構成するときに、パスに UID 変数を定義できます。この変数は、認証されたユーザーの UID に置き換わります。ユーザーが削除されると、拡張機能は、指定されたパスにあり、その UID でキー付けされたすべてのデータを削除します。次に例を示します。

  • Cloud Firestore のパス: users/{UID},admins/{UID}
  • Realtime Database のパス: likes/{UID}
  • Cloud Storage のパス: {DEFAULT}/uploads/{UID},{DEFAULT}/avatars/{UID}.jpeg

自動検出(Cloud Firestore)

削除する Firestore ドキュメントを拡張機能で自動的に検出されるようにするには、Enable auto discovery 構成パラメータを「Yes」に設定します。

自動検出では、データベースを自動的に走査し、構成に応じて削除が必要なコレクションとドキュメントを検索します。拡張機能は、このようなコレクションとドキュメントを次の方法で識別します。

  1. まず、データベース内のすべてのルート コレクションを検索します。コレクション ID がユーザーの UID と一致する場合、コレクション全体を削除します(拡張機能の Cloud Firestore 削除モードの構成に応じて、削除は再帰的または浅い深度で実行されます)。
  2. コレクション ID が一致しない場合、ドキュメント ID がユーザーの UID と一致すれば、拡張機能はドキュメントを識別して削除しようとします。
  3. 最後に、ドキュメントごとに次の処理を行います。 a. 現在の検索深度(下記を参照)が構成済みの検索深度以下の場合、現在のドキュメントのすべてのサブコレクションに対して、この処理を繰り返します。 b. 検索フィールドが構成されている場合、拡張機能は、指定されたフィールドがユーザーの UID と一致するかどうかを確認します。一致するファイルが見つかった場合、そのドキュメントを削除します。

検索深度

この拡張機能では、検索深度を構成できます(デフォルト値は 3)。現在の検索深度が構成済みの検索深度以下の場合にのみ、走査が実行されます。現在の検索深度は、現在のコレクションまたはドキュメントの親コレクションの深度に基づきます。次に例を示します。

/users = 1
/users/<document-id> = 1
/users/<document-id>/comments = 2
/users/<document-id>/comments/<document-id> = 2

この拡張機能は、配列やマップに保存されている UID を自動的に削除しません。また、上の深度よりも深くネストされたサブコレクションに保存されているユーザー ID のデータも検索しません。