解決策
ウェブ開発者は日常的に1つのアプリを複数のブラウザでテストしており、自動化は長らく二者択一を迫ってきた。古典的なW3C WebDriver APIはあらゆるブラウザに到達できるが、HTTPのリクエスト・レスポンス方式で話す。ページを読み込み、コマンドを実行し、応答を待つ。コンソールログやネットワークトラフィックをストリーミングすることはできず、コマンドは1つずつ実行される。豊富な代替手段、すなわちChromeのDevTools Protocol(CDP)やFirefoxの旧Remote Debugging Protocolは、それぞれ自ブラウザでしか動作しなかったため、ツール作者はエンジンごとに1つのプロトコルを保守していた。調査では、クロスブラウザテストがウェブの最大の課題の一つとして挙げられていた。
最も抵抗の少ない道はChromeのものだった。支配的な自動化ライブラリであるPuppeteerはCDPの上で育ち、2019年に実験的なFirefox対応を得たとき、Mozillaは当然と思われることをした。Firefox内にCDPのサブセットを実装し、保守したのだ。それによりFirefoxは恒久的な追随者となった。CDPはChromeのDevToolsに奉仕するために存在し、Chromeの必要に応じて変化する。公開仕様ではなく、部分的なクローンではPuppeteer APIの全体を保証できるはずもなく、どの機能がどこで動くのか誰にも分からなかった。
Mozillaの対抗策は、コードエディタにおけるLanguage Server Protocolの教訓を応用した。すべてのツールがすべてのブラウザをサポートしなければならないなら、解決策は既存勢力のプロトコルをコピーすることではなく、豊富な機能群を標準にすることだ。PuppeteerチームとW3C Browser Testing and Tools Working Groupの他のメンバーとともに、WebDriver BiDiを構築した。WebDriverのコマンドを双方向のイベントベースのWebSocketチャネル上で行うもので、ログ、ネットワーク傍受、プリロードスクリプト、並行コマンドがブラウザをまたいで動作する。Geckoが仕様を実装し、Chromiumも実装した。
2024年8月までに、その賭けは実を結んだ。Firefox 129とPuppeteer 23がともに本番利用可能なWebDriver BiDiを出荷し、puppeteer.launch({ browser: 'firefox' })がFirefoxにChromeと同じ開発者体験をもたらした。FirefoxはCDPサブセットを非推奨とし、削除は2024年末に予定され、Chromeチーム自身の発表も同じことを述べた。バージョン23以降、Firefox対応は標準規格上で動作し、ChromeはCDPをデフォルトとして維持する。クローンではなく標準規格が、Firefoxの入口となったのだ。
達成したこと
豊富なプロトコルを競合とともにオープンなW3C標準として共同執筆し、その後、同社自身のPuppeteerがFirefoxを無償で提供する
うまくいった理由
プロトコルを双方向かつイベント駆動にしたことで、クロスブラウザの到達範囲を手放すことなく、CDP級の機能(ログ、ネットワーク傍受、並行性)をツールにもたらした。
W3CでChromiumと共同執筆したことで、単一のベンダーがプロトコルを所有することはなくなった。Firefoxはもはや、ChromeのDevToolsのために書かれた非公開プロトコルを保守する必要はなかった。
PuppeteerがCDPをChromeのデフォルトとして維持したため、既存の自動化はそのまま残り、Firefox対応は標準規格上で動作した。GoogleのライブラリがMozillaの互換性を無償で出荷したのだ。
PuppeteerでBiDiが機能同等に達すると、FirefoxはCDPサブセットとその保守負担を非推奨にでき、標準規格だけが前方への道として残った。
応用できること
競合がデファクトプロトコルを所有しているときは、それをクローンせず、争わず、両エンジンが実装する単一の公開標準を共同執筆せよ。そうすれば支配的なツールがあなたの配布チャネルになる。
その後
Firefox 129は登場と同時にCDPを非推奨とし、削除は2024年末に予定され、両チームはユーザーに移行するか、欠けているAPIを報告するよう求めた。一部のPuppeteer機能は移行できなかった。CDPSession固有の呼び出し、アクセシビリティツリーのスナップショット、ワーカーの評価には依然として標準化作業が必要であり、両チームはその公開リストを公表した。その1週間前、BrowserStackは自社クラウドでWebDriver BiDiが本番利用可能であると宣言していた。プロトコルが仕様から出荷済みのクロスブラウザ基盤へと移行した時期の一部だった。
出典をたどる
出典
- Announcing Official Puppeteer Support for Firefox Mozilla Hacks · hacks.mozilla.org ·
- WebDriver BiDi production-ready in Firefox, Chrome and Puppeteer Chrome for Developers · developer.chrome.com ·
- Puppeteer Support for Firefox (Hacker News discussion) Hacker News · news.ycombinator.com ·