Vibe Test — Browser Testing Agent について
Vibe Testは、コーディングエージェント向けのコード認識型ブラウザーテストサーバー兼CLIです。ソースコードからシナリオを作成し、Playwrightで実行して、実行間の変化を追跡します。
主な機能
- 0114個のMCPブラウザーテストツール
- 02ソースコードからのルートとシナリオ抽出
- 03Playwrightによるブラウザーテスト実行
- 04回帰と修正の追跡
- 05HTMLテストレポート生成
活用シーン
- 01アプリのルートとフォームのテスト
- 02コード変更による回帰の確認
- 03未テストのルートとカバレッジ不足の特定
MCP 対応
MCPサーバーとしてAIエディターに14個のテストツールを提供し、コードベースのスキャン、ブラウザー探索、シナリオ実行、レポート生成を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
14掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 実行中のアプリケーションのベース URL(例: http://localhost:3000 または https://staging.myapp.com)。アプリが staging/dev URL で実行されている場合は、localhost ではなくその URL を指定してください。 |
| mode | enum | いいえ | fast = 高速なヒューリスティック スキャン。deep = ダイアログや機能を含む完全な抽出(デフォルト)。fast | deep |
| codebase_path | string | はい | プロジェクトルートディレクトリの絶対パス。 |
詳細
vibe-testing
AI コーディングエージェント向けの、コードを把握したブラウザーテストです。
製品サイト · npm · MCP Registry · Smithery · プライバシー · 公開状況
Awesome MCP Servers に掲載されています。ダウンロードバッジには npm のパッケージ累計ダウンロード数が表示されます。npx によるパッケージ取得もこの合計に含まれます。
vibe-testing はコードベースを読み込み、実際のルートとフィールド名を使ってテストを行い、実際の Playwright ブラウザーで実行します。何が壊れたかを記憶し、直近の変更で何が修正されたか、何がデグレードしたかを知らせます。MCP サーバーとして動作し、エディター(Claude Code、Cursor、Windsurf、VS Code Copilot、Roo Code)に 14 個のテストツールを提供するほか、スタンドアロン CLI としても利用できます。
このリポジトリは、release-qa スキルを備えた Agent Plugin でもあります。互換性のあるエージェントは、テストツールに加え、カバレッジ、エビデンス、回帰チェック、明確なリリース判定を含むシニア QA のワークフローを利用できます。
cd /path/to/your/project
npx vibe-testing@latest init
次にエディターを開いて、次のように伝えてください。
「このコードベースをスキャンして、http://localhost:3000 に対してテストしてください」
コードを把握したテストでできること
Playwright MCP はエージェントに手を与えます。vibe-testing はテストのワークフローを与えます。コードから導出したシナリオ、実行をまたいだ記憶、レポートを備えています。ステートレスなブラウザーツールにはできないことが 2 つあります。
1. 2 回実行すると、何を壊したかがわかります。 実行のたびに .vibe/run-snapshot.json に書き込み、前回の実行との差分を取ります。スキャンのたびに .vibe/route-manifest.json に書き込み、ルートの差分を取ります。2 回目の実行では、結果がずらりと並ぶ代わりに、デグレードと修正が表示されます。
Changes since last run
Fixed: /login
Regression: /checkout
New: /admin/users
同じ差分は、run_full_test と run_converge の snapshot_diff、および scan_codebase の route_changes としてエディターにも届きます。そのため、レポートをスクロールする人がいなくても、エージェントは「そのコミット後にチェックアウトが壊れた」と指摘できます。不安定なルート、動作するセレクター、計測されたタイムアウトも実行のたびに記憶されます。
2. ツール内部での LLM 呼び出しはゼロです。 合否の検証は、URL の変更、トーストの検出、API エラーなどに基づくヒューリスティックです。何をテストするかはエディターのモデルが判断し、ブラウザー操作と確認は vibe-testing が行います。API キーは不要で、すでに支払っているエディターのサブスクリプション以外に、実行ごとの費用もかかりません。
目次
- 仕組み
- MCP の設定(エディターごと)
- MCP ツールのリファレンス
- 推奨ワークフロー
- init コマンド
- CLI コマンド
- VIBE.md によるプロジェクトのガイダンス
- 設定(vibe.config.json)
- 対応フレームワーク
- 記憶と回帰検出
- よくある質問
仕組み
npx vibe-testing@latest init
|
Registers 14 MCP tools in your editor
|
You ask: "Test the checkout flow"
|
AI calls: scan_codebase -> get_context("checkout") -> login -> explore_page -> execute_scenario -> generate_report
|
HTML report opens in browser with screenshots of every step
テストケースを書く必要はありません。AI がソースコードを読み、実際のフィールド名やルートを把握して、ブラウザーを開き、すべてをテストして、問題のある箇所を表示します。
init では、次の処理も行います。
- インストールされている AI エディターを検出します
- vibe-test をグローバルなエディター設定(
~/.claude/settings.json、~/.cursor/mcp.jsonなど)に登録し、すべてのプロジェクト、すべてのセッションでツールを利用できるようにします - プロジェクトレベルの MCP 設定と AI 指示ファイルを作成します
- アプリの URL を自動検出します(
.env、vite.config、フレームワークのデフォルト設定を読み取ります) VIBE.md(テスト用の認証情報を編集します)とvibe.config.jsonを作成します- 対応する Playwright Chromium ビルドをインストールします
MCP の設定
Agent Plugin
エージェントが Agent Plugins 標準に対応している場合は、このリポジトリをプラグインとしてインストールします。ポータブルな release-qa スキルが含まれており、API キーなしで公開済みの npm MCP サーバーを起動します。
-
Cursor:
https://github.com/AishwaryShrivastav/vibe-testingを Agent Plugin として送信またはインストールします。 -
Claude Code:
claude plugin marketplace add AishwaryShrivastav/vibe-testing claude plugin install vibe-testing@vibe-testing -
その他の互換性のあるエージェント:
plugin.json、skills/、mcp.jsonを含むリポジトリのルートを読み込みます。
プラグインに対応していないエディターでは、以下の直接的な MCP と CLI の設定も引き続き利用できます。
MCPB バンドル
Claude Desktop やその他の MCPB ホストでは、ローカルバンドルを 1 つインストールできます。このリポジトリからビルドして検証します。
npm ci
npm run build:mcpb
成果物は artifacts/vibe-testing-<version>.mcpb に書き込まれます。バンドルの内容、検証手順、Smithery への引き渡し、Playwright Chromium の初回セットアップ要件については、MCPB 配布ガイドをご覧ください。
オプション 1:自動(推奨)
npx vibe-testing@latest init
インストール済みのエディターをすべて検出して設定します。これで完了です。
オプション 2:エディターごとの手動設定
Claude Code
~/.claude/settings.json に追加します(グローバル設定のため、すべてのプロジェクトで機能します)。
{
"mcpServers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
または、プロジェクトルートの .mcp.json に追加します(プロジェクトレベルのみ)。
{
"mcpServers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
Cursor
~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)に追加します。
{
"mcpServers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json に追加します。
{
"mcpServers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
VS Code(GitHub Copilot)
プロジェクトの .vscode/mcp.json に追加します。
{
"servers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
Roo Code / Cline
.roo/mcp.json に追加します。
{
"mcpServers": {
"vibe-test": {
"command": "npx",
"args": ["-y", "vibe-testing@latest", "--mcp"]
}
}
}
ローカルビルドから(開発用)
{
"mcpServers": {
"vibe-test": {
"command": "node",
"args": ["/path/to/vibe-testing/dist/mcp-server.js"]
}
}
}
MCP ツールのリファレンス
セットアップ後、AI エディターで利用できる 14 個のツール:
| ツール | 呼び出すタイミング | 戻り値 |
|---|---|---|
configure | 新しいプロジェクトでは、まずここから始めます。フレームワーク、サーバー、認証を検出します | 構造化されたセットアップ結果と冪等性のあるプロジェクトファイル |
scan_codebase | 常に最初に実行します。ソースコードを読み、ルート/フォーム/テスト/不足箇所を見つけます | ルート、フォーム、カバレッジマップ、生成されたシナリオ、前回のスキャン以降の route_changes |
get_context | テスト手順を書く前に実行します。機能に関連するソースファイルを返します | 実際のフィールド名とセレクターを含むソースコード |
login | アプリで認証が必要な場合に実行します | ログイン後のスクリーンショット、トークンの状態、観測された API 呼び出し |
scan_page_elements | ページ上のすべてのインタラクティブ要素を確認する場合に実行します | セレクター付きの要素リストとページのスクリーンショット |
explore_page | 「すべて正常に動作するか」を広くテストする場合に実行します | 操作結果、API 呼び出し、エラー、スクリーンショット |
execute_scenario | 特定のテスト手順を実行します | 手順ごとのログとスクリーンショット |
get_coverage | カバレッジマップと未テストのルートを確認します | カバレッジ項目、不足箇所、利用可能なシナリオ |
suggest_tests | 探索後にカバレッジの不足箇所を見つけます | 優先順位付きの、すぐ実行できる手順付きシナリオ |
take_screenshot | 手早く視覚的に検証します | 任意の URL のスクリーンショット |
generate_report | HTML レポートを作成します(自動で開きます) | レポートのパスと概要 |
run_full_test | 1 回の実行でスキャン、実行、探索、レポート作成を行います | 全結果と前回の実行との差分 snapshot_diff |
run_converge | しきい値に達するまで反復テストを行います | すべてのラウンドの概要と前回の実行との差分 snapshot_diff |
cleanup | ブラウザーを閉じ、リソースを解放します | - |
ツールの入力
scan_codebase
{
"codebase_path": "/path/to/project",
"url": "http://localhost:3000",
"mode": "deep"
}
get_context
{ "feature": "login" }
{ "feature": "/checkout" }
{ "feature": "user profile form" }
login
{
"email": "[email protected]",
"password": "TestPass123!",
"login_url": "/login"
}
scan_page_elements / explore_page
{
"route": "/dashboard",
"authenticated": true
}
execute_scenario
{
"scenario": {
"id": "create-item",
"name": "Create a new item",
"route": "/items",
"steps": [
{ "action": "navigate", "url": "/items", "description": "Open items page" },
{ "action": "click", "selector": "text=Add Item", "description": "Open create form" },
{ "action": "fill", "selector": "[name='title']", "value": "Test Item", "description": "Fill title" },
{ "action": "fill", "selector": "[name='description']", "value": "Test description", "description": "Fill description" },
{ "action": "click", "selector": "button[type='submit']", "description": "Submit form" }
],
"expected_outcome": "New item appears in the list",
"requires_auth": true
}
}
ステップアクション:navigate、fill、click、select、wait、assert、upload
CLI と MCP は同じシナリオランナーを使用します。assert ステップは、指定されたすべての条件を評価します。
selector:対象が表示されている必要があります。CSS、text=、label=、placeholder=に対応しており、名前付きロケーターは完全一致で照合されます。value:選択された要素上、またはセレクターが指定されていない場合はページ本文上の表示テキストに、この文字列が含まれている必要があります。url:現在の URL が、この絶対 URL、または設定済みのベース URL に対して解決されたパスと完全に一致する必要があります。クエリとフラグメントも含めて照合されます。
例:
{ "action": "assert", "selector": "#confirmation", "value": "Saved", "url": "/settings", "timeout": 5000, "description": "Check saved settings" }
これらのチェックは、各チェックについてステップのタイムアウト(デフォルトは 15000 ms)まで待機します。アサーションに失敗すると、シナリオを停止して失敗したステップと理由を記録し、status: "fail" を返します。MCP では isError: true も設定されます。明示的な条件は、既存の認証チェックとフォーム API チェックの後に判定基準として使用されます。description と expected_outcome の説明文は、実行可能なアサーションではありません。selector、value、url のいずれも指定されていない場合、assert はページの健全性のみをチェックします。表示されている本文テキストが少なくとも 10 文字あり、空でないエラー表示が見えていないことを確認します。この互換性チェックでは、記述された業務上の結果が達成されたことは証明されません。
upload では、ファイル入力用の selector と、value に空でないファイルパスが必要です。相対パスはコードベースのルートを基準に解決されます。非表示のファイル入力にも対応しています。ファイルが存在しない場合、ディレクトリが指定された場合、対象が見つからない場合、または対象がファイル入力ではない場合は、status: "error" を返します。このアクションは Playwright を使用して 1 つのファイルを選択します。アプリケーション側での処理を確認するには、結果の UI に対するアサーションを追加してください。ネイティブのファイル選択ダイアログは自動操作しません。
シナリオには、少なくとも 1 つのステップを含める必要があります。不明なアクションはエラーになります。
take_screenshot
{ "url": "/settings", "authenticated": true, "full_page": false }
run_full_test
{ "url": "http://localhost:3000", "codebase_path": "/path/to/project", "mode": "deep" }
run_converge
{
"url": "http://localhost:3000",
"max_followup_rounds": 4,
"target_pass_rate": 0.92,
"max_high_severity_gaps": 2
}
推奨ワークフロー
テストセッション全体
AI エディターに次のように伝えます。
Scan this codebase and test it against http://localhost:3000.
Log in with [email protected] / pass123. Explore the dashboard and
settings pages, run the suggested tests, and generate a report.
AI は次の処理を行います。
scan_codebaseで、ルート、フォーム、既存のテストを把握しますget_context("login")で、実際のログインフォームのソースコードを読み込みますloginで、実際のブラウザーから認証しますexplore_page("/dashboard")で、すべてをクリックし、問題が起きる箇所を確認しますexplore_page("/settings")で、同様に確認しますsuggest_testsで、テスト範囲の不足を見つけますexecute_scenariox N で、対象を絞ったテストフローを実行しますgenerate_reportで、HTML レポートを自動的に開きますcleanupで、ブラウザーを閉じます
特定の機能をテストする
Test the checkout flow using vibe-test. Get context for checkout,
then run the full purchase flow with card number 4242424242424242.
AI は次の処理を行います。
scan_codebase(まだ実行していない場合)get_context("checkout")で、CheckoutForm.tsx、api/orders/route.tsなどを読み込みますloginexecute_scenarioで、ソースコードをもとに実際のフォームフィールドに入力しますgenerate_report
バグ修正を検証する
I fixed the login redirect bug. Use vibe-test to confirm it's working.
AI は次の処理を行います。
loginで、ログインフローをテストしますtake_screenshotで、ログイン後の状態を視覚的に確認します- 画面で確認できた内容を報告します
問題箇所を見つける
Explore every page and tell me what's broken.
AI はすべてのルートで explore_page を実行し、API エラー、壊れた要素、失敗した操作を収集します。その後、問題のある項目に高い優先度を付けて suggest_tests を実行します。
init コマンド
npx vibe-testing@latest init [options]
作成されるファイル:
| ファイル | 場所 | 目的 |
|---|---|---|
.mcp.json | プロジェクトルート | Claude Code の MCP 設定(プロジェクト単位) |
~/.claude/settings.json | グローバル | Claude Code の MCP 設定(すべてのプロジェクト) |
.cursor/mcp.json | プロジェクトルート | Cursor の MCP 設定 |
~/.cursor/mcp.json | グローバル | Cursor の MCP 設定(すべてのプロジェクト) |
.cursor/rules/vibe-test.mdc | プロジェクト | Cursor のルール、alwaysApply: true |
.windsurfrules | プロジェクト | Windsurf の指示 |
~/.codeium/windsurf/mcp_config.json | グローバル | Windsurf の MCP 設定(すべてのプロジェクト) |
.vscode/mcp.json | プロジェクト | VS Code Copilot の MCP 設定 |
.github/copilot-instructions.md | プロジェクト | GitHub Copilot の指示 |
.roo/mcp.json | プロジェクト | Roo Code の MCP 設定 |
CLAUDE.md | プロジェクト | Claude Code のセッション指示 |
AGENTS.md | プロジェクト | 汎用エージェント向けの指示(Codex、Devin、Zed) |
VIBE.md | プロジェクト | テストのガイダンス。認証情報を使って編集してください |
vibe.config.json | プロジェクト | 設定。URL はプロジェクトから自動検出されます |
オプション:
npx vibe-testing@latest init # auto-detect editors, register globally + project
npx vibe-testing@latest init --no-global # project-level only, skip global registration
npx vibe-testing@latest init --skip-browser-install
npx vibe-testing@latest init --editor cursor # only configure Cursor
npx vibe-testing@latest init --editor claude-code windsurf
init の実行後、VIBE.md を編集して、ログイン URL とテスト用認証情報を設定してください。
CLI コマンド
# Set up in current project
npx vibe-testing@latest init
# Install or repair the matching browser build
npx vibe-testing@latest install-browser
# Run tests against a URL
npx vibe-testing@latest run http://localhost:3000
npx vibe-testing@latest run https://staging.myapp.com --mode deep
npx vibe-testing@latest run http://localhost:3000 --codebase /path/to/project --scope /login /dashboard
# Iterative testing until coverage thresholds
npx vibe-testing@latest converge http://localhost:3000
npx vibe-testing@latest converge http://localhost:3000 --max-rounds 6 --target-pass-rate 0.95
# Open last report in browser
npx vibe-testing@latest report
# Reset memory and screenshots for a clean run
npx vibe-testing@latest reset
run のオプション
| オプション | デフォルト | 説明 |
|---|---|---|
--mode fast|deep | deep | fast:クイックスキャン。deep:完全な機能抽出と探索 |
--no-headed | - | ブラウザーをヘッドレスで実行します(デフォルト:表示) |
--codebase <path> | cwd | プロジェクトルートへのパス |
--scope <routes...> | all | 指定したルートのみをテストします |
-c <path> | vibe.config.json | 設定ファイルのパス |
run と converge は、シナリオが見つからない場合、または実行バッチが空の場合に、ゼロ以外の終了コードで失敗します。
MCP の run_full_test と run_converge は、このような場合に isError: true を返します。空の実行では、成功した実行スナップショットは書き込まれず、以前のレポートも置き換えられません。
converge のオプション
| オプション | デフォルト | 説明 |
|---|---|---|
--max-rounds <n> | 4 | ベースライン後の最大追加ラウンド数 |
--target-pass-rate <r> | 0.92 | 合格率がこの値(0~1)に達した時点で停止します |
--max-gaps <n> | 2 | 重大なギャップと重要なギャップの合計がこの数まで減った時点で停止します |
VIBE.md、プロジェクトのガイダンス
プロジェクトルートに VIBE.md を作成してください。vibe-testing は毎回の実行時に自動で読み込みます。
## Login URL
/login
## Test Credentials
- Email: [email protected]
- Password: TestPass123!
## Never Automate
- delete account
- cancel subscription
- [data-testid="danger-zone"]
- .billing-section
## Known Flaky
- /notifications (WebSocket dependent, skip or expect retry)
- /live-feed
## Notes
- Admin panel at /admin, use [email protected] / adminpass
- Dashboard data loads async, wait for [data-loaded="true"]
- Profile page: click "Edit Profile" before form fields appear
完全なテンプレートについては、VIBE.example.md を参照してください。
設定
vibe.config.json
init が URL を自動検出して自動作成します。必要に応じて編集してください。
{
"url": "http://localhost:3000",
"mode": "deep",
"auth": {
"strategy": "credentials",
"login_url": "/login",
"credentials": {
"email": "[email protected]",
"password": "TestPass123!"
}
},
"never_interact": [
"delete account",
"cancel subscription",
"[data-testid='danger-zone']"
],
"scope": {
"include": ["/**"],
"exclude": ["/admin/**", "/api/**"],
"max_routes": 30,
"seed_routes": ["/live/dev-mode-a-now"]
},
"browser": {
"headed": true,
"slowMo": 40,
"timeout": 30000
}
}
| キー | 説明 |
|---|---|
url | アプリの URL。localhost またはステージング環境です。init によって自動検出されます。 |
mode | fast(ヒューリスティックなスキャン)または deep(完全な抽出と探索) |
auth.strategy | credentials(フォームログイン)、basic(HTTP Basic Auth)、または skip |
auth.login_url | 標準的でないパスのため、キーワードマッチングでは検出できない場合に指定するログインルート |
auth.credentials | ログインと生成されるシナリオに使うログイン認証情報。実行間で保持されます |
never_interact | 探索時にスキップするテキストパターンまたは CSS セレクター |
scope.include | 含めるルートパターン。デフォルトの /** は / とすべてのネストされたルートを含みます。* は 1 つのセグメント内にとどまり、末尾の /** はサブルートのルートとその子孫を含みます。その他の文字はリテラルとして扱われます。 |
scope.exclude | テスト対象から除外するルートパターン |
scope.max_routes | 1 回の実行でテストするルート数の上限 |
scope.seed_routes | パーサーが列挙できない動的セグメントを含むルートの具体的な URL(例:/live/[slug] は /live/dev-mode-a-now になります)。シードされた各ルートは、動的な親ルートの requires_auth とソースファイルを継承します。 |
browser.headed | true = ブラウザーを表示します。CLI のデフォルトは true、MCP サーバーのデフォルトは false(ヘッドレス)で、ポップアップウィンドウがエディターのセッションを妨げないようにします。 |
browser.slowMo | 操作間のミリ秒数(デバッグに便利です) |
routes | auto(デフォルト)はコードベースからルートを検出します。config は設定に明示的に記載されたルートのみを使用します。 |
対応フレームワーク
| フレームワーク | ルート | API エンドポイント | フォーム |
|---|---|---|---|
| Next.js App Router | はい | はい | はい |
| Next.js Pages Router | はい | はい | はい |
| Next.js(src/ バリアント) | はい | はい | はい |
| React SPA(react-router) | はい | - | はい |
| Vue + Vite(vue-router) | はい | - | はい |
| Nuxt | はい | はい | はい |
| SvelteKit | はい | はい | はい |
| Express / Fastify | - | はい | はい |
| モノレポ(Turborepo、pnpm、Lerna) | はい | はい | はい |
既存のテストファイルも読み込まれ、カバレッジマップの作成に使われます。Jest、Vitest、Playwright、Cypress の各テストスイートが解析されます。
メモリとリグレッション検出
vibe-testing は実行を重ねるごとに学習し、状態を .vibe/ に保存します。
- 動作するセレクター:
[name='email']が/loginで機能したことを記憶し、次回の実行で使用します - ルートの所要時間:測定した読み込み時間に基づいてタイムアウトを調整します
- 認証情報:初回ログイン後に保存され、自動的に再利用されます
- 不安定なルート:失敗率の高いルートを追跡し、再試行対象としてマークします
- スキップするルート:一貫してエラーになるルート(URL パラメーターが必要なもの)は自動的にスキップされます
- ルートマニフェスト(
.vibe/route-manifest.json):各スキャンで前回の結果との差分を取り、新規および削除されたルートがscan_codebaseの結果のroute_changesとして表示されるため、AI はすぐにそれらをテスト対象にできます - 実行スナップショット(
.vibe/run-snapshot.json):各実行でルートごとの成功・失敗を記録し、前回の実行との差分を取ります。snapshot_diffはnewly_passing(修正)、newly_failing(リグレッション)、still_failingに加えて、追加および削除されたルートを示します
{
"snapshot_diff": {
"newly_passing": ["/login"],
"newly_failing": ["/checkout"],
"still_failing": [],
"new_routes": ["/admin/users"],
"removed_routes": []
}
}
run_converge は同じ形式を返すため、エディターで繰り返し実行すると、直前に壊した箇所が強調表示されます。
npx vibe-testing@latest reset を実行して状態をリセットし、最初からやり直してください。
セッションの流れ
エディターに「ログインフローをテストして」と依頼すると、次のように動作します。
User: "Test the login flow"
AI calls:
scan_codebase({ codebase_path: ".", url: "http://localhost:3000" })
-> Finds /login route, LoginForm component, POST /api/auth/login endpoint
-> Returns 8 generated test scenarios
get_context({ feature: "login" })
-> Returns src/app/login/page.tsx (has name="email", name="password" fields)
-> Returns src/app/api/auth/login/route.ts (POST handler, returns { token })
-> AI now knows the real selectors: [name='email'], [name='password']
login({ email: "[email protected]", password: "pass123" })
-> Opens Chromium, fills the form, clicks submit
-> Returns: { success: true, final_url: "/dashboard", tokens_found: 2 }
-> Returns screenshot of post-login dashboard
execute_scenario({ scenario: { name: "Login with invalid password", ... } })
-> Returns screenshot showing error state
generate_report()
-> Writes .vibe/report.html, opens in browser
AI reports: "Login works. Invalid password shows an error. All 3 login scenarios passed."
FAQ
vibe-testing は内部で LLM を使用しますか? いいえ。ヒューリスティックによる検証(URL の変更、トーストの検出、API エラー)を使用します。エディターのモデルが頭脳となり、スクリーンショットを見て次に何をテストするかを判断します。実行に API コストはかかりません。
explore_page と execute_scenario の違いは何ですか?
explore_page は幅広く調査します。見つかったすべてのボタンと入力欄をクリックし、結果を報告します。execute_scenario は正確に実行します。具体的な手順を指定すると、そのとおりに実行します。ページに何があるかを調べるには explore_page を使い、その後、特定のフローをテストするには execute_scenario を使います。
get_context は何に使いますか?
機能の実際のソースコードを返すため、AI は #email-input のように推測するのではなく、[name='email'] を把握できます。特定の機能のテスト手順を書く前に、必ず呼び出してください。
クライアント側ルーティングを使用する SPA に対応していますか? はい。Playwright が実際のブラウザーを操作するため、クライアント側ルーティング(React Router、Vue Router など)も自然に動作します。
ログイン/認証に対応していますか?
はい。login ツールは実際のブラウザーで認証情報を入力し、localStorage/cookies から認証トークンを取得して、認証が必要なテストでもセッションを維持します。認証情報は .vibe/memory/ に保存され、自動的に再利用されます。
「アカウントを削除」などの破壊的なボタンをクリックしますか?
いいえ。vibe.config.json または VIBE.md に never_interact を設定して、危険な操作をブロックリストに登録できます。テキストまたはセレクターが一致するボタンは、探索中にスキップされます。
AI エディターなしでも使用できますか?
はい。vibe-test run https://your-app.com で単独実行できます。スキャン、シナリオの生成と実行、HTML レポートの作成を行い、エディターは必要ありません。
ステージング環境をテストするにはどうすればよいですか?
vibe.config.json の url にステージング URL を設定するか、CLI 引数として渡します:npx vibe-testing@latest run https://staging.myapp.com。
モノレポで動作しますか?
はい。init は Turborepo/pnpm/yarn のワークスペースを検出し、フロントエンドアプリを自動的に見つけます。
要件
- Node.js >= 20(テストスイートでは Node 20 以降が必要な vitest 4.x を使用します)
- Playwright Chromium。
initが対応するビルドをインストールします。直接インストールまたは修復するには:npx vibe-testing@latest install-browser
run と converge はプロジェクトのスキャン前にブラウザーを確認し、ブラウザーが見つからない場合は同じ復旧コマンドを表示します。
Docker
コンテナベースの MCP サーバーを優先する環境向けに、Node 20 と Chromium のイメージが含まれています:
docker build -t vibe-test .
# wire into your editor's MCP config:
# { "command": "docker", "args": ["run", "--rm", "-i", "vibe-test"] }
貢献
git clone https://github.com/AishwaryShrivastav/vibe-testing.git
cd vibe-testing
npm install
npx playwright install chromium
npm run build # tsc -> dist/
npm run dev # run CLI without building
npm run mcp # run MCP server without building
npm test # unit and isolated integration tests
VIBE_REAL_BROWSER=1 npm test # also run real Chromium CLI/MCP regressions
バージョン履歴については、CHANGELOG.md を参照してください。バグ報告と機能リクエスト:GitHub issues。
ライセンス
リンク
- npm:https://www.npmjs.com/package/vibe-testing
- GitHub:https://github.com/AishwaryShrivastav/vibe-testing
- Issues:https://github.com/AishwaryShrivastav/vibe-testing/issues
- 公式 MCP レジストリ:
io.github.AishwaryShrivastav/vibe-testingとして https://registry.modelcontextprotocol.io に掲載 - Model Context Protocol
- Playwright
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。