Nexta Tech BlogPublication Pro🔍Chrome DevTools MCP vs Playwright MCP - どちらを選ぶべき?実測で比較tetsu.k2025/11/06に公開2025/11/094件ChromeBlazorPlaywrightModel Context ProtocolClaude CodetechGitHubで編集を提案Nexta Tech BlogPublication Pro日本の基幹産業・製造業を変える。 1500カラム/300機能を有する大規模SaaSを開発中。 開発の裏側や、AI活用の試行錯誤をオープンに発信します。 フルリモート体制で仲間を募集中!!Discussionogadra23日前マサカリ失礼します。Playwright MCPのコントリビューターです。 記事には アクセシビリティツリーからAIがセレクターを自動生成 操作時にはAIが適切なセレクター(name、role、text)を選択 例: await page.locator('#Name').fill('John Doe') とありますが、実際にはLLMはセレクタを選択していることはなく、Chrome DevTools MCP同様にsnapshotに含まれた識別子を元に指示しています。 要素の識別方法においてChrome DevTools MCPとPlaywright MCPの違いはありません。 実行されるPlaywrightコードが示されるのは、LLMの指示内容に含まれるものではなく、Playwright MCP側のレスポンスに含まれる内容になります。 たとえば、記事にある「textboxを埋める」処理であればmcp__playwright__browser_fill_form関数が呼ばれます。その引数としては name : ログとしての引数 type : 今回の場合はtextbox ref : Chrome DevTools MCPのuidと同等 value : 今回の場合は Jone Dae が渡されます。 https://github.com/microsoft/playwright/blob/daae9b5d7964432bed519ca3b462ca89e1012566/packages/playwright/src/mcp/browser/tools/form.ts#L29-L34 その後ツールが実行され、textboxをPlaywright MCPが埋めた後に、Playwright MCPが説明のため、Playwrightで実際に実行する場合どのようなコードを書けばよいか?ということをレスポンスに含めています。 https://github.com/microsoft/playwright/blob/daae9b5d7964432bed519ca3b462ca89e1012566/packages/playwright/src/mcp/browser/tools/form.ts#L43-L46 ブラウザ操作におけるPlaywright MCPとChrome DevTools MCPの違いは、この「Playwrightではどのようなコードを書けば同等の処理が実行できるか?」という内容がMCPレスポンスに含まれるかどうかの違いと、アクセシビリティツリーにおける情報量の差です。後者は記事内に言及がなかったので省略します。 tetsu.k23日前に更新ご指摘ありがとうございます! 認識が甘く、大変失礼いたしました。 ※記事を冒頭に訂正セクションを追加し、本文も全面的に修正しました。 Playwright MCPコントリビューターの方から直接ご指摘いただけて光栄です。 業務で使うために調べているところでしたので、正確な理解ができて本当に助かりました。 Playwright MCPの仕組みを理解でき、大変勉強になりました。 今後も活用させていただきます。 改めて、貴重なご指摘ありがとうございました! ogadra22日前修正ありがとうございます! 自分自身に知見を溜めておきながら発信していなかった自分より、積極的にアウトプットしているほうが素晴らしいと思います。 ぜひ今後も間違いを恐れずに発信いただければと思います! tetsu.k22日前何というありがたいお言葉…!😭 勇気が持てました。 引き続き、積極的にアウトプットに励みます! 返信を追加
ogadra23日前マサカリ失礼します。Playwright MCPのコントリビューターです。 記事には アクセシビリティツリーからAIがセレクターを自動生成 操作時にはAIが適切なセレクター(name、role、text)を選択 例: await page.locator('#Name').fill('John Doe') とありますが、実際にはLLMはセレクタを選択していることはなく、Chrome DevTools MCP同様にsnapshotに含まれた識別子を元に指示しています。 要素の識別方法においてChrome DevTools MCPとPlaywright MCPの違いはありません。 実行されるPlaywrightコードが示されるのは、LLMの指示内容に含まれるものではなく、Playwright MCP側のレスポンスに含まれる内容になります。 たとえば、記事にある「textboxを埋める」処理であればmcp__playwright__browser_fill_form関数が呼ばれます。その引数としては name : ログとしての引数 type : 今回の場合はtextbox ref : Chrome DevTools MCPのuidと同等 value : 今回の場合は Jone Dae が渡されます。 https://github.com/microsoft/playwright/blob/daae9b5d7964432bed519ca3b462ca89e1012566/packages/playwright/src/mcp/browser/tools/form.ts#L29-L34 その後ツールが実行され、textboxをPlaywright MCPが埋めた後に、Playwright MCPが説明のため、Playwrightで実際に実行する場合どのようなコードを書けばよいか?ということをレスポンスに含めています。 https://github.com/microsoft/playwright/blob/daae9b5d7964432bed519ca3b462ca89e1012566/packages/playwright/src/mcp/browser/tools/form.ts#L43-L46 ブラウザ操作におけるPlaywright MCPとChrome DevTools MCPの違いは、この「Playwrightではどのようなコードを書けば同等の処理が実行できるか?」という内容がMCPレスポンスに含まれるかどうかの違いと、アクセシビリティツリーにおける情報量の差です。後者は記事内に言及がなかったので省略します。 tetsu.k23日前に更新ご指摘ありがとうございます! 認識が甘く、大変失礼いたしました。 ※記事を冒頭に訂正セクションを追加し、本文も全面的に修正しました。 Playwright MCPコントリビューターの方から直接ご指摘いただけて光栄です。 業務で使うために調べているところでしたので、正確な理解ができて本当に助かりました。 Playwright MCPの仕組みを理解でき、大変勉強になりました。 今後も活用させていただきます。 改めて、貴重なご指摘ありがとうございました! ogadra22日前修正ありがとうございます! 自分自身に知見を溜めておきながら発信していなかった自分より、積極的にアウトプットしているほうが素晴らしいと思います。 ぜひ今後も間違いを恐れずに発信いただければと思います! tetsu.k22日前何というありがたいお言葉…!😭 勇気が持てました。 引き続き、積極的にアウトプットに励みます! 返信を追加
tetsu.k23日前に更新ご指摘ありがとうございます! 認識が甘く、大変失礼いたしました。 ※記事を冒頭に訂正セクションを追加し、本文も全面的に修正しました。 Playwright MCPコントリビューターの方から直接ご指摘いただけて光栄です。 業務で使うために調べているところでしたので、正確な理解ができて本当に助かりました。 Playwright MCPの仕組みを理解でき、大変勉強になりました。 今後も活用させていただきます。 改めて、貴重なご指摘ありがとうございました!
ogadra22日前修正ありがとうございます! 自分自身に知見を溜めておきながら発信していなかった自分より、積極的にアウトプットしているほうが素晴らしいと思います。 ぜひ今後も間違いを恐れずに発信いただければと思います!
Discussion
マサカリ失礼します。Playwright MCPのコントリビューターです。
記事には
とありますが、実際にはLLMはセレクタを選択していることはなく、Chrome DevTools MCP同様にsnapshotに含まれた識別子を元に指示しています。
要素の識別方法においてChrome DevTools MCPとPlaywright MCPの違いはありません。
実行されるPlaywrightコードが示されるのは、LLMの指示内容に含まれるものではなく、Playwright MCP側のレスポンスに含まれる内容になります。
たとえば、記事にある「textboxを埋める」処理であれば
mcp__playwright__browser_fill_form関数が呼ばれます。その引数としてはtextboxuidと同等Jone Daeが渡されます。
その後ツールが実行され、textboxをPlaywright MCPが埋めた後に、Playwright MCPが説明のため、Playwrightで実際に実行する場合どのようなコードを書けばよいか?ということをレスポンスに含めています。
ブラウザ操作におけるPlaywright MCPとChrome DevTools MCPの違いは、この「Playwrightではどのようなコードを書けば同等の処理が実行できるか?」という内容がMCPレスポンスに含まれるかどうかの違いと、アクセシビリティツリーにおける情報量の差です。後者は記事内に言及がなかったので省略します。
ご指摘ありがとうございます!
認識が甘く、大変失礼いたしました。
※記事を冒頭に訂正セクションを追加し、本文も全面的に修正しました。
Playwright MCPコントリビューターの方から直接ご指摘いただけて光栄です。
業務で使うために調べているところでしたので、正確な理解ができて本当に助かりました。
Playwright MCPの仕組みを理解でき、大変勉強になりました。
今後も活用させていただきます。
改めて、貴重なご指摘ありがとうございました!
修正ありがとうございます!
自分自身に知見を溜めておきながら発信していなかった自分より、積極的にアウトプットしているほうが素晴らしいと思います。
ぜひ今後も間違いを恐れずに発信いただければと思います!
何というありがたいお言葉…!😭 勇気が持てました。
引き続き、積極的にアウトプットに励みます!