これはいつ現れる?(そしてなぜ不意打ちを食らうのか)
タイミングはいつも同じで、いつも痛い:アプリを完成させ、App Storeの審査に提出し… そしてルール5.1.1でリジェクトされる。不意打ちを食らう理由は、AIが構築するとき、アカウントを作成してアプリを使うフローに集中するからだ — 削除するフローはほとんど考えない。これは法律とAppleの要件であり、公開前にあなた自身が明示的に指示しなければならない。
あなたを二度落とす罠
正しいやり方 · ソフトデリート + 匿名化
ここに、本当に機能するバランスがある。実際の技術的問題はこうだ:ユーザーを「乱暴に」削除すると、データベースが壊れる(注文やコメントなどが、もう存在しないユーザーを指したままになる)。プロフェッショナルな解決策:個人データは本当に削除する(名前、メール、写真、電話番号)が、リレーションを壊さないよう、その場所に匿名の抜け殻を残す。個人的なものは永遠に消え去り、データベースの整合性は保たれる。
Appleと法律が求める3つのピース
- 「アカウントを削除」ボタン が見つけやすく、アプリ内にある(通常は設定内)。
- 個人データの本当の削除:名前、メール、写真、電話番号 — 不可逆的に匿名化する。
- 認証システムでも削除(あなたのユーザーテーブルだけでなく、Supabase Auth / ログインプロバイダーでも)。
マスタープロンプト · あなたのAIに頼もう
このプロンプトは、データベースを壊さずにルールと法律を守るために必要なすべてをAIに頼むものだ。コピーして貼り付けよう:
私のアプリのアカウント削除を、Appleのルール5.1.1とGDPR/CCPAに準拠して実装して。私のスタック:[スタックを記入、例:Supabase + Next.js]。 1. 設定内に「アカウントを削除」ボタンを、見つけやすく作って。 2. 削除前に、明確な確認(これは不可逆)を表示し、必要なら本人確認(メール/電話へのコード)を求めて。 3. 個人データ(名前、メール、写真、電話番号)を不可逆的にANONYMIZE(匿名化)するSOFT DELETEを実行して。隠すのではなく、匿名の値(例:「削除済みユーザー」)またはNULLに置き換えて。 4. 外部キーを壊さないよう抜け殻を残して(その人の注文/コメントが落ちないように)。 5. 認証システムのアイデンティティも削除して(例:Supabase Authのadmin deleteUser)、私のテーブルだけでなく。 6. ユーザーがアクティブなSUBSCRIPTION(サブスク)を持っている場合、削除前に通知し、課金を続けず、かつ法律が保存を義務づける請求記録も失わないよう、キャンセルの扱い方を教えて。 7. 監査ログに、アカウントが削除されたこと(個人データなし)を記録して。法律が証明を求めた場合に備えて。 マイグレーション、匿名化関数、ボタンのコンポーネントを出し、各パートが何をするかシンプルなステップで説明して。
ほとんど誰も扱わないケース · サブスクリプション
正しくできたか確認する方法
- ボタンがアプリ内で簡単に見つかる(外部Webに隠れていない)。
- 削除後、個人データがデータベースにもう存在しない(手動で確認する)。
- ユーザーが認証システムからも消える(再ログインできない)。
- 残したもの(注文、コメント)が何も壊れていない — 匿名の作成者のまま残っている。
- サブスクリプションがあった場合、キャンセルされ、個人データなしの会計記録が残っている。