Slide 1

Slide 1 text

BiDiってなんだ? 2026.01.23 potatotips #94 @tomorrowkey

Slide 2

Slide 2 text

自己紹介 @tomorrowkey Android Engineer, STORES, Inc. ❤️ Kotlin, Ruby, Java, Swift, TypeScript/JavaScript … Android 16年生 決済1年生 2 / 14

Slide 3

Slide 3 text

背景 STORESはいまテストに力を入れています。 どんなテストツールを使っているかはプロダクトによって効果的なものを採用し ています。 Espresso, XCUITest, Swift Testing, Appium, Maestro 決済ではAppiumを使用してAndroid, iOS共通のE2Eテストを構築しています。 3 / 14

Slide 4

Slide 4 text

ある日のライブラリ更新のPR 4 / 14

Slide 5

Slide 5 text

Appiumとはなにか iOS -> xcuitest-driver Android -> uiautomator2-driver, espresso-driver WebDriver互換APIでアプリを操作できるツール 5 / 14

Slide 6

Slide 6 text

WebDriverとはなにか ブラウザを操作するためのW3Cで標準化された仕様 ブラウザごとにDriverの実装がある Chrome -> ChromeDriver Firefox -> geckodriver Safari -> Safari 6 / 14

Slide 7

Slide 7 text

つまりAppiumとはなにか デバイス (Android/iOS) Appium Driver (UiAutomator2, XCUITest 等) Appium Server (Node.js) Appium Client (Ruby, Python) テストコード デバイス (Android/iOS) Appium Driver (UiAutomator2, XCUITest 等) Appium Server (Node.js) Appium Client (Ruby, Python) テストコード ホストマシンで実⾏ HTTP 通信 (JSON Wire Protocol) ここがW3C 共通規格 ( どの⾔語でも同じ) サーバー内部の処理 どのDriver への 命令か判断して渡す デバイス操作 element.click() 1 POST /session/:id/element/:id/click 2 コマンドを転送 (Proxy) 3 OS ネイティブ命令へ翻訳 4 タップ操作を実⾏ 5 実⾏完了 6 結果を返却 7 HTTP 200 OK (Response) 8 処理完了 (return) 9 ブラウザ向けに策定されたWebDriverを使ってアプリも操作しちゃおう 7 / 14

Slide 8

Slide 8 text

BiDi(バイダイ)とはなにか WebDriverはリアクティブなイベントのキャプチャなどの双方向通信ができない 弱点があった WebDriver BiDiはそれを解決する リアルタイム通信ができる https://speakerdeck.com/yotahada3/webdriver-bidi-burikaigi2025 https://speakerdeck.com/yotahada3/burikaigi2026 詳しくはこちらのスライドが非常に勉強になります。 発音はバイダイだよ https://x.com/jecfish/status/1656581421912424448 8 / 14

Slide 9

Slide 9 text

BiDiにはどういった仕様があるか https://www.w3.org/TR/webdriver-bidi/#command-network-addIntercept 9 / 14

Slide 10

Slide 10 text

Appiumでもこれができるようになるか? かなり難しい(のではないか) 10 / 14

Slide 11

Slide 11 text

WebDriver BiDi Protocol on Appium でできること log.entryAdded ログをキャプチャする appium:xxxx.contextUpdate ネイティブ/WebViewのコンテキストの変更の通知をうけとる 11 / 14

Slide 12

Slide 12 text

ログを取得してみた https://github.com/appium/ruby_lib_core/blob/32b1335923758359b2740d0cb 7ffb2ba2b9a9264/test/functional/android/webdriver/bidi_test.rb 12 / 14

Slide 13

Slide 13 text

まとめ 「かなり難しい」と書いたものの、BiDiもっと使えるようになると柔軟なテスト を定義できておもしろそう。 13 / 14

Slide 14

Slide 14 text

参考資料 https://speakerdeck.com/yotahada3/webdriver-bidi-burikaigi2025 https://speakerdeck.com/yotahada3/burikaigi2026 https://github.com/appium/appium-uiautomator2- driver/blob/0ab3b65b3742bbd81540f01831895b933e20d0ed/docs/bidi.md https://appium.github.io/appium-xcuitest-driver/latest/reference/bidi/ 14 / 14