WebDriver BiDi 2025年のふりかえり
by
nus3
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2026/01/09 BuriKaigi 2026 WebDriver BiDi 2025年のふりかえり
Slide 2
Slide 2 text
nus3(なすさん)
Slide 3
Slide 3 text
去年もBuriKaigi 参加させてもらいました!
Slide 4
Slide 4 text
去年話したこと WebDriver BiDiとはそもそも何なのか話しました
Slide 5
Slide 5 text
あれから1年経ち
Slide 6
Slide 6 text
WebDriver BiDiは どうなったのか
Slide 7
Slide 7 text
今日話したいこと WebDriver BiDiおさらい 仕様の更新 ブラウザの実装状況
Slide 8
Slide 8 text
今日話したいこと WebDriver BiDiおさらい 仕様の更新 ブラウザの実装状況
Slide 9
Slide 9 text
そもそもWebDriverとは WebDriver Bidiおさらい https://www.w3.org/TR/webdriver1/ 別プロセスからブラウザ操作するための標準仕様 2018年に勧告(Recommendation) クライアントとDriver間は でやり取り HTTP
Slide 10
Slide 10 text
WebDriver BiDiとは WebDriverを拡張したブラウザ操作のための 双方向プロトコル Bidirectional WebDriver Protocol クライアントとDriver間は を介した 双方向通信 Browser Testing and Tools Working Groupで仕様策定 が進められる consoleへの直接のアクセスや ネットワークのインターセプトが可能 WebSocket WebDriver Bidiおさらい
Slide 11
Slide 11 text
WebDriver Bidiおさらい https://people.igalia.com/lmoura/wkcm-2024/webdriver-bidi-webkit.html#/2/2 https://people.igalia.com/lmoura/wkcm-2024/webdriver-bidi-webkit.html#/3/2
Slide 12
Slide 12 text
WebDriver Bidiおさらい https://people.igalia.com/lmoura/wkcm-2024/webdriver-bidi-webkit.html#/2/2 https://people.igalia.com/lmoura/wkcm-2024/webdriver-bidi-webkit.html#/3/2 WebSocketによる双方向通信で リアルタイムでブラウザのイベントを 受け取れるように WebDriver Bidiおさらい
Slide 13
Slide 13 text
それ以外にも WebDriver Bidiおさらい
Slide 14
Slide 14 text
WebDriver BiDiで拡張されたモジュール WebDriver Bidiおさらい network ブラウザで発生するリクエストとレスポンスへの介入 script Window作成時に実行できるPreload Script 指定した関数の実行 log ブラウザで発生するログ(console.logやエラーなど)を リアルタイムで取得 storage, input, webExtension, emulationなどなど
Slide 15
Slide 15 text
WebDriver BiDiのステータス 2024年11月にWorking Draftで公開 去年のBuriKaigi(2025年2月)でEditor’s Draftと紹介 してたが、実はWorking Draftだった WebDriver Bidiおさらい https://www.w3.org/standards/history/webdriver-bidi/
Slide 16
Slide 16 text
WebDriver BiDiのステータス WebDriver Bidiおさらい https://www.w3.org/standards/types/#x1-summary Web標準化のプロセスに 入ったが まだまだ策定中の状態
Slide 17
Slide 17 text
WebDriver BiDiの現状って? Working Draftってことは、仕様も更新されてるの? 仕様の策定に合わせて、ブラウザの実装状況って どうなっとる? WebDriver Bidiおさらい
Slide 18
Slide 18 text
ということで2025年に 仕様、ブラウザに どんな変化があったか 追ってみよう
Slide 19
Slide 19 text
今日話したいこと WebDriver BiDiとは 仕様の更新 ブラウザの実装状況
Slide 20
Slide 20 text
仕様の更新を見る前に 仕様の更新
Slide 21
Slide 21 text
WebDriver BiDiの仕様について Commands クライアントからブラウザへのリクエスト Events ブラウザからクライアントへ送信される通知 Modules 関連するcommandsとeventsをまとめた機能単位 仕様の更新
Slide 22
Slide 22 text
Modules Claudeさんに作ってもらった、Modulesのざっくり図 仕様の更新
Slide 23
Slide 23 text
Commands 仕様の更新 クライアントからブラウザへリクエストされる非同期操作 https://www.w3.org/TR/webdriver-bidi/#protocol-definition 例:
Slide 24
Slide 24 text
Events 仕様の更新 ブラウザからクライアントへ送信される非同期通知 https://www.w3.org/TR/webdriver-bidi/#protocol-definition 例:
Slide 25
Slide 25 text
さて本題 2025年、仕様には どんな更新があったか 仕様の更新
Slide 26
Slide 26 text
W3Cのリポジトリを見てみる 仕様の更新 https://github.com/w3c/webdriver-bidi/pulls?page=1&q=is%3Apr+is%3Amerged+merged%3A2025-01-01..2025-12-31 110件のプルリクがマージ
Slide 27
Slide 27 text
余談 仕様の更新 ClaudeさんにChrome DevTool MCP使って、プルリクをまとめてもらった
Slide 28
Slide 28 text
2025年に追加されたもの 仕様の更新 ブラウザAPIをエミュレートする 位置情報、userAgent、JSの有効/無効などを オーバーライド emulationモジュールとして最初に追加されたプルリク ユーザーからのよくある要望として geolocationをシミュレートしたいというissueから emulation.setGeolocationOverrideコマンドが 追加された https://github.com/w3c/webdriver-bidi/pull/888 emulationモジュールが追加
Slide 29
Slide 29 text
2025年に追加されたもの 仕様の更新 ダウンロード時の動作を制御するコマンド 指定したフォルダかdefaultか ダウンロードできないようにするかを選択できる PuppeteerとCDPにはあった機能 browser.setDownloadBehaviorコマンドの追加 https://github.com/w3c/webdriver-bidi/pull/970
Slide 30
Slide 30 text
2025年に追加されたもの 仕様の更新 ナビゲーションによってドキュメントが ロードされた時に発火するイベント Playwrightからのリクエスト browsingContext.navigationCommittedイベントの追加 https://github.com/w3c/webdriver-bidi/pull/855
Slide 31
Slide 31 text
従来のWebDriverにはなく CDPや他ツールにある機能や 要望がある機能が 仕様に追加されていた 仕様の更新
Slide 32
Slide 32 text
続いて ブラウザの実装状況を 追いかける
Slide 33
Slide 33 text
今日話したいこと WebDriver BiDiとは 仕様の更新 ブラウザの実装状況
Slide 34
Slide 34 text
web-platform-testsから 各ブラウザの現状を知る ブラウザの実装状況
Slide 35
Slide 35 text
web-platform-tests(wpt)とは Webプラットフォームにおけるテストケースのまとまり WHATWGやW3Cで策定された仕様をカバー web-platform-testsにあるテストケースの結果を wtp.fyiでダッシュボードとして公開 Chrome, Edge, Firefox, Safariなどを対象に定期的に テストを実行 ブラウザの実装状況
Slide 36
Slide 36 text
wptのダッシュボード https://wpt.fyi/results テスト結果がわかるダッシュボード ブラウザの実装状況
Slide 37
Slide 37 text
wpt その他 ブラウザの実装状況 https://wpt.fyi/runs https://wpt.fyi/interop-2025 定期的にテストが実行 Interopの結果とかも見れる
Slide 38
Slide 38 text
wptのテストの種類 wptのテストにはいくつかのアプローチがある ブラウザの実装状況 https://web-platform-tests.org/test-suite-design.html#test-types Rendering testharness.js JSが期待通りに動作するか wdspec WebDriver系のテスト manual
Slide 39
Slide 39 text
wpt: wdspec ブラウザの実装状況 https://web-platform-tests.org/writing-tests/wdspec.html WebDriver、WebDriver BiDiを対象にしたテスト Pythonとpytestを採用 wptリポジトリ内にWebDriverクライアント(tools/webdriver)がある このクライアントがBiDiにも対応
Slide 40
Slide 40 text
wptにあるWebDriver BiDiの テストケースを実際にみてみよう ブラウザの実装状況
Slide 41
Slide 41 text
WebDriver BiDiのテストケース ブラウザの実装状況 wptリポジトリのwebdriver/tests/bidi にBiDi用のテストケースがある でディレクトリが作られている webdriver/tests/bidi/{MODULE}/{METHOD} https://github.com/web-platform-tests/wpt/tree/master/webdriver/tests/bidi
Slide 42
Slide 42 text
WebDriver BiDiのテストケース BiDiでは機能のまとまりがModule、その中に関連するCommandsとEventsがある ブラウザの実装状況
Slide 43
Slide 43 text
WebDriver BiDiのテストケース ブラウザの実装状況 script.evaluate コマンドの場合 指定された実行環境で、指定したスクリプトを実行するコマンド webdriver/tests/bidi/script/evaluate にテストケースがある https://github.com/web-platform-tests/wpt/blob/master/webdriver/tests/bidi/script/evaluate/evaluate.py pythonやpytestがわからなくても どんなテストしてるか 大体わかる
Slide 44
Slide 44 text
WebDriver BiDiの wptのテスト結果や如何に ブラウザの実装状況
Slide 45
Slide 45 text
WebDriver BiDiのテスト結果 ブラウザの実装状況 https://wpt.fyi/results/webdriver/tests/bidi
Slide 46
Slide 46 text
WebDriver BiDiのテスト結果 ブラウザの実装状況 https://wpt.fyi/results/webdriver/tests/bidi Chrome、Firefoxでは多くのテストケースにパスしてる Safariでは、テストケースがほとんどパスしていない
Slide 47
Slide 47 text
ということで 各ブラウザの事情を 追ってみる ブラウザの実装状況
Slide 48
Slide 48 text
Firefox fxdx.devでWebDriver Newsletterを定期的に公開 WebDriver NewsletterからBiDiのアップデート情報を キャッチアップできる ブラウザの実装状況 https://fxdx.dev/
Slide 49
Slide 49 text
Firefox 2024年に追加されたwebExtensionモジュールのコマンドに対応 2025年に追加されたemulationモジュールのコマンドである emulation.setGeolocationOverrideの対応 2025年に追加されたbrowsingContext.navigationCommittedイベントの対応 https://fxdx.dev/firefox-webdriver-newsletter-137/ https://fxdx.dev/firefox-webdriver-newsletter-139/ https://fxdx.dev/firefox-webdriver-newsletter-140/ ブラウザの実装状況 新しく追加、更新された仕様の実装を進めている印象
Slide 50
Slide 50 text
Firefox 2024年からChrome Devtools Protocol(CDP)のサポートを廃止することは アナウンスされていた 2025年になってFirefox 141で完全に廃止 Firefoxで CDPを使っているツールはWebDriver BiDiへの移行を強く推奨 ブラウザの実装状況 FirefoxでのChrome Devtools Protocol(CDP)サポートを 完全に廃止 https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/ Firefoxでは今後も積極的にBiDi対応をしていきそう
Slide 51
Slide 51 text
FirefoxのCDPサポートについて ちょっと寄り道 ブラウザの実装状況 そして、去年のBurikaigiでした内容と被る話
Slide 52
Slide 52 text
ブラウザテストの自動化のこれまで ブラウザの実装状況 https://developer.chrome.com/blog/test-automation-evolution 外部プロセスからブラウザ操作するにはWebDriverとCDPの選択肢があった CDPはChrome DevToolsとデバッグ用に設計 がPuppeteerはCDPを採用 CDPはデバッグに対応するため、WebDriverよりも低レベルな制御をサポート
Slide 53
Slide 53 text
FirefoxのCDPサポートについて ブラウザの実装状況 2019年、FirefoxでPuppeteerの試験的なサポート この時に、MozillaはFirefoxにCDPのサブセットを実装 し、これまで運用してきた
Slide 54
Slide 54 text
FirefoxのCDPサポートについて ブラウザの実装状況 当時の議論をしっかりとは追えてないのですが FirefoxでのCDPサポートにChromeチームもMozillaも課題を感じてた Chrome Devtoolsの要件に依存する CDPは標準仕様ではないので、ChromeチームとMozillaで都度コミュニ ケーションが必要 これがWebDriver BiDiができるきっかけ ということが記事には記載されてる https://developer.chrome.com/blog/firefox-support-in-puppeteer-with-webdriver-bidi
Slide 55
Slide 55 text
寄り道から戻って Chromeへ ブラウザの実装状況
Slide 56
Slide 56 text
Chrome そもそもChromiumではBiDiとCDP間を変換する JSレイヤーがある ブラウザの実装状況 https://docs.google.com/document/d/1VfQ9tv0wPSnb5TI-MOobjoQ5CXLnJJx9F_PxOMQc8kY/edit?tab=t.0 https://github.com/GoogleChromeLabs/chromium-bidi?tab=readme-ov-file#how-does-it-work
Slide 57
Slide 57 text
Chrome ChromiumでのBiDi実装はchromium-bidiリポジトリに ある ブラウザの実装状況 https://github.com/GoogleChromeLabs/chromium-bidi
Slide 58
Slide 58 text
Chrome ブラウザの実装状況 2024年に追加されたwebExtensionモジュールのコマンドに対応 2025年に追加されたemulationモジュールのコマンドである emulation.setGeolocationOverrideの対応 2025年に追加されたbrowsingContext.navigationCommittedの対応 https://github.com/GoogleChromeLabs/chromium-bidi/pull/3012 https://github.com/GoogleChromeLabs/chromium-bidi/pull/3311 https://github.com/GoogleChromeLabs/chromium-bidi/pull/3057 Firefox同様、新しく追加、更新された仕様の実装を 進めている印象
Slide 59
Slide 59 text
Chrome 例えばemulation.setGeolocationOverrideの場合 CDPに全く同じコマンド(methods)がある コマンドの引数も一緒 CDPにも同様の機能がある場合、新しい仕様への対応コストは低そう? ブラウザの実装状況 https://www.w3.org/TR/webdriver-bidi/#command-emulation-setGeolocationOverride https://chromedevtools.github.io/devtools-protocol/tot/Emulation/#method-setGeolocationOverride
Slide 60
Slide 60 text
最後に気になる Safari ブラウザの実装状況
Slide 61
Slide 61 text
wptを見てみると ブラウザの実装状況 現状、Safariでは1つしかWebDriver BiDiのテストケースは 成功していない... https://wpt.fyi/results/webdriver/tests/bidi
Slide 62
Slide 62 text
Safariではそう、ただ、WebKitでは ブラウザの実装状況 何も対応してないわけではなさそう WebKitのリポジトリにはBiDi関連のプルリクがマージされてる https://github.com/WebKit/WebKit/pulls?page=2&q=is%3Apr+is%3Amerged+WebDriver+Bidi+in%3Atitle
Slide 63
Slide 63 text
WebKit ブラウザの実装状況 Selenium Conference 2025でIgaliaのLauroさんのセッションで WebKitでのWebDriver BiDiの実装状況に言及 https://www.slideshare.net/slideshow/advancing-webdriver-bidi-support-in-webkit/281229125#1
Slide 64
Slide 64 text
このセッションの内容 からWebKitでの実装状況を 見てみる ブラウザの実装状況
Slide 65
Slide 65 text
WebKit WebKitはクロスプラットフォームに対応した OSSのレンダリングエンジン プラットフォームやOS固有の処理に対応したportがある WebKit公式のportが以下 ブラウザの実装状況 https://docs.webkit.org/Ports/Introduction.html
Slide 66
Slide 66 text
WebKit Igaliaは以下二つのLinux向けのPortをメンテンナンス している WebKitGTK GNOMEと呼ばれるGUIのデスクトップ環境で採用 WPE WebKit: 組み込みデバイス向け IgaliaのチームがWebKitGTK/WPE WebKitを対象に 2024年からWebDriver BiDiの実装を開始 ブラウザの実装状況
Slide 67
Slide 67 text
WebKit wptを見てもWebKitGTKであればパスしている テストケースも増えている ブラウザの実装状況 https://wpt.fyi/results/webdriver/tests/bidi?label=master&label=experimental&product=safari&product=webkitgtk&aligned
Slide 68
Slide 68 text
WebKit Safariはというと... 10月に行われたWebKit Contributors Meetingの議事録が slackに残っていた safaridriverでのBiDiがまだ利用できない safaridriverがSafariと通信するために独自の server/networkライブラリを使っていることに起因 ブラウザの実装状況
Slide 69
Slide 69 text
まとめ
Slide 70
Slide 70 text
2025年のふりかえり emulationという新しいモジュールが仕様に追加 新しいコマンドやイベントも仕様に追加 Chrome、Firefoxでは追加、更新があった仕様の 実装が進む IgaliaによってWebKitでもBiDiの実装が開始 (2024年から) 現時点ではSafariではまだBiDiが利用できない
Slide 71
Slide 71 text
2026年の予想 Roadmapに記載されているE2Eシナリオの大部分の仕様は詰められてそう https://github.com/w3c/webdriver-bidi/blob/main/roadmap.md emulationモジュールはこのシナリオには記載されていない 今後も需要がありそうなシナリオをカバーする仕様が追加されそう? 2026年中には、完全ではなくても部分的にSafariでBiDiを 試せるようになるのでは? Special Thanks togami2864さん (WebKitの動向教えてくれて、ありがとうございました)
Slide 72
Slide 72 text
力尽きた話 ツールの対応状況 CypressでFirefoxを操作する時、デフォルトでBiDiを使用 Puppeteer、Selenium、WebDriverIO、CypressでBiDi試してみる PlaywrightのBiDi対応が表に出ない理由 BiDiの仕様を読んで面白そうな話(2025年関係ないけど) Sandboxed Script Execution script.evaluateコマンドなどで、sandbox引数を指定すると、 sandbox用のRealmでスクリプトが実行できる?