Agent Browser
Playwrightとagent-browser
Accessibility Treeを基盤としたAI向けブラウザ自動化
(30分発表用スライド+解説)
⸻
- はじめに(背景)
スライド内容
・ ブラウザ自動化の変遷
・ テスト用途からAI Agent用途へ
解説(話す内容)
本日は、Playwrightを中心に、最近注目されているagent-browserまで含めて、ブラウザ自動化がどのように進化してきたかを紹介します。従来はE2Eテストが主目的でしたが、現在はAI Agentがブラウザを操作するという新しい用途が出てきています。
⸻
- 従来のブラウザ自動化
スライド内容
・ Selenium / WebDriver
・ CSS Selector / XPath中心
解説
従来の自動化は、Seleniumに代表されるようにDOM構造を前提とし、CSSセレクタやXPathで要素を特定する方式でした。この方法は強力ですが、DOM変更に弱く、メンテナンスコストが高いという課題がありました。
⸻
- Playwrightとは
スライド内容
・ Microsoft主導
・ Chromium / Firefox / WebKit対応
・ 自動待機・高速
解説
PlaywrightはMicrosoftが主導するモダンなブラウザ自動化ツールです。クロスブラウザ対応、自動待機、優れたデバッグ機能などを備え、Seleniumの課題を多く解決しています。
⸻
- Playwrightの強み
スライド内容
・ Locator API
・ 安定したテスト
// Locator API の使用例(人が書くテスト)
1 | const emailInput = page.locator('input[type="email"]'); |
※ Locator API は「操作を安定させるための抽象」であり、
ページの状態を理解するための snapshot とは目的が異なります。
解説
PlaywrightのLocator APIは、単なるDOM検索ではなく、要素が操作可能になるまで自動で待機します。テストを書く人が「どの要素を操作したいか」を明示し、その操作を確実に成功させるための仕組みです。これによりテストのフレーク性が大幅に低減します。
⸻
- RustとPlaywright
スライド内容
・ Rust bindingsの登場
・ playwright-rs
解説
Playwright自体はNode.jsが中心ですが、近年はRustから利用するためのplaywright-rsのようなバインディングも登場しています。Rustプロジェクト内でE2Eテストを完結できる点が特徴です。
⸻
- Rust + Playwrightの位置づけ
スライド内容
・ 非公式バインディング
・ Playwright Serverを利用
解説
RustのPlaywrightバインディングは、内部的にはNode.jsのPlaywright Serverを呼び出しています。つまりPlaywrightの能力をそのままRustから使える構成です。
⸻
- 新しい課題:AI Agent
スライド内容
・ LLMがブラウザを操作
・ DOMは複雑すぎる
解説
LLMがブラウザを操作する場合、DOM構造やCSSセレクタは情報量が多すぎます。AIにとっては「どこをクリックすればいいか」を判断するのが難しいという問題が出てきました。
⸻
- Accessibility Treeとは
スライド内容
・ ブラウザ内部の語義構造
・ role / name / state
解説
Accessibility Treeは、スクリーンリーダーなどのためにブラウザが内部で持っている語義的なツリー構造です。ボタン、テキストボックスといった人間向けの意味が明確に表現されています。
⸻
- DOMとAccessibility Treeの違い
スライド内容
・ DOM:構造中心
・ A11y Tree:意味中心
解説
DOMはレイアウトや実装の都合が反映されますが、Accessibility Treeは人間が理解しやすい意味に最適化されています。AIにとってはこちらの方が扱いやすい情報です。
⸻
- Playwright と Accessibility Tree(API例)
スライド内容
・ Playwright は A11y Snapshot を取得可能
const snapshot = await page.accessibility.snapshot();
console.log(snapshot);
実行結果例(抜粋)
1 | { |
解説
Playwright はブラウザ内部の Accessibility Tree を直接取得できます。
⸻
- しかし問題点
スライド内容
・ 情報量が多い
・ AI向けではない
解説
ただし、このままでは情報量が多く、AI が扱うには前処理が必要です。Playwrightが返すAccessibility Treeは忠実ですが、そのままでは情報量が多く、AIが直接扱うには不向きです。ここに新しい抽象化の余地があります。
⸻
- agent-browserとは
スライド内容
・ Vercel Labs
・ AI Agent向けCLI
解説
agent-browserはVercel Labsが開発した、AI Agent向けのブラウザ操作CLIです。Playwrightの上に構築されていますが、目的が明確に異なります。
⸻
- Snapshot + Refモデル(具体例+実行結果)
スライド内容
・ Accessibility Tree から生成
・ 可操作要素のみ抽出
・ 安定した Ref(1, 2…)
1 | agent-browser snapshot |
実行結果例
1 | @e1 heading "Log in to Miro" |
解説
この出力は agent-browser が Accessibility Tree を取得し、可操作要素だけを抽出した結果です。DOM の階層や class 名は一切含まれておらず、AI Agent はこの一覧を「現在可能な操作の集合」として扱えます。
⸻
- Token削減の効果
スライド内容
・ DOM:数千token
・ Snapshot:数百token
解説
この設計により、LLMに渡す情報量を大幅に削減できます。AIにとって非常に重要なポイントです。
⸻
- CLIベースの利点(Markdown例付き)
スライド内容
・ コード生成不要
・ コマンド指向
・ LLM に最適化
1 | agent-browser open https://miro.com/login/ |
解説
このように、AI はコードではなく「操作手順」をそのまま列挙するだけです。Playwright スクリプトを生成する必要がなく、推論と実行を分離できます。
⸻
- Playwrightとの関係
スライド内容
・ 代替ではない
・ 上位レイヤー
解説
agent-browserはPlaywrightを置き換えるものではありません。Playwrightの能力をAI向けに再構成した上位レイヤーです。
⸻
- 使い分け指針
スライド内容
・ テスト:Playwright
・ Agent:agent-browser
解説
人が書くテストや厳密な検証にはPlaywright、AI Agentによる探索的操作にはagent-browserが適しています。
⸻
- agent-browser と playwright-mcp の比較(例付き)
スライド内容
・ CLI vs MCP Server
・ 操作モデルの違い
1 | # agent-browser |
1 | # playwright-mcp |
解説
agent-browser は ref を中心とした逐次コマンド実行モデルです。一方 playwright-mcp は Tool API を介して構造化された操作を行います。統合先が CLI か IDE か、という違いが大きな分岐点です。
⸻
- 将来像
スライド内容
・ AI + Browser
・ 意味ベース操作
解説
今後はDOMではなく、意味ベースでブラウザを操作する流れが強まると考えられます。Accessibility Treeはその中心技術です。
⸻
- デモ例:Miroログイン操作(実行結果比較)
スライド内容
1 | # 初期状態 |
Snapshot(入力前)
1 | @e1 heading "Log in to Miro" |
Snapshot(画面遷移後)
1 | @e1 heading "Enter your password" |
解説
ここで重要なのは、操作後に snapshot を再取得する点です。画面遷移により可操作要素の集合が変化し、Ref の意味も更新されます。agent-browser では「ページが変わったら必ず snapshot」を基本原則とします。
⸻
- まとめ
スライド内容
・ Playwrightは基盤技術
・ agent-browserとplaywright-mcpは用途別
・ Accessibility Treeが鍵
解説
最後のまとめです。Playwrightは依然として強力な基盤技術です。その上で、AI Agent 向けには agent-browser や playwright-mcp といった新しい抽象化が登場しています。DOMではなく、Accessibility Tree を基盤にした意味ベース操作が、今後のブラウザ自動化の中心になっていきます。