Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kotetu (kotetuco)
June 25, 2026
Programming
99
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetu (kotetuco)
June 25, 2026
More Decks by kotetu (kotetuco)
See All by kotetu (kotetuco)
STORES決済iOSアプリの決済端末2対応リリースフロー / ebisu.mobile-12-kotetu
kotetuco
0
56
CryptoKit ではじめる暗号技術 - メッセージ認証コード編 / iosdcjapan-2025-cryptokit
kotetuco
1
330
認証体験向上のために passkeys (パスキー) に対応する 〜 メリット・対応方法について / iosdcjapan-2023-passkeys
kotetuco
3
2.4k
着信時氏名表示させたいエンジニア vs 簡単には着信時氏名表示できない電話番号 (iOS13対応版) / iosdcjapan-2020-lt-calldirectory
kotetuco
2
1.5k
UIImage and CIImage for Image Processing
kotetuco
9
7.2k
Metal for data-parallel computations
kotetuco
1
1.9k
Preparing for Swift 5 Ownership
kotetuco
0
5.1k
プログラミング言語RustとOS開発/rust-os-develop-introduction
kotetuco
0
1.8k
Sansan iOSアプリと R&Dとの共同研究について/sansan-ios-and-reearch
kotetuco
0
660
Other Decks in Programming
See All in Programming
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.4k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.4k
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
410
スマートグラスで並列バイブコーディング
hyshu
0
210
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
100
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
160
Lessons from Spec-Driven Development
simas
PRO
0
210
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.2k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
300
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Music & Morning Musume
bryan
47
7.2k
Optimizing for Happiness
mojombo
378
71k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
Transcript
AIを活用した E2Eテスト実装効率化のあゆみ 栗山 徹 (@kotetu) Ebisu.mobile #14
栗山 徹 モバイル開発本部/決済グループ @kotetu @kotetuco Ebisu.mobile #14 2 / 24
アジェンダ STORES決済のE2Eテスト自動化 – Appiumを使ったE2Eテスト自動化の仕組み – XPath 取得に関する AI を使った効率化 –
成果・まとめ – Ebisu.mobile #14 3 / 24
STORES決済のE2Eテスト自動化 Ebisu.mobile #14
STORES決済の E2E テストは「自動化のハードルが高い」 決済の手動操作が必要 端末・プラットフォームが多様 モバイルアプリは「一度リリースしたらロールバックできない」ため、QA品質を落とせない → QA がデリバリーの最大のボトルネックに 実際のクレジットカードをタッチ
– QRコードを撮影 – 結果を端末の画面で確認 – プロダクト:アプリ / 決済SDK / スタンドアロンアプリ (決済端末2内で動作) – プラットフォーム:iOS/Android – 決済端末:2種類 – 決済方法:クレジットカード / 電子マネー / QRコード – Ebisu.mobile #14 5 / 24
自動化の方針 → 完全自動化を目指さない Ebisu.mobile #14
「完全自動化を目指さない」とは? 半自動化 手動操作以外は Appiumが実行する 再現性 人間の操作ブレを最 小化し、誰でも同じ テストが回る 分散実行 複数人の実行結果を
Qase(※)に集約して 可視化 見えているところまで自動化することで、まずは成果を取りに行った (※) Qase: STORESで利用しているテスト管理ツール Ebisu.mobile #14 7 / 24
Appiumを使ったE2Eテスト自動化の仕組み Ebisu.mobile #14
技術スタック RSpec テスト Page Object Appium Server XCUITest (iOS) UiAutomator2
(Android) iOS 実機 Android 実機 Appium + RSpec で E2E テストを実装 – 実機 iOS / Android で動作 – .ipa / .apk を Bitrise / Xcode Cloud から取得 してそのままテスト – XCUITest / UiAutomator2 ドライバ – XPath でネイティブ UI ツリーの要素を特定 – Page Object パターンでOS 差分を 隠蔽 – テスト本体はiOS/Androidを意識しない – Ebisu.mobile #14 9 / 24
Page Object の基本実装 1 # Page Object のインスタンスを生成(driver: Appium, platform:
:ios / :android) 2 # .tap は生成したオブジェクトをそのままブロックで操作する Ruby 構文 3 Page::App::CreditCardPaymentPage.new(driver, platform).tap do |page| 4 5 # RSpec のアサーション(XCTAssertEqual 相当) 6 # Page Object 経由で UI 要素を取得し、表示テキストを検証する 7 expect(page.financing_type_selector_button.text).to eq('1回払い') 8 expect(page.amount.text).to eq('¥512') 9 10 # [manual] 人間がカードをタッチ → レシート画面まで Appium が自動待機 11 page.wait_pay_by_contactless 12 13 end Ebisu.mobile #14 10 / 24
半自動化の肝:人間に「声で」伴走する 物理カードのタッチは人間がやる。テストは 音声で指示を出して待つ。 1 def wait_pay_by_contactless 2 say('クレジットカードをタッチしてください') # 音声で次の操作を案内
3 4 # カードによっては署名画面が挟まる → 検知して自動でサイン入力 5 sign_if_signature_screen_appears 6 7 # Appium が画面ツリーを監視し、レシート画面を検知するまでポーリング 8 wait_until { receipt_screen? } 9 end 実行者は画面を凝視しなくてよい。 「いつ・何を」操作するかをテストが教えて くれる。 → プロダクトへの熟練度がなくてもテストを回せる状態に。 Ebisu.mobile #14 11 / 24
クロスプラットフォーム:1 テスト・2 OS Page Object 内で OS 差分を吸収。テスト本体は OS を意識しない。
1 def financing_type_selector_button 2 case platform 3 when :ios 4 driver.wait { it.find_element :xpath, 5 '//XCUIElementTypeButton[@name="financingOptionsButton"]' } 6 when :android 7 driver.wait { it.find_element :xpath, 8 '//android.widget.Button[@resource- id="...credit_card_payment_financing_type_selector"]' } 9 end 10 end 理想は 同じ locator で両 OS が取れること。ただし現状は OS ごとに XPath が異なるケースも多い。 Ebisu.mobile #14 12 / 24
理想と現実:パスワード保存ダイアログ (iOS) 様々な条件により表示形式が異なるため、同じコードで処理できない。 シンプルな 2 択アラート パスワードマネージャーを含む 3 択シート Ebisu.mobile
#14 13 / 24
理想と現実:複雑な実装 1 def dismiss_password_save_alert 2 alert = driver.switch_to.alert 3 title
= alert.text.lines.first.strip 4 5 case title 6 when /\Aパスワードを保存しますか\?\z/ 7 if alert.text.include?('パスワードの保存先を選択してください') 8 # 3択アラート → XPath で「今はしない」を直接クリック 9 driver.find_element(:xpath, '//XCUIElementTypeButton[@name="今はしな い"]').click 10 else 11 # 2択アラート → dismiss で OK 12 alert.dismiss 13 end 14 # ... 15 end Ebisu.mobile #14 14 / 24
XPath 取得に関する AI を使った効率化 Ebisu.mobile #14
XPath 探索がテスト実装のネック テストケースを実装するには、UI 要素の XPath を画面ごとに特定する作業が 必要。 iOS(XCUITest) Android(UiAutomator2) 1
//XCUIElementTypeButton 2 [@name="financingOptionsButton"] 1 //android.widget.Button 2 [@resource-id="...selector"] iOS/Androidそれぞれの XPath 探索が必要 – 画面数 × 要素数 × OS 数 だけ探索コストが積み上がる – Ebisu.mobile #14 16 / 24
XPath 探索効率化の変遷 ① 人力で探索 Appium Inspector で 手動探索 時間がかかる・属人的 ②
書き捨てコードで探索 探索用テストケースを AIに書かせてログ 出力しながら特定 自動化はされたが 探索効率悪い ③ Appium MCP AIがMCP経由で 実機へ直接アクセス して対話的に探索 探索効率が大幅向上 「目視で探索」→「ログ出力を見ながら自律的に探索」→「端末を操作しながら自律的に探索」 Ebisu.mobile #14 17 / 24
要素探索① 人力で探索 目視でXPathを見つける必要があるので 時間がかかる Appium Inspectorを使い、 XPathのツリーを辿って要素を特 定 – iOS/Androidそれぞれ対応が必要
– Ebisu.mobile #14 18 / 24
要素探索② 書き捨てコードで探索 テストケース実行の度にログインからやり直しなので 時間がかかる Yes No AI が探索用スクリプトを 作成 実行
要素が見つかった? テストケースへ反映 AI に既存のテストコードを流用した 書き捨てコードを作らせる – ログで XPath を出力 – 探索できるまで何度もテストケースを実行し特定 – Ebisu.mobile #14 19 / 24
要素探索③ Appium MCP 探索効率がさらに向上 Appium MCP 経由でAI が端末を 直接操作 –
AI が画面遷移の操作をしつつ 適宜 XPath を収集 – Ebisu.mobile #14 20 / 24
実行に失敗した場合の修正方法 失敗 成功 実行失敗 失敗ログを AI に渡す AI がコードを修正 再度試す
完了 失敗時に出力されるログをAIへ渡すのが 基本戦略 – コードが修正されるまで繰り返す – 必要に応じて XPath を辿り直してくれる – Ebisu.mobile #14 21 / 24
成果 実装済みテストケース 運用の変化 12 2回実施 27% クレジットカード決済 (決済・返金) – 電子マネー決済・返金
(決済・返金) – QRコード決済・返金 (決済・返金) – Qase でテストケースの実行記録を 管理 – 毎リリース前にテストを実行する 運用フローを確立 – 実行後に挙がった課題をもとにテス トケース・運用フローを継続改善 – 実装済みテストケース テスト実行回数 ケース数ベースの半自動化率 「完全自動化」にこだわらず「回り続ける仕組み」を作れたことが一番の成果 Ebisu.mobile #14 22 / 24
まとめ 「半自動化」したE2E自動テストを導入することで テスト実施効率が向上した – テストケース実装だけでなく UIパーツの探索を AI によって効率化できた – 難しい問題を完璧に解こうとせず、見えているところまで解く。
そこで初めて次のビジョンが見えてくる。 Ebisu.mobile #14 23 / 24
ありがとうございました Ebisu.mobile #14