GDPRコンプライアンス
🔥 Vibe プロンプト
「アプリをGDPR準拠に:同意、データ削除、侵害通知、DPA。」
GDPR要件
| 条項 | 要件 | 実装 |
|------|------|------|
| 第5条 | 適法処理 | 同意チェックボックス |
| 第7条 | 同意条件 | 詳細オプトイン |
| 第15条 | アクセス権 | データエクスポートAPI |
| 第17条 | 削除権 | ユーザー削除API |
| 第20条 | データポータビリティ | JSONエクスポート |
| 第32条 | セキュリティ | 暗号化、アクセス制御 |
| 第33条 | 侵害通知 | 72時間通知システム |
同意実装
const consentTypes = {
necessary: { required: true, label: "Essential cookies" },
analytics: { required: false, label: "Analytics" },
marketing: { required: false, label: "Marketing" }
};
function saveConsent(preferences) {
localStorage.setItem('consent', JSON.stringify({
...preferences,
timestamp: new Date().toISOString()
}));
fetch('/api/consent', { method: 'POST', body: JSON.stringify(preferences) });
}
if (JSON.parse(localStorage.getItem('consent') || '{}').analytics) {
loadGoogleAnalytics();
}
削除権(第17条)
@app.route('/api/user/data', methods=['DELETE'])
@jwt_required
def delete_user_data():
user_id = get_jwt_identity()
db.execute("UPDATE users SET email = NULL, name = 'Deleted User' WHERE id = %s", (user_id,))
db.execute("DELETE FROM user_analytics WHERE user_id = %s", (user_id,))
db.execute("DELETE FROM sessions WHERE user_id = %s", (user_id,))
db.execute("INSERT INTO deletion_log (user_id, deleted_at) VALUES (%s, NOW())", (user_id,))
return jsonify({"message": "データ削除完了。監査ログは法的要件として保持。"})
DPIA
# DPIA: ユーザー分析システム
## リスク評価
| リスク | 可能性 | 影響 | 対策 |
|-------|--------|------|------|
| 再識別 | 低 | 高 | IP匿名化 |
| データ漏洩 | 低 | 中 | 暗号化 |
| 同意バイパス | 中 | 高 | 同意監査 |
## 対策
- IP匿名化
- 分析データにPIIなし
- トラッキング前に同意必須
- 14ヶ月最大保持
DPA(データ処理契約)
# DPA主要条項
1. 処理者義務
2. 副処理者(AWS, SendGrid, Stripe)
3. セキュリティ対策(AES-256, TLS 1.3, RBAC)
4. 侵害通知(48時間以内)
GDPRベストプラクティス
| プラクティス | 実装 | |-----------|------| | 法的根拠 | 同意、正当利益、契約 | | 同意の粒度 | 目的別トグル | | クッキーバナー | 非必須クッキーの前に | | データマップ | 何を、どこで、なぜ、いつまで | | DPO | データ保護責任者を任命 | | 侵害通知 | 72時間プロセス確立 | | データポータビリティ | JSON/CSVエクスポートAPI |
章のまとめ
- コアコンセプトと原理を理解
- 実装方法とテクニックを習得
- 一般的な問題と解決策に精通
- 実際のプロジェクトに適用可能
さらに読む
- 公式ドキュメントとAPIリファレンス
- GitHubのオープンソース例
- 技術書とオンラインコース
- コミュニティディスカッションと技術ブログ