Chromeを最適化するflagsリスト

ご存じの方も多いと思いますが、**Chromium系ブラウザ**では`ブラウザ名://flags`*（i.e. chrome://flags）*にて試験機能にアクセスでき、様々な機能を先取りして自分好みに最適化できます。
色々と有用な設定が多いので、私が設定している項目を備忘録的にまとめます。
参考にされる場合は自己責任でお願いします。

適当かつ勝手に解釈しているので、正確にはflagsページの説明を参照してください。

`Google chrome`では`chrome://about`にてブラウザの状態や設定を変更する`chrome URLs`の一覧にアクセスが可能です。
本記事でも各所に僕がよく使う`chrome://○○`（←なんて名前なのでしょうか）を記載していますので参考にして下さい。

トラブルの対処法も最後に記しています。

# 環境
`chrome://version`で詳細なバージョン情報が確認可能です。
**執筆時点の環境です。**

#### 追記
4/26、安定版が90となっています。Ver.92に対応しました。
8/3、安定版が92となっています。Ver.94に対応しました。

```bash:Windows
# Google Chrome
90.0.4430.11 (Official Build) dev （64 ビット） (cohort: Dev)
# OS
Windows 10 OS Version 2009 (Build 21327.1000)
```

```bash:Android
# Google Chrome
90.0.4430.11 (Official Build) dev （32 ビット）
# OS
Android 11; Pixel 4a (5G)
```

私は「先取り好き」の変態なのでデベロッパー版を愛用しています。
バージョンが違うと設定項目が存在しないことがありますが、基本的には共通です。

# パフォーマンス系
主にパフォーマンスを向上する設定です。
実際体感することは少ないですが、精神的快速が手に入ります。

## グラフィックス系
グラフィックス系を設定します。
パフォーマンスとエネルギー効率がトレードオフになる可能性が高いです。

### OS共通
WindowsでもAndroidでも設定可能な項目です。

#### Override software rendering list
```
chrome://flags/#ignore-gpu-blocklist
```
`enable`にすることで、GPUで処理しないとされている項目を無効化します。
結果として全てGPUで処理されるようになり、パフォーマンス向上が見込まれます。
モバイルではデフォルトのままが好ましいかもしれません。

#### GPU rasterization
```
chrome://flags/#enable-gpu-rasterization
```
`enable`にすることで、点と線の位置情報で構成されたデータを画像に変換する処理（ラスタライズ）にGPUを使用します。
最適化されたチップを用いることでパフォーマンス向上が見込まれます。

#### Zero-copy rasterizer
```
chrome://flags/#enable-zero-copy
```
`enable`にすることで、GPUが直接メモリに読み書きするようになります。
無駄な処理が最小化されパフォーマンス向上が見込まれます。

#### Skia API for compositing
```
chrome://flags/#enable-skia-renderer
```
`enable`にすることで、`OpenGL ES`の代わりにGoogleが開発している次世代レンダラーの`Skia`を使用します。
`Windows 7`以降および`Android 4.1`以降で有効だと思われます。
**`Ver.94`では削除されています。**

### Windows
Windowsでのみ設定可能な項目です。

#### #zero-copy-video-capture
```
chrome://flags/#zero-copy-video-capture
```
`enable`にすることで、カメラがGPUに最適化されたバッファを作成し、可能であればハードウェアエンコーダーがそのバッファを使用します。
**`Var.92では削除されています。`**

#### Choose ANGLE graphics backend
```
chrome://flags/#use-angle
```
`ANGLE`に使用するグラフィックスバックエンドを指定します。
ちなみに`ANGLE`とは`Almost Native Graphics Layer Engine`の略ですが、**Almost native**（笑）。
詳細は説明のとおりですが、`NVIDIA GPU`搭載であれば`OpenGL`にすることで、重たい処理を要求される場合にパフォーマンスが向上する**かもしれない**。かつ、もれなく消費電力及びメモリー使用量も増えるぞい！とのことです。
OpenGLにするとGPUのファンがガンガン回ります。

## その他
諸々のパフォーマンスを向上させる設定です。

#### Experimental QUIC protocol
```
chrome://flags/#enable-quic
```
`enable`にすることで、次世代の通信規格である`QUIC`を有効にします。
規格策定中ではありますが、徐々に広まりつつあります。
利用可能な中で最新の暗号化技術`TLSv1.3`前提で設計されていたり、ハンドシェイクが不要な`UDP`が用いられていたりと、是非利用したいプロトコルです。
特にネットワーク環境が悪い場合に恩恵が多いと思われます。

