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でスクリプトが実行できる?