ウェブアプリの開発をする時には実際にブラウザで操作してみて期待通りの動作をするかのテストを行うものですが、ブラウザのバージョンアップなど、開発者の変更以外の部分でテスト結果が変わってしまうのは困りものです。そうしたウェブアプリの開発者向けに、特定のバージョンのGoogle Chromeを利用できるようにした「Chrome for Testing」をGoogleがリリースしました。

Chrome for Testing: reliable downloads for browser automation - Chrome Developers

https://developer.chrome.com/blog/chrome-for-testing/



高品質なウェブアプリを開発したいなら、自動テストであれ手動テストであれ、ブラウザでのテストは不可欠ですが、これまで適切なテスト環境を用意することが非常に難しいとされてきました。

◆問題点1:ブラウザの自動更新

ブラウザが自動で最新のバージョンにアップデートされる機能は一般ユーザーにとってはありがたい機能ですが、開発者にとっては頭痛の種となっています。例えば開発中にコードを変更した場所の影響を調べるためにテストを動作させたとき、ブラウザが更新されていたせいでその変更の影響まで取り込んでしまうと影響範囲の絞り込みが難しくなってしまいます。

◆問題点2:Google Chromeの過去バージョンの利用が難しい

自動更新の問題を防ぐためは、特定のバージョンのGoogle Chromeの実行ファイルを保存しておけばよさそうです。しかし、Googleはユーザーがバージョン番号を気にしてしまうことを避けるため、意図的にバージョンごとのダウンロードを提供していません。後から「特定のバージョンの実行ファイル」をダウンロードできないため、実行ファイルの管理の手間が増えるほか、ユーザーから「特定のバージョンで動作しない」というバグ報告をもらったときの検証にも困ってしまいます。

さらに、ブラウザ操作を自動化するツール「ChromeDriver」を利用して自動テストを行っている場合はさらに「特定のバージョンのChromeと互換性のあるChrome Driverのバージョン」を探す作業が追加されます。



上記の2つの問題を解決するために開発者たちが編み出した手法が「代わりにChromiumを使う」というもの。もちろん、Chromiumを元に開発されているとはいえChromeとChromiumは異なるものなので、ChromeとChromiumのバージョンは完全には対応しておらず、また動作するプラットフォームも完全に一致するわけではありません。



そこでGoogleが開発したのが「Chrome for Testing」です。Chrome for Testingでは、できる限り実際のリリースに一致させた実行ファイルをバージョンごとに利用可能とのこと。さらに、Chrome for TestingとChromeDriverのバージョンを統合することで、適切なバージョンのChromeDriverが分かりやすくなっています。

Chrome for Testingの実行ファイルをダウンロードするには、npmの「@puppeteer/browsers」を利用するのが簡単です。例えば下記のようなコマンドでダウンロード可能です。

# 現在の安定版と一致する最新のChrome for Testingの実行ファイルをダウンロード
npx @puppeteer/browsers install chrome@stable

# 特定のバージョンのChrome for Testingをダウンロード
npx @puppeteer/browsers install chrome@116.0.5793.0

# Canary版Chromeに一致するバージョンのChromeDriverをダウンロード
npx @puppeteer/browsers install chromedriver@canary

# 特定のバージョンのChromeDriverをダウンロード
npx @puppeteer/browsers install chromedriver@116.0.5793.0


なお、一般ユーザーが間違って使ってしまわないように、Google Chromeの通常のダウンロードページには意図的に記載されていないとのことです。