Safari / ITPデバッグモードの使い方

#目次

 - [はじめに](#はじめに)
  - [デバッグモードで出来る事] (#デバッグモードで出来る事)
  - [環境](#環境)
  - [参考文献](#参考文献)
 - [デバッグモードの使い方](#デバッグモードの使い方)
  - [デバッグモードに変更](#デバッグモードに変更)
  - [ログの閲覧設定](#ログの閲覧設定)
  - [ログの読み方](#ログの読み方)
 - [テスト用トラッカー判定の設定](#テスト用トラッカー判定の設定)
  - [仕様/注意点](#仕様注意点)
  - [ターミナルにフルディスクアクセス権限を設定](#ターミナルにフルディスクアクセス権限を設定)
  - [テスト用トラッカー判定の設定作業](#テスト用トラッカー判定の設定作業)
 - [ITP検証におけるSafariとSafariTPの優劣](#itp検証におけるsafariとsafaritpの優劣)

##はじめに
本記事ではSafariに搭載されているITPデバッグモードの使い方を解説する。

###デバッグモードで出来る事


ITPデバッグモードを利用して主に以下の事が行える。

 - トラッカー判定されているドメインの確認
 - 任意のドメインをテスト用にトラッカー判定に設定


###環境
本記事執筆にあたっては通常のSafariではなく、Safari Technology Previewを使用した。
（通常のSafariでも可能なはずである。）

使用ブラウザ：Safari Technology Preview（Release 96 (Safari 13.1, WebKit 15609.1.9.7)）
仕様OS：macOS Catalina 10.15.2

※Safari Technology Previewとは
通常Safariに先んじて実装された新機能やUIなどを体験する事が出来るブラウザである。
特に開発者ツールの機能が通常のSafariより厚く提供されている。

[Safari Technology Preview（Apple公式）](https://developer.apple.com/safari/technology-preview/)

###参考文献
[ITPデバッグモード in Safari-TP（62）](https://webkit.org/blog/8387/itp-debug-mode-in-safari-technology-preview-62/)
[ITP2.3](https://webkit.org/blog/9521/intelligent-tracking-prevention-2-3/)
※どちらも[WebiKit](https://webkit.org/)公式リリース

その他参考にさせて頂いた文献は本記事文中でリンクさせて頂いております。
感謝申し上げます。

##デバッグモードの使い方

####デバッグモードに変更
開発タブから「Enable Intelligent Tracking Prevention Debug Mode」にチェック。
※Safari（日本語）だと「インテリジェントトラッキング防止機能のデバッグモードを有効にする」にチェック。

####ログの閲覧設定
デバッグモードON中はログにinfoレベルでITP関連の動きが表示される様になる。
該当のログには「ITPDebug」が含まれているので、grepすれば閲覧可能。

例）log stream -info | grep ITPDebug
※ターミナルではなくコンソールからの確認も可

####ログの読み方

```
#データが削除される場合。
About to remove data records for tracker.example, another-tracker.example.

#なんらかのドメインのCookieをブロックした時にトラッカー判定されたドメイン一覧が表示される。
About to block cookies in third-party contexts for: a-third-tracker.example.
```

この状態で広告が多そうなジャンルを中心にブラウジングしていると物の数分で数十ものドメインがトラッカー判定リストに加えられていく。

####トラッカー判定のリセット

リンゴマーク横のアプリ名からSafariTPの履歴を削除（Clear History）すれば、履歴、Cookie、その他のwebサイトデータ、ITPの情報がリセットされる。

これはiCloudを介して他のデバイスでも同期して削除される。

但し、**SafariについてはITPの情報はリセットされない。**
※子細は未検証

ITPデバッグモードでは履歴を削除しても、後述のトラッカー判定に設定したドメインの情報は維持される。


##テスト用トラッカー判定の設定

デバッグを目的として任意のドメインをトラッカー判定されている状態に設定ができる。
この設定はdefaultsコマンドを使って行う。

[defaultsコマンド参考](http://tukaikta.blog135.fc2.com/blog-entry-209.html)

####仕様/注意点

 - Mojave以降のMacでは一部のデータにアクセスするためには「フルディスクアクセス」権限が必要。
 - フルディスクアクセス権限はアプリケーションごとに設定されている。
 - Safariはデフォルトでフルディスクアクセス権限を持っている。
 - テスト用トラッカー判定の設定にはフルディスクアクセス権限が必要。
 - Safariはアプリが立ち上がる際に**のみ**テスト用トラッカー判定の設定を読み込む。
 - ターミナルはデフォルトではフルディスクアクセス権限を持っていない。

※全て検証済or公式文献の記載確認済み
フルディスクアクセス参考：[macOSユーザガイド/Macの「プライバシー」環境設定を変更する](https://support.apple.com/ja-jp/guide/mac-help/mh32356/mac)

上記の仕様を理解しないと挙動の確認に問題が生ずる場合がある。
例えば、**トラッカー判定の設定をしたあとにSafariを再起動せずに設定が反映されない**、などである。

####ターミナルにフルディスクアクセス権限を設定

環境設定 > セキュリティとプライバシー > プライバシータブ > フルディスクアクセス（リストから）

上記箇所からターミナルにチェックを入れる。
ターミナルが選択肢に無い場合は「+」ボタンで追加する。
※厳密に言えばデバッグモードの使い方ではないが併記する。
※Appleとしては必要時以外ターミナルがフルディスクアクセス権限を持つことを推奨していないはずなので、終わり次第権限を取り上げる事を推奨する。

####テスト用トラッカー判定の設定作業

```
#設定
defaults write com.apple.SafariTechnologyPreview ITPManualPrevalentResource "ドメイン名"

#確認
defaults read com.apple.SafariTechnologyPreview ITPManualPrevalentResource

#削除
defaults delete com.apple.SafariTechnologyPreview ITPManualPrevalentResource
```

「com.apple.SafariTechnologyPreview」がアプリ名で「ITPManualPrevalentResource」が設定項目にあたる。
当然Safariを使う場合アプリ名の部分は「Safari」である。

この設定問題なくされていれば、デバッグモードをONにした際に以下のログが出力される。

```
Did set "ドメイン名" as prevalent resource for the purposes of ITP Debug Mode.
```

##ITP検証におけるSafariとSafariTPの優劣

|項目|Safari|SafariTP|
|:-:|:-:|:-:|
|ユーザー環境との一致|○|△|
|ITP履歴のリセット|×|○|
|テスト用トラッカー判定|○|○|