Chromeを使うなら、必ずServiceWorkersを無効化しよう

**2022/01/17追記：この方法では無効化できません。[【Chrome】ServiceWorkerを今度こそ決定的かつ完全に消去する](https://qiita.com/rana_kualu/items/eb81e7ad03257f6784da)を参照してください。**



[ServiceWorkers](https://w3c.github.io/ServiceWorker/)というAPIが存在します。
ブラウザをフルスクリーン表示したり、デスクトップにアイコンを作成したり、PUSH通知を行ったり、バックグラウンドでJavaScriptを動作させたりといった[機能](https://developers.google.com/web/fundamentals/primers/service-workers/?hl=ja)を提供します。[^1]

見てのとおり**ユーザには何一つ利のない**機能なので、必ず**無効化**しましょう。

なに、動かなくなるサイトがあって困る？
大丈夫。
ServiceWorkersがないと動かないサイトは、存在そのものが不要なサイトです。


# 手順

## PC版Chrome

### 無効化

URLに[chrome://flags/](chrome://flags/)と入力すると、全面英語の設定画面のようなものが出てきます。
最上部の検索欄に「Worker」および「PWA」「Progressive」と入力し、出てきた項目を全てDisabledに変更します。
右下あたりに「RELAUNCH NOW」というボタンが出てくるので、それを押してChromeを再起動したら無効化の完了です。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/26088/124981fe-5aeb-39ec-e658-5ed1d6683f31.png)
![02.png](https://qiita-image-store.s3.amazonaws.com/0/26088/edd93380-625e-77e0-e3cd-26ce86ff8176.png)
![03.png](https://qiita-image-store.s3.amazonaws.com/0/26088/416889da-d937-4e40-0c1b-a70d4c06b6f7.png)


### 侵入者の排除

せっかく無効化はしたのですが、それより前にインストールされてしまってたServiceWorkersは、なんと今後も変わらず動き続けてしまいます。
そのため、既存のServiceWorkersを削除しなければなりません。
まずF12なりなんなりを押して開発者ツールを起動します。
「Application」→「Service Workers」→「Service Workers from other domains」を選択します。
死ぬほど大量のService Workersに汚染されているので、ひたすら「Unregister」を連打して全てを消去しましょう。
一括削除する手段は用意されていません。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/26088/4cc1fa7c-7a63-cdf8-25c2-7e7c38f6b823.png)


### Youtubeが残る件

Google関連サイトのServiceWorkersは、無効化することができません。
たぶんハードコードされてる。
汚いなさすがGoogleきたない。


## Android版Chrome

最近のPCは処理能力に余裕があるので、こっそり裏でマイニングされてでもないかぎりServiceWorkersが動いてること自体気付かないかもしれません。
直接的にバッテリーとギガが減る被害の出るAndroidのほうが、より削除の重要性は高いです。

### 無効化

PC版とだいたい同じです。
[chrome://flags/](chrome://flags/)にアクセスし、「Worker」「PWA」の全項目をDisabledにしましょう。
「Progiressive」は現在のAndroid用Chromeには無いようです。

![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/26088/2ed43a05-9c31-660b-8fc1-0f506fd6533c.jpeg)
![12.jpg](https://qiita-image-store.s3.amazonaws.com/0/26088/845f7d79-2d66-3ff6-5790-8b8de3d07f16.jpeg)


### 侵入者の排除

なんとAndroid版Chromeは、それ単体では開発者ツールを開くことができません。
PCから作業する必要があります。
[AndroidのChromeで開発者ツールを使う方法](https://qiita.com/hojishi/items/12b726f8b02ef3d713e4)などを参考に、操作を行いましょう。

・PCに[USBドライバ](https://developer.android.com/studio/run/oem-usb#InstallingDriver)をインストールする。
・Androidで、「設定」→「開発者向けオプション」→「USBデバッグ」をオンにする。
・スマホをUSBケーブルでPCに繋ぐ。アクセス許可アラートが出るので許可する。
![13.jpg](https://qiita-image-store.s3.amazonaws.com/0/26088/373189c0-1e28-d6bf-1981-a80064b1bf89.jpeg)
・PCで[chrome://inspect/#devices](chrome://inspect/#devices)にアクセスする。
・すると接続されたAndroid版Chromeが表示され、そこから開発者ツールにアクセスすることができる。
・あとはPC同様に不要なServiceWorkersを削除する。

![21.png](https://qiita-image-store.s3.amazonaws.com/0/26088/14e12769-40ec-e62d-6211-09062b98bcb3.png)


…あれ？Android版Chromeが出てこないんだけど？
なしてだべさ。

# その他

## 本当に効いてるのか？

数日たって開発者ツールを開いてみたら、削除したはずのServiceWorkers共がしれっと再侵入していた。

![31.png](https://qiita-image-store.s3.amazonaws.com/0/26088/7ad31935-4108-2a17-5ba7-cf2e4b7f01c3.png)

いったいどういうこと？
`chrome://flags/`の設定、本当に効いてるの？？？


# おわりに

[俺のChrome - クソうざい通知と購読を葬る](https://qiita.com/Ogaaaan/items/e9c820ca7115ca5ecf79)という投稿で知ったのですが、タイトルがわかりにくかったのと、スマホでののやり方が書いてなかったのを追加してリライトしたものです。

ただ、追加したと言いつつスマホ版は結局できてなかったり、PC版も再侵入されてるので結局有効なのかどうかわからないとかいう残念な結果に。
誰か原因と理由を教えてください。


[^1]: ServiceWorkers以外の話も混ざっているが、まあ同じようなものだ。