#### #dns-httpssvc
```
chrome://flags/#dns-httpssvc
```
`enable`にすることで、`QUIC`を優先的に利用**しようと**します。（あくまでTryさん）
`QUIC`は初回アクセス時にその対応が示されるので、最初のコネクションには使用されません。
例えば、あるサイトに初めてアクセスした際、最初にダウンロードされる`index.html`へのアクセスでは`QUIC`は適用されず（`index.html`のレスポンスヘッダに`QUIC`に対応していることが示されるので、ブラウザはそれを読み取り次のリクエストから`QUIC`を用いる）、`index.html`からリンクされている`script.js`や`style.css`など諸々のソースに`QUIC`が適用されます。
この設定を有効にすると`DNS`に`QUIC`への対応の如何を問い合わせ、対応していた場合に初回から`QUIC`でアクセスを**試行することがあります**。
また、`DNS`から`HTTPS`対応が示された場合にも接続を`HTTPS`にアップグレードすることがあります。
**Ver.92では削除されています。**

#### Parallel downloading
```
chrome://flags/#enable-parallel-downloading
```
`enable`にすることで、並列ダウンロードを有効にします。
大容量ファイルを複数ダウンロードする際に有効かと思われます。

#### #enable-heavy-ad-intervention
```
chrome://flags/#enable-heavy-ad-intervention
```
`enable`にすることで、デバイスのリソースを過剰に使用する広告（重たい広告）を無効にします。
**Ver.92で削除されました。**

#### Heavy ad privacy mitigations
```
chrome://flags/#heavy-ad-privacy-mitigations
```
**`disable`にすることで**、重たい広告のプライバシーへの介入を禁止します。
デフォルト値である`enable`だと介入が緩和されるそうです。

# セキュリティ系
セキュリティ（及びプライバシー保護）を向上する設定です。
基本的にGoogleが将来目指している理想像を先取りする形になります。
旧態依然としたサービスがブロックされるなど、正しく動作しない可能性もあります。

細かい説明は長くなるので省きました。
詳しく知りたい方は説明を読んだりググったりしてください。

変更後がデフォルト値と変わらないものもありますが、明示する意味で記載しています。

## OS共通

#### TLS 1.3 Early Data
```
chrome://flags/#enable-tls13-early-data
```
`enable`にすることで、`TLSv1.3`で利用可能な`Early data`を利用します。
対応したサーバーでは、利用可能な場合ハンドシェイクが省略されるので、読み込み速度が向上する可能性があります。

#### TLS Post-Quantum Confidentiality
```
chrome://flags/#post-quantum-cecpq2
```
`enable`にすることで、ゴリラみたいに強力な暗号で保護します。
量子コンピュータが登場した場合、昨今の一般的な暗号化技術は全て無効化されると言われていますが、`Post-quantum（量子の後の）`暗号化技術では量子コンピュータによる暗号解読攻撃に対して安全であると考えられている暗号アルゴリズムを使用します。
リソースを大量に消費してバッテリー持ちなどに悪影響を与えるかもしれません。

#### #legacy-tls-enforced
```
chrome://flags/#legacy-tls-enforced
```
`enable`にすることで、非推奨となった古い暗号化方式を無効にします。
**Ver.94では削除されています。**

#### #same-site-by-default-cookies
```
chrome://flags/#same-site-by-default-cookies
```
`enable`にすることでセキュリティが向上しますが、一部のサードパーティークッキーがブロックされるため正常に動作しないサイトが発生する可能性があります。
細かい説明は省きますが、要は**正しく設定されていない`Cookie`**をブロックします。
**Ver.94では削除されています。**

#### #cookies-without-same-site-must-be-secure
```
chrome://flags/#cookies-without-same-site-must-be-secure
```
`enable`にすることでセキュリティが向上します。
内容は上の項目と同じような感じで、上の項目が`enable`の場合にのみ効果を持ちます。
**Ver.94では削除されています。**

#### #schemeful-same-site
```
chrome://flags/#schemeful-same-site
```
`enable`にすることで、同一ドメインから異なるスキームで読み込まれた場合、異なるものとして扱われます。
（つまり**`https`**`://example.com`で**`http`**`://example.com/image.webp`を読み込もうとした場合に適用される）
**Ver.94では削除されています。**

#### #strict-origin-isolation
```
chrome://flags/#strict-origin-isolation
```
`enable`にすることで、`Site-isolation`を厳密に行います。
`Site-isolation`とは`Chrome`が行っている処理で、簡単に言うと、サイトごとに異なるプロセスを用いることでサイト間の干渉を防ごうとするものです。
同時にAとBのサイトを開いているときに、BがAで入力された内容を傍受できないようにしていると思えばよいと思います。
メモリ使用量とCPU使用率が増加するかもしれません。

#### #omnibox-default-typed-navigations-to-https
```
chrome://flags/#omnibox-default-typed-navigations-to-https
```
`enable`にすることで、`Omnibox`に入力されたドメインへの接続をデフォルトで`HTTPS`を用いて試行します。
`Omnibox`とはブラウザの上部にある**`URL`とかが表示されているバー**のことです。
**Ver.94では削除されています。**

#### #mixed-forms-disable-autofill
```
chrome://flags/#mixed-forms-disable-autofill
```
`enable`にすることで、`HTTP`と`HTTPS`が混在したコンテンツでの自動入力を無効にします。
**Ver.94では削除されています。**

#### #mixed-forms-interstitial
```
chrome://flags/#mixed-forms-interstitial
```
`enable`にすることで、`HTTP`と`HTTPS`が混在したフォームで全画面警告を表示します。
**Ver.94では削除されています。**

#### HTTPS-First Mode Setting

```
chrome://flags/#https-only-mode-setting
```
`enable`にすることで`HTTPS`を優先して使用するそうです。
説明を読む限りは`HTTPS優先の設定項目が追加される`とのことですが、当方環境では確認できません。

#### Strict Extension Isolation
```
chrome://flags/#strict-extension-isolation
```

`Site isolation`の一環で、タブごとのプロセスだけでなく拡張機能のプロセスも分離します。

## Android
`Android`でのみ設定可能な項目です。

#### #enable-site-isolation-for-password-sites
```
chrome://flags/#enable-site-isolation-for-password-sites
```
`enable`にすることでセキュリティが向上します。
前述の`Site-isolation`関連です。

#### #enable-site-per-process
```
chrome://flags/#enable-site-per-process
```
`enable`にすることでセキュリティが向上します。

#### #safety-check-android
```
chrome://flags/#safety-check-android
```
`enable`にすることで安全確認をしてくれます。
具体的にはパスワード漏洩チェックや更新の確認etc..だそうです。
Devチャンネルでは不要ですが、`#password-check`を有効化する必要があります。

#### #safe-browsing-enhanced-protection-android
```
chrome://flags/#safe-browsing-enhanced-protection-android
```
`enable`にすることで保護強化機能を使用します。
DevチャンネルではデフォルトでGUIからの操作も可能です。`(設定>プライバシーとセキュリティ>セーフブラウジング)`


# Advanced
端末によって動作が不安定になったり、表示が崩れたりします。

#### #enable-vulkan
```
chrome://flags/#enable-vulkan
```
次世代3DグラフィクスAPIの`Vulkan`を使用します。（川崎のバイクじゃないよ！）
対応している場合はパフォーマンス向上が見込まれますが、非対応の場合は画面が点滅したり、挙動が著しく緩慢になったりします。
仕様などを確認して慎重に導入してください。
ちなみに`Pixel`は全シリーズ対応しています。

#### #enable-force-dark
```
chrome://flags/#enable-force-dark
```
Webコンテンツに対して`ダークモード`を強制します。
有機ELディスプレイでは消費電力が抑えられるなどメリットも多いですが、非常に見にくくなるコンテンツも多々あります。
また、Webコンテンツ側でダークモードに対応している場合に、提供されたCSSが適用されない不具合もあります。
「百聞は一見に如かず」ですので試してみるとよいと思いますが、僕は`Default`*(Disable)*にしています。（なんたってものすごく見にくいからね！）
**Ver.92では削除され、デフォルトでイイ感じになりました。**

#### Change web-facing behaviors that prevent origin-level isolation
```
chrome://flags/#isolation-by-default
```
セキュリティやプライバシー保護のためGoogleの理想とするオリジン分離を実現するそうです。
ただ、理想と現実はかけ離れており正常に利用できないことが多々あります。

# 正しく起動しなくなった場合
`起動しないンゴwww`となった時の対処法です。
特にGPU系をいじった場合に陥ることがあるかもしれません。

オプションで拡張機能をリセットして起動し、設定画面から問題のものを変更します。

まず`Chrome`がインストールされている場所に移動します。
コマンドプロンプトを開いて以下のように入力します。

```shell:移動
#Chrome
cd C:\Program Files\Google\Chrome\Application
#Chrome Dev
cd C:\Program Files\Google\Chrome Dev\Application
```

コマンドプロンプトにて、試験機能を全て無効にするオプションを付与して起動します。

```shell:起動
#使うツール次第で頭に付けるものを変えてください。
 .\chrome.exe --no-experiments
 chrome.exe --no-experiments
```

無事起動したら、拡張機能を開いて問題のものを無効にします。

# 最後に
かなり頻繁に項目が入れ替わりますし、DevチャンネルだけでStable版では存在しないなど、404な可能性もあります。
そして、参考にされる場合は自己責任でお願いします。

結局のところ、**デフォルトが一番**なのですが、弄りたくて仕方のない変態さんは楽しめると思います。
そんな皆様のお役に立てれば幸いです。