<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Playwright on K-Life Hack | システムアーキテクチャ &amp; DevOps</title><link>https://klifehack.com/tags/playwright/</link><description>Recent content in Playwright on K-Life Hack | システムアーキテクチャ &amp; DevOps</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Wed, 09 Sep 2026 10:03:03 +0900</lastBuildDate><atom:link href="https://klifehack.com/tags/playwright/index.xml" rel="self" type="application/rss+xml"/><item><title>Playwright MCPによるアクセシビリティツリー基盤のAIブラウザ操作アーキテクチャ</title><link>https://klifehack.com/p/playwright-mcp-browser-automation-architecture/</link><pubDate>Wed, 09 Sep 2026 10:03:03 +0900</pubDate><guid>https://klifehack.com/p/playwright-mcp-browser-automation-architecture/</guid><description>&lt;p&gt;Webブラウザの自動テストやE2E検証において、CSSセレクタやXPathのハードコードに依存した実装は、UIの微細な変更や動的なクラス名難読化（CSS-in-JS、Tailwind、本番ビルドのミニファイ）によって容易に破損します。また、近年のLLMやマルチモーダルモデルを用いたスクリーンショット座標推定アプローチは、画面解像度の違いやレスポンシブなレンダリングの揺らぎに弱く、非決定論的な操作エラーを引き起こしがちです。&lt;/p&gt;&#10;&lt;p&gt;こうした運用の摩擦を解消するため、Microsoftエコシステムにおいて策定が進むModel Context Protocol (MCP) をベースとした「Playwright MCP」が導入されています。本稿では、Playwright MCPが採用するアクセシビリティツリー（A11y Tree）スナップショット機構のアーキテクチャと、各種MCPクライアント環境への導入手順、および運用時の障害対策について整理します。&lt;/p&gt;&#10;&lt;h2 id="構造的アプローチaccessibility-tree-snapshotの仕組み"&gt;構造的アプローチ：Accessibility Tree Snapshotの仕組み&#10;&lt;/h2&gt;&lt;p&gt;Playwright MCPは、ピクセル単位の画像認識や装飾的な&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;タグのネスト構造ではなく、OSやスクリーンリーダーが解釈するアクセシビリティツリー（Accessibility Tree）をコンテキストとしてLLMへ渡します。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[ Web Page / Raw DOM Tree ]&#10; │&#10; ▼&#10;[ Accessibility Tree Engine (Playwright) ]&#10; ├── セマンティックロール抽出 (button, textbox, link)&#10; ├── 状態・属性解析 (aria-*, expanded, checked)&#10; └── 決定論的Element Referenceの発行&#10; │&#10; ▼&#10;[ LLM Context Window (構造化テキスト表現) ]&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;このアーキテクチャにより、以下の優位性が得られます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;b&gt;セレクタ破損の排除&lt;/b&gt;: 要素の役割（Role）やAccessible Nameを基準に操作対象を同定するため、CSSクラス名の変更やDOM階層の変更によるスクリプト破壊を防ぎます。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;トークン効率の最適化&lt;/b&gt;: 画面全体のピクセルデータや長大なHTML文字列をLLMへ送信せず、意味情報のみに削ぎ落とされたツリーを送信するため、コンテキストウィンドウの消費を抑制します。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;決定論的操作&lt;/b&gt;: 各要素に一意な参照インデックス（Element Reference）が付与され、クリックや入力の対象が明確に決定されます。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="mcpサーバの構成とクライアント設定"&gt;MCPサーバの構成とクライアント設定&#10;&lt;/h2&gt;&lt;h3 id="動作要件"&gt;動作要件&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Node.js: 20.x系以上を推奨&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="クライアント設定mcpservers"&gt;クライアント設定（mcpServers）&#10;&lt;/h3&gt;&lt;p&gt;Claude Desktop、Cursor、Cline、VS CodeなどのMCPクライアント設定ファイル（&lt;code&gt;claude_desktop_config.json&lt;/code&gt;やCursorの設定領域）に以下のJSONブロックを追加します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;playwright&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;@playwright/mcp@latest&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="実行ループと内部ステートマシン"&gt;実行ループと内部ステートマシン&#10;&lt;/h2&gt;&lt;p&gt;Playwright MCPは、単一の静的コマンド実行ではなく、AIエージェントとブラウザ間の閉ループ（Closed-loop）ステートマシンとして動作します。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐&#10;│ AI Agent │&#10;└───────────────────────────┬────────────────────────────┘&#10; │ (1) セッション開始 / ナビゲーション指示&#10; ▼&#10;┌────────────────────────────────────────────────────────┐&#10;│ Browser Process (Playwright) │&#10;└───────────────────────────┬────────────────────────────┘&#10; │ (2) ページロード完了・A11yスナップショット生成&#10; ▼&#10;┌────────────────────────────────────────────────────────┐&#10;│ Accessibility Snapshot Generator │&#10;└───────────────────────────┬────────────────────────────┘&#10; │ (3) セマンティックツリー返却&#10; ▼&#10;┌────────────────────────────────────────────────────────┐&#10;│ AI Agent │&#10;│ (要素参照の特定と実行アクションの推論) │&#10;└───────────────────────────┬────────────────────────────┘&#10; │ (4) 操作コマンド送信 (Click, Fill 等)&#10; ▼&#10;┌────────────────────────────────────────────────────────┐&#10;│ Playwright MCP Execution Pipeline │&#10;└───────────────────────────┬────────────────────────────┘&#10; │ (5) DOM状態更新の再キャプチャ&#10; ▼&#10; [ 次のステップへ継続 ]&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="提供される主要インターフェース"&gt;提供される主要インターフェース&#10;&lt;/h2&gt;&lt;p&gt;Playwright MCPがクライアントへ公開する代表的なツールインターフェースは以下の通りです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;browser_navigate&lt;/code&gt;: URLへの遷移、履歴のバック/フォワード、リロードを制御。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;A11y Tree Target Resolution&lt;/code&gt;: ロールベースで識別された要素へのClickイベントディスパッチ。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Semantic Form Handlers&lt;/code&gt;: フォームフィールドに対する文字列入力、チェックボックス切り替え、ドロップダウン選択。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Screenshot Engine&lt;/code&gt;: フルページまたは要素単位での画面キャプチャ抽出。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Storage State Persistence&lt;/code&gt;: セッション情報（Cookie、&lt;code&gt;localStorage&lt;/code&gt;）をシリアライズし、認証バイパスやテストシナリオの再利用を実現。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;browser_run_code_unsafe&lt;/code&gt;: LLMから直接任意のPlaywrightスクリプトを実行（※サンドボックス外実行となるため、隔離された信頼できる環境でのみ利用）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="troubleshooting"&gt;Troubleshooting&#10;&lt;/h2&gt;&lt;h3 id="1-ブラウザバイナリの未インストールエラー"&gt;1. ブラウザバイナリの未インストールエラー&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;npx @playwright/mcp@latest&lt;/code&gt; 実行時、ホスト環境にChromium等のブラウザバイナリが存在しない場合、プロセス起動直後にエラーが発生します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Error: browserType.launch: Executable doesn&amp;#39;t exist at /root/.cache/ms-playwright/chromium-1155/chrome-linux/chrome&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;╔═════════════════════════════════════════════════════════════════════════╗&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;║ Looks like Playwright was just installed or updated. ║&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;║ Please run the following command to download new browsers: ║&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;║ ║&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;║ npx playwright install ║&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;╚═════════════════════════════════════════════════════════════════════════╝&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;対応手順:&lt;/b&gt; ホスト環境またはコンテナ内で事前にブラウザ依存関係をインストールします。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npx playwright install --with-deps chromium&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-ヘッドレス環境におけるシステム依存ライブラリの不足"&gt;2. ヘッドレス環境におけるシステム依存ライブラリの不足&#10;&lt;/h3&gt;&lt;p&gt;Linuxサーバ環境で実行する際、GUIレンダリングに必要な共有ライブラリが不足していると、&lt;code&gt;host system dependencies&lt;/code&gt;エラーが発生します。この場合はディストリビューションに応じたパッケージの追加が必要です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo npx playwright install-deps&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-デプロイ検証ログの確認"&gt;3. デプロイ検証ログの確認&#10;&lt;/h3&gt;&lt;p&gt;MCPプロセスが正しく常駐し、JSON-RPCプロトコルを受け付ける状態にあるかは、標準出力およびプロセス一覧で確認します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ps aux | grep playwright&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;node /usr/local/bin/npx @playwright/mcp@latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/root/.cache/ms-playwright/chromium-1155/chrome-linux/chrome --disable-field-trial-config --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --headless=new --remote-debugging-pipe&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration-notes"&gt;Configuration Notes&#10;&lt;/h2&gt;&lt;p&gt;Playwright MCPは、従来の「コードによる手続き型テスト」と「視覚モデルによる曖昧なUI操作」の双方における課題を解決するアプローチです。アクセシビリティツリーを標準インターフェースとして用いることで、堅牢なセマンティック解析に基づいたブラウザ自動化パイプラインが構築できます。実運用への組み込みにあたっては、認証状態のシリアライズ管理や実行権限の制御を適切に設計することが不可欠です。&lt;/p&gt;&#10;</description></item></channel></rss>