Chrome DevTools の便利な機能を何もわかっていなかった（Network編）

## はじめに

毎日のようにChromeを使って開発をしているものの
しっかりとDevToolsのドキュメントを読むこともなかったので
改めて読んでみて気づいたことを忘れないようにするための記事です。

「Network」の項目からいくつかピックアップします。
https://developers.google.com/web/tools/chrome-devtools/network/

※日本語訳はありませんでした

## 活用できていなかった機能

### 1. コマンドメニュー

（いきなりネットワークに直結しない機能ですが先に覚えると便利でした）

> Press Control+Shift+P or Command+Shift+P (Mac) to open the Command Menu.

入力からインクリメンタルにコマンドを検索して実行できます。
これによって個々のショートカットがわからずとも、マウスでポチポチせずとも色々やれます。

たとえばキャッシュを無効にしたりだとか。
![cache.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/7d873733-c180-a980-d60b-b8d5d62efe3b.png)
「>」を「?」に変更すると、[他にも色々できるらしいこと](https://developers.google.com/web/tools/chrome-devtools/command-menu)がわかります。

### 2. 特定のリクエストをブロック

前述のコマンドメニューで「Show Request Blocking」を選択します。
登録した文字列にマッチするリソースへのリクエストをブロックします。

たとえば「*.css」を登録して機能を有効化することで、css読み込みをブロックしてみます。
![disablecss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/8d0423d6-fde3-7713-c95f-4a6a3012b32a.png)
本来あるべきスタイルシートが読み込まれず、レイアウト崩れが起きることがわかります。
異常系の確認や「このファイルそもそも必要…？」という疑問をざっくり確認するのに役立ちます。

ちなみに何らかの機能で制限をかけると、Networkタブに「:warning:」が表示されるようです。
![network_warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/012d2c06-05ff-2c76-a3c0-8c01873ad019.png)
Network Throttlingの設定をしたときにも表示されていました。

### 3. リクエストをクリップボードにコピー

コードを変更しながらリクエストを繰り返していると
「これcurlで黒い画面からやった方が早いのでは…？」というときがあります。
とはいえUAやCookieなどをcurlに反映し、同じ状況を再現するのはかなり面倒です。

そんなときに「Copy as cURL」を使います。
![copyascurl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/51d7c08b-c61c-73ef-4fb3-82e341dd7214.png)
ブラウザと同等のリクエストをクリップボードにコピーできます。

```bash:curlとしてコピーした内容
curl 'https://www.homes.co.jp/renovation/case/list/' -H 'authority: www.homes.co.jp' ~ その他もろもろ ~ --compressed
```

JavaScriptで使用する`fetch`や、HTTP ARchive（HAR）としてコピーすることもできるようです。

### 4. ネットワークログに表示するカラムのカスタム

↓このあたりのお話です。
![column.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/2ae123fe-3c40-ca08-ffcb-63628d308610.png)

右クリックすると他にもMethod、Protocol、Domainなど見えると嬉しいカラムがあります。
さらにRequest Headersも指定できるため、「このリソースキャッシュされるの？」とか調べてるときに便利です。
![cache.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/9b751038-555b-4e17-2707-aa3fcef2baf9.png)

### 5. Waterfallカラムのソート

ネットワークログのヘッダではカラムの表示/非表示だけではなくソートの制御ができます。

Waterfallカラムは（おそらく）デフォルトでStart Timeでのソートがされており
パッと見でタイムラインらしい見え方がしています。

たとえば「Total Duration」にソートを変更すると
どのリソースがボトルネックなのかが読み取りやすくなります。 ※[ソートごとの解説](https://developers.google.com/web/tools/chrome-devtools/network/reference#sort-by-activity)
![waterfall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/35f2987e-91ca-3c9b-55ed-39bdcc91135c.png)
バーの色が淡い部分が待ち時間で濃い部分がダウンロード時間です。
「list/」はTTFBの改善の余地がありそうに見えます。

### 6. リクエスト間の依存関係の可視化

> To view the initiators and dependencies of a request, hold Shift and hover over the request in the Requests table. DevTools colors initiators green, and dependencies red.

ネットワークログ上のリクエスト上でShiftキーを押しながらマウスオーバーすると
リクエスト間の依存関係が色で可視化されます。
![depend.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43116/ae916bc7-e1d4-4d21-01c3-f423cb7ae118.png)

（2つ目の「conversion_async.js」にマウスオーバーしています）
この場合は`conversion.js` -> `conversion_async.js` -> `?random=~` と
リクエストが連鎖していくことがわかります。
TagManagerで埋めたタグ周りの調査が微妙に捗りそうです。

## まとめ

少しでも発見があったのであれば[公式ドキュメント](https://developers.google.com/web/tools/chrome-devtools)を読んでみてください。
DevToolsを勉強しているとチューニングすべき箇所も色々見えてくるのでオススメです。

他の〇〇編があるのかは未定です。