Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravelにはdeleted_atがありますけど?

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for kubotak kubotak
February 25, 2026

 Laravelにはdeleted_atがありますけど?

PHPerTeaNight#33-削除フラグ

Avatar for kubotak

kubotak

February 25, 2026
Tweet

More Decks by kubotak

Other Decks in Programming

Transcript

  1. Copyright© M&Aクラウド 1. データ抽出でのうっかりミス • LaravelのEloquentは⾃動でWHERE deleted_at IS NULLを付与してくれる •

    しかし⽣SQL‧バッチ処理‧BIツール‧データ分析ではこの⾃動フィルタが効か ない • 「退会済みユーザーのデータを含めて集計してしまった」事故が起こりうる
  2. Copyright© M&Aクラウド 3. DBパフォーマンスの問題 • カーディナリティ = カラム値の「ユニークさ」の度合い • deleted_atは⼤半がNULL(99%以上がアクティブなレコード)→

    極めて低い カーディナリティ • MySQLのオプティマイザは低カーディナリティのインデックスを無視することが ある
  3. Copyright© M&Aクラウド 3. DBパフォーマンスの問題 バッファプールの浪費 • InnoDB はよく使うデータページをメモリ 上のバッファプールにキャッシュする •

    論理削除されたレコードも物理的にはテー ブルに残るため、同じデータページに削除 済み‧未削除のレコードが混在する • 結果、削除済みレコードまでバッファプー ルに載ってしまい、本当に必要なデータの キャッシュヒット率が低下する
  4. Copyright© M&Aクラウド コンプライアンス(GDPR / 個⼈情報保護法) • ⼀般データ保護規則(GDPR) 第17条「忘れられる権利(Right to Erasure)」

    で は、個⼈データの削除を請求された場合、不当な遅延なく消去する義務がある • 論理削除(deleted_atをセット)だけではGDPR上の「消去」とみなされない可 能性がある ◦ DBにデータが残っている = 個⼈データを保持している • 対応パターン: ◦ 物理削除 + バックアップからも⼀定期間で消去 ◦ 個⼈データの匿名化(email = '[email protected]') ◦ 暗号化キーの破棄による暗号学的消去(Crypto-shredding) https://www.ppc.go.jp/files/pdf/gdpr-provisions-ja.pdf
  5. Copyright© M&Aクラウド パターン1: アーカイブテーブルへの退避 メリット: • 本テーブルのパフォーマンスが劣化しない • 復旧も可能(アーカイブから本テーブルに戻す) •

    集計時に削除済みデータが混⼊するリスクがない • ドメインモデルとして「削除済み」が明⽰的に表現される デメリット: • スキーマ変更時にアーカイブテーブルも同期が必要 • 参照整合性の管理が複雑になる
  6. Copyright© M&Aクラウド パターン2: 状態カラムの導⼊ メリット: • 「なぜ無効化されたか」が明確 • ステータスごとの集計やフィルタリングが容易 •

    ビジネスロジックとして表現⼒が⾼い デメリット: • LaravelのSoftDeletesの恩恵(⾃動フィルタ等)が使えない • グローバルスコープを⾃前で実装する必要がある • いつステータスが更新されたか、という情報が失われる ◦ status_updated_atとか‧‧‧???
  7. Copyright© M&Aクラウド パターン3: 物理削除 + 監査ログ メリット: • 本テーブルはクリーンな状態を維持 •

    「誰が‧いつ‧何を削除したか」の追跡が可能 • GDPR対応の設計がしやすい(物理削除 + ログ匿名化/保持期限管理) デメリット: • 復旧がやや⼿間(ログからリストアするロジックが必要) • ログテーブル⾃体のデータ量管理が必要
  8. Copyright© M&Aクラウド パターン4: イベントソーシング メリット: • 完全な変更履歴 • 削除の取り消しが⾃然に実現できる デメリット:

    • 学習コスト‧実装コストが⾼い • 既存システムへの導⼊はハードルが⾼い ◦ そもそもPHPで実装するの???^^????
  9. Copyright© M&Aクラウド 総括 • 論理削除は「とりあえず」で使いがちだが、多くの場合で問題を先送り にしているだけ • 削除の要件を明確にしてから⼿法を選ぶべき ◦ なぜ削除するのか?

    ◦ 復旧は必要か?期間は? ◦ コンプライアンス要件は? ◦ データ量の⾒通しは? • LaravelにSoftDeletesがあるからといって、思考停⽌で使わない • 適切な⼿法を選択し、将来のメンテナンスコストを下げよう