Chrome DevToolsのRecorderを試す

この投稿は [グレンジ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/grenge) の 1日目の記事です。

こんにちは、[株式会社グレンジ](https://www.grenge.co.jp/)でサーバーサイドエンジニアをしています。
新卒の島田（[@konnyaku256](https://twitter.com/konnyaku256)）です。

先日、次のようなツイートを見かけました。

https://twitter.com/ChromeDevTools/status/1455936412646199296

どうやら、近々ChromeのDevToolsにRecorderという新機能が追加され、ユーザーの操作を記録して、記録した操作の再生や測定などができるようになるようです。

Webサイトのデバッグ自動化などに応用が効きそうだなと思ったので、具体的にどういったことができるのか検証した結果を共有したいと思います。

# プレビューバージョンのChromeで新機能を試す
> This is a preview feature in Chrome 97. Our team is actively working on this feature and we are looking for your feedback for further enhancements.

RecorderはChrome 97以降で利用できるようです。 
プレビューバージョンのChrome（Chrome Dev や Chrome Canary）は次のリンクから入手して試すことができます。

https://www.google.com/chrome/dev/

https://www.google.com/chrome/canary/

今回の検証では `98.0.4737.0（Official Build）canary （x86_64）` を使用しました。

# Recoderの使い方
## Recorderタブを開く
F12キーなどを押して、DevTools（開発者ツール）を開きます。
右上のケバブメニュー（Customize and control DevTools） > More tools > Recorder の順でRecorderタブを開きます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/caf7ee4e-5010-7b66-7a16-c06c733d1687.png">

次のようなRecorderの画面が表示されます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/ba0d45fc-a71e-68cf-c49b-c829cce17c19.png">


## Recording（記録）
操作を記録するページを表示します。
記録を開始する前に、記録したいページを表示し、画面サイズを調整しておきます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/9311c7f6-eb8b-fb6e-27e5-400e47188b52.png">


Start new recording を押して、レコーディング名を設定します。
日本語も使えます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/79c6fded-d50c-43d6-4c02-6c59f65e471f.png">


Start a new recording を押して、操作の記録を開始します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/4e525ea4-cca8-0e15-f29b-a9df74b5dbb9.png">


操作中の各種イベントが記録されていきます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/b501aaf7-f120-5d6c-4dc5-bd5442b90e5c.png">


End recordingを押すと、記録を完了できます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/ad75de0f-8f25-149a-c5d5-de0160b300b8.png">


実際に記録しているときの様子です。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/3406b604-2d64-f90e-73d4-7ea8f0afeec7.gif)


## Replay（再実行）

記録した操作は右上の Replay から再実行することができます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/5aa3546c-cde3-3846-cb6b-a6c4ad8b1cee.png">

## Measure performance（パフォーマンスの計測）

Replay の右側の Measure performance を押すと、リプレイを実行したあと、そのパフォーマンスを計測したデータが取得できます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/5aa3546c-cde3-3846-cb6b-a6c4ad8b1cee.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/926c1ecf-e707-2e25-cfd7-51c49da302a6.png">


一連の操作の中でどの処理に何秒かかっているかなどを確認できます。

## Edit（編集）
記録した操作の詳細はDevTools上で直接編集することができます。
各種操作の左側にある▶︎を押すことで、操作の詳細を表示できます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/9718df5b-2cce-5aec-1afd-1707d27c9635.png">


例えば、valueの「株式会社グレンジ」を変更して別のキーワードで検索するようにできます。

## Export
記録した操作は、[Puppeteer](https://pptr.dev/)で実行可能なJavaScriptファイルとしてエクスポートできます。
エクスポートしたいRecordingを選択した状態で ↑（Export as a Pupeteer script）を押下します。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/942071/966de478-34ce-80a3-8810-6ad94d682179.png">


実際にExportしたPuppeteer Scriptの例です。
https://gist.github.com/konnyaku256/4007faf7ea5bebde984fa35b271a3877

エクスポートしたJavaScriptファイルは次のようにpuppeteerをインストールした環境で実行できます。

```sh
$ npm i puppeteer
$ node example.js
```

JSファイルの`puppeteer.launch`で`headless: false`オプションを指定しておくと、Chromiumが起動するので操作の再実行をGUIで確認できます。

```js
const browser = await puppeteer.launch({
  headless: false
});
```

# 所感
## 操作の記録と計測が優秀
RecorderでエクスポートしたPuppeteer Scriptは、クリックやテキストエリアの入力といったイベントをかなり詳細に取得できている印象でした。
また、Measure performance で計測できる内容も充実しており、Lighthouseなどのスコアと合わせてWebのパフォーマンス指標として活用できそうと思いました。

## 別環境での実行はPuppeteerのみ
操作を記録したChrome上ではReplayやMeasure performanceなどの機能を使用できますが、これを別のChromeに複製して再現する事はできないようでした。
そのため、他の人がRecorder上の操作を再現したい場合は、ExportしたPuppeteer Scriptを共有してもらい、各々の環境のPuppeteerで実行するといった対応を取る必要がありそうです。

# まとめ
今回はChrome DevToolsのRecorder機能について検証してみました。
DevToolsはPuppeter Scriptの便利なGUI開発環境、エクスポートしたファイルは共有して各環境のPuppeterで再実行という使い方をすると、Webサイトのデバッグなどを再現性高く自動化することができそうで面白いなと感じました。
まだ、プレビューなので今後仕様変更される可能性はありますが、正式版として公開されるのが楽しみです。

明日は、山上さんの記事が投稿される予定です。 どんな記事か楽しみです。

# 参考
https://developer.chrome.com/docs/devtools/recorder/
https://toranoana-lab.hatenablog.com/entry/2021/11/18/121835
https://qiita.com/YoshikiIto/items/62a6caf7a1e1cf96bcb3
https://zenn.dev/kg0r0/articles/7fecaa3de95afa#puppeteer