プライバシーをプロダクトに組み込むための観点、手法を開発ステップごとに解説。
0:00 – Intro
- プライバシーは単なるバズワードではなく、誰もがデータを注意深く尊重して扱われるべき
- Steve Jobs の定義:人々が何にサインアップしているかを平易な言葉で繰り返し理解できること → 人々がデータに対して正しい選択ができるようになる
- 人々の意図に対する一貫性をためつためにできること:尋ねること
- プライバシーの 3 つの重要な概念:人々(People)、データ処理の影響(Data)、情報の文脈(Context)
- Apple のプライバシー原則:data minimization, on-device processing, transparency and control, security protections
0:38 – How does Apple think of privacy?
- People:プライバシーとは人々がテクノロジーとどのように相互作用し、それがどのように影響するか
- Data:データ処理の影響:アプリを使用する人々について知っていることを何に使用するか
- Context:情報の文脈、特に期待と好みを考慮する必要がある
- 人々のデータを委託された際に、その文脈を尊重すること
- データを使って「何ができるか」ではなく、ユーザー利益のために「何をすべきか」を問うこと
- データ最小化、オンデバイス処理、透明性と制御、セキュリティ保護の 4 つの柱
- ソフトウェア開発のライフサイクル:計画→設計→開発→テスト→展開
3:47 – Planning (計画)
- プライバシー保証(privacy assurances)を定義して、アプリのプライバシーストーリーを書き始める
- プライバシーは開発の最初から組み込む必要があり、後から追加するのは困難
- Data minimization: 人々の期待に合わせるために必要最低限のデータのみを使用
- Strong defaults: 人々のプライバシー選択について最小限の仮定から始める
- e.g. 近くの場所を検索するときのデフォルト→現在地は保存されない
- On-device processing: データが文脈を越えてデバイス→サーバー、アプリ間などの境界を越える際の必要性を慎重に検討
- Transparency and control: データの使用方法について期待を設定し、カスタマイズオプションを提供
- e.g. 「アップロードした写真はAI機能改善目的にopt-inした場合のみ利用される」
- Security protections: 技術的制御でプライバシーをサポート
- e.g. end-to-end encryption
7:13 – Design (設計)
- 優れたデザインにより、人々とコミュニケーションし、教育することができる
- Proactive expectation setting (積極的に期待を設定): 起動時に提示し、アプリが収集するデータや使用方法について、人々が不意を突かれることがないようにする
- Clear state changes: プライバシーに影響するデータフローの変更を理解できるようにする
- Meaningful and contextual choices: データに関する選択は意味があり、文脈に適したものであるべき
- アクセスが必要になった際に初めて有効オプションを提示する
- 選択が最も関連性が高いときに表示し、適切なバランスの粒度を研究する
9:27 – Development : User interface
- デバイスリソースへのアクセスは、異なる文脈間で機密データを共有することを意味
- PhotosPicker: 写真ライブラリのプロンプトを完全に回避し、選択された写真のみを受け取る
- Location Button: ワンタップで現在位置を共有でき、ユーザーインタラクションでトリガーされることを検証
- Secure UI elements: 連絡先の out-of-process picker, UIPasteControl button, ハードウェアアクセサリの設定フロー
- 必要最小限のデータにアクセスするオプションを確認してから、より広範な API を使用
12:48 – Development : Client-server
- Advanced Data Protection: iCloud に保存されたデータの end-to-end 暗号化を有効化
- CloudKit: 暗号化されたデータ型を使用し、
encryptedValuesAPI でデータを取得・保存 - Homomorphic encryption: 暗号化されたペイロード上で計算を実行
- Private Information Retrieval (PIR): サーバーがクエリや結果を復号化された形式で利用できないようにする
- Private Access Tokens: 正当なデバイスからのリクエストを保証し、使用する人々を特定しない
- DeviceCheck: デバイス識別子を追跡せずに、特定のデバイスに最大 2 ビットの情報を関連付け
- AdAttributionKit: プライバシーを維持しながら広告キャンペーンの成功を測定
18:20 – Development : local resources
- Core ML: 機械学習モデルを完全にオンデバイスで実行、トレーニング、ファインチューニング
- App group containers: 異なるアプリ間でデータを共有し、そのデータを保護
- Process cleanup: macOS でアプリを終了する際にすべてのプロセスを終了
- Third-party SDKs: プライバシーマニフェストファイルで収集するデータと使用する API を記述
20:46 – Testing (テスト)
- プライバシー保証を提供することを確認するテストを構築することは重要なベストプラクティス
- Testing Pyramid
- Unit tests: 個々の関数を検証し、プライバシー制御をサポートするアプリロジックを検証
- Integration tests: 異なるコンポーネントが正しく連携することを確認し、システム間のデータフローを検証
- UI tests: ユーザー向けの動作を観察し、オンボーディングやプライバシー設定の変更などの一般的なシナリオを確認
- App Privacy Report: iOS 15.2 以降で、データアクセス、センサーアクセス、ネットワークアクティビティを確認
22:28 – Deployment (展開)
- Privacy nutrition labels: App Store がアプリのプライバシー慣行を理解するのに役立つ重要な方法
- アプリアップデートなしに更新が可能
- Privacy policy: 明確なプライバシーポリシーが必要
- Privacy manifests: アプリとすべてのサードパーティ SDK のプライバシーマニフェストを Xcode に含める
- Purpose strings: デバイスリソースにアクセスする権限プロンプトに必要 (Info.plist)
- Privacy Choices link: App Store のリストに含めて、データの管理について詳しく学べるようにする (Optional)