Chrome for Testing: ブラウザの自動化のための信頼性の高いダウンロード

本日は、ウェブアプリのテストと自動化のユースケースに特化した新しい Chrome フレーバー、Chrome for Testing についてお知らせいたします。この記事では、Chrome チームがこの機能が必要と判断した理由を説明し、Chrome for Testing がデベロッパーにとってメリットとなり得る具体例を紹介します。

背景

ブラウザのテストは、高品質のウェブ エクスペリエンスを構築するために不可欠な要素です。手動と自動のどちらで行われるかは関係ありません。その一方で、適切なブラウザ テスト環境の構築が難しいことは周知の事実であり、ウェブ開発者が抱える最大の課題として一貫して 報告されています。本日は、こうした問題を軽減する変更についてお知らせします。

自動更新: ユーザーにとっては便利、デベロッパーにとっては手間がかかる

Chrome の最大の特長の 1 つは、自動更新です。ユーザーは、最新のウェブ プラットフォーム機能、ブラウザ機能、バグの修正など、常に最新の安全なブラウザ バージョンを実行していることを嬉しく思っています。

しかし、一連のエンドツーエンド テストを行うデベロッパーは、まったく異なる視点を持つかもしれません。

  • 繰り返し実行するテスト実行で一貫性と再現性のある結果を得る必要がありますが、ブラウザの実行可能ファイルまたはバイナリが 2 回のテスト実行の間に自己更新することを決定した場合は、そうならない可能性があります。
  • ブラウザの特定のバージョンを固定して、そのバージョン番号をソースコード リポジトリにチェックすることで、その時点の古い commit とブランチをチェックアウトして、ブラウザのバイナリに対してテストを再実行できるようになります。

自動更新のブラウザ バイナリでは、このようなことは一切できません。そのため、自動テストに通常の Chrome インストールを使用することはおすすめしません。これが、通常のブラウザユーザーにとってのメリットと、自動テストを行うデベロッパーにとって望ましいこととの間の根本的な不一致です。

バージョン管理されたブラウザのバイナリ

自動更新以外にも、特定のバージョンの Chrome バイナリを見つけるのが難しい場合があります。Google は、バージョン管理された Chrome のダウンロードを意図的に行っていません。これは、ユーザーがバージョン番号を気にする必要がないためです。ユーザーは可能な限り早く常に最新バージョンに更新する必要があります。これはユーザーにとっては便利ですが、Chrome の古いバージョンでバグレポートを再現する必要があるデベロッパーにとっては手間がかかります。

この問題のより具体的な例は、ブラウザの自動化に ChromeDriver を使用する場合です。なんらかの方法で Chrome のバイナリをダウンロードする必要があるだけでなく、2 つのバイナリの互換性を確保するために、対応するバージョンの ChromeDriver バイナリも必要です。

こうした問題を解決する適切な方法がないため、多くのデベロッパーが Chromium バイナリ(Chrome ではない)のバイナリをダウンロードします。ただし、このアプローチにはいくつかの欠陥があります。まず、これらの Chromium バイナリはすべてのプラットフォームで確実に利用できるわけではありません。第二に、Chrome のリリース プロセスとは別に構築、公開されるため、各バージョンをユーザー向けの実際の Chrome リリースにマッピングすることはできません。第三に、Chromium は Chrome とは異なります。

ソリューション: Chrome for Testing

Chrome for Testing は、こうした問題を解決するために開発された Chrome 専用のフレーバーで、テストのユースケースを対象としており、自動更新は行われません。Chrome のリリース プロセスに統合され、すべての Chrome リリースで利用できます。テストのユースケースに悪影響を及ぼすことなく、通常の Chrome にできるだけ近いバージョン管理されたバイナリ。

Chrome for Testing を作成するために、Chromium と Chrome のコードベースに変更を加えました。また、すべてのチャンネル(Stable、Beta、Dev、Canary)で Chrome のリリース プロセスとロックステップでバイナリをビルドして一般公開バケットにアップロードするインフラストラクチャを設定しました。

Chrome for Testing を取り巻くインフラストラクチャは、Chrome 自体にとどまらず、興味深い機会をもたらします。たとえば、先ほど説明した Chrome と ChromeDriver の一致するバイナリの検出に関する問題は、ChromeDriver のリリース プロセスを Chrome for Testing インフラストラクチャに統合することで完全に解消できます。この問題の解決に加え、ChromeDriver のリリースが Chrome のリリースに合わせて調整されるため、ChromeDriver のリリース プロセスを手動で行う必要がなくなります。

Chrome for Testing のバイナリを入手するにはどうすればよいですか?

ご利用のプラットフォーム用の Chrome for Testing バイナリをダウンロードする最も簡単な方法は、npm から入手できる @puppeteer/browsers コマンドライン ユーティリティを使用することです。以下に例を挙げます。

# Download the latest available Chrome for Testing binary corresponding to the Stable channel.
npx @puppeteer/browsers install chrome@stable

# Download a specific Chrome for Testing version.
npx @puppeteer/browsers install chrome@116.0.5793.0

# Download the latest available ChromeDriver version corresponding to the Canary channel.
npx @puppeteer/browsers install chromedriver@canary

# Download a specific ChromeDriver version.
npx @puppeteer/browsers install chromedriver@116.0.5793.0

これらのバイナリをダウンロードするための自動スクリプトを独自に作成したい場合は、Google が用意しています。Chrome のリリース チャンネル(Stable、Beta、Dev、Canary)ごとに利用可能な最新バージョンを含む JSON API エンドポイントを提供しています。最新のステータスの概要については、Chrome for Testing の可用性ダッシュボードをご覧ください。