🚀 flutter-skill
flutter-skill は、実行中のアプリ内でAIエージェントに目と手を与えることができるツールです。10のプラットフォームに対応し、テストコードを一切書かずに、1つのMCPサーバーで動作します。
🚀 クイックスタート
1. インストール (30秒)
npm install -g flutter-skill
2. AIに追加 (MCP設定にコピー&ペースト)
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
これは、Claude Desktop、Cursor、Windsurf、Copilot、Cline、OpenClaw など、MCP互換のエージェントで動作します。
3. アプリに追加 (Flutterの場合は2行)
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
4. テスト — AIに話しかけるだけ
"アプリを起動し、すべての画面を探索し、バグを報告してください"
以上です。ゼロ設定、ゼロテストコードで、60秒以内に動作します。
📦 その他のインストール方法 (Homebrew、Scoop、Docker、IDE、Agent Skill)
| 方法 |
コマンド |
| npm |
npm install -g flutter-skill |
| Homebrew |
brew install ai-dashboad/flutter-skill/flutter-skill |
| Scoop |
scoop install flutter-skill |
| Docker |
docker pull ghcr.io/ai-dashboad/flutter-skill |
| pub.dev |
dart pub global activate flutter_skill |
| VSCode |
拡張機能 → "Flutter Skill" |
| JetBrains |
プラグイン → "Flutter Skill" |
| Agent Skill |
npx skills add ai-dashboad/flutter-skill |
| ゼロ設定 |
flutter-skill init (アプリを自動検出してパッチ適用) |
✨ 主な機能
- 🔌 任意のAIエージェント(Claude、Cursor、Windsurf、Copilot、OpenClawなど)をMCPを介して実行中のアプリに直接接続します。
- 👀 エージェントは画面を見ることができ、ボタンをタップしたり、テキストを入力したり、スクロールしたり、ナビゲートしたりすることができます。
- ✅ テストコードが不要で、Page ObjectsやXPath、脆弱なセレクターを使用する必要がありません。単純な英語で指示を与えるだけです。
- ⚡ ゼロ設定で、2行のコードで10のプラットフォームすべてで動作します。
📦 インストール
上記のクイックスタートで説明した通り、インストール方法は以下の通りです。
npmを使用したインストール
npm install -g flutter-skill
その他のインストール方法
📦 その他のインストール方法 (Homebrew、Scoop、Docker、IDE、Agent Skill)
| 方法 |
コマンド |
| npm |
npm install -g flutter-skill |
| Homebrew |
brew install ai-dashboad/flutter-skill/flutter-skill |
| Scoop |
scoop install flutter-skill |
| Docker |
docker pull ghcr.io/ai-dashboad/flutter-skill |
| pub.dev |
dart pub global activate flutter_skill |
| VSCode |
拡張機能 → "Flutter Skill" |
| JetBrains |
プラグイン → "Flutter Skill" |
| Agent Skill |
npx skills add ai-dashboad/flutter-skill |
| ゼロ設定 |
flutter-skill init (アプリを自動検出してパッチ適用) |
💻 使用例
基本的な使用法
flutter-skill explore https://my-app.com --depth=3
flutter-skill monkey https://my-app.com --actions=100 --seed=42
flutter-skill test --url https://my-app.com --platforms web,electron,android
flutter-skill serve https://my-app.com
📚 ドキュメント
AIプラットフォームとの連携
MCPサーバーモード (IDE統合)
任意のMCP互換のAIツールで動作します。設定は1行です。
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
| プラットフォーム |
設定ファイル |
状態 |
| Cursor |
.cursor/mcp.json |
✅ |
| Claude Desktop |
claude_desktop_config.json |
✅ |
| Windsurf |
~/.codeium/windsurf/mcp_config.json |
✅ |
| VSCode Copilot |
.vscode/mcp.json |
✅ |
| Cline |
VSCode設定 → Cline → MCP |
✅ |
| OpenClaw |
スキルまたはMCP設定 |
✅ |
| Continue.dev |
.continue/config.json |
✅ |
HTTPサーバーモード (CLIと自動化)
スタンドアロンのブラウザ自動化、CI/CDパイプライン、またはリモートアクセスに適しています。
flutter-skill serve https://your-app.com
flutter-skill nav https://google.com
flutter-skill snap
flutter-skill screenshot /tmp/ss.jpg
flutter-skill tap "Login"
flutter-skill type "hello@example.com"
flutter-skill eval "document.title"
flutter-skill tools
| コマンド |
説明 |
nav <url> |
URLに移動する |
snap |
アクセシビリティツリーのスナップショットを取得する |
screenshot [path] |
スクリーンショットを撮る |
tap <text|ref|x y> |
要素をタップする |
type <text> |
キーボードでテキストを入力する |
key <key> [mod] |
キーを押す |
eval <js> |
JavaScriptを実行する |
title |
ページのタイトルを取得する |
text |
表示されているテキストを取得する |
hover <text> |
要素にホバーする |
upload <sel> <file> |
ファイルをアップロードする |
tools |
ツールをリストする |
call <tool> [json] |
任意のツールを呼び出す |
--port=N、--host=H フラグと FS_PORT/FS_HOST 環境変数をサポートしています。
2つのモードの比較
|
server (MCP stdio) |
serve (HTTP) |
| ユースケース |
IDE / AIエージェント統合 |
CLI / 自動化 / CI/CD |
| プロトコル |
MCP (JSON-RPC over stdio) |
HTTP REST |
| ツール |
253 (ページごとに動的) |
246 (汎用) |
| ブラウザ |
Chromeを自動起動する |
既存のChromeに接続する |
| 最適な用途 |
Cursor、Claude、VSCode |
OpenClaw、スクリプト、パイプライン |
完全なCLIクライアントリファレンス: docs/CLI_CLIENT.md
10のプラットフォーム、1つのツール
ほとんどのテストツールは1~2つのプラットフォームで動作しますが、flutter-skillは10のプラットフォームで動作します。
| プラットフォーム |
SDK |
テストスコア |
| Flutter (iOS/Android/Web) |
flutter_skill |
✅ 188/195 |
| React Native |
|
✅ 75/75 |
| Electron |
|
✅ 75/75 |
| Tauri (Rust) |
|
✅ 75/75 |
| Android (Kotlin) |
|
✅ 74/75 |
| KMP Desktop |
|
✅ 75/75 |
| .NET MAUI |
|
✅ 75/75 |
| iOS (Swift/UIKit) |
|
✅ 19/19 |
| Web (任意のウェブサイト) |
|
✅ |
| Web CDP (ゼロ設定) |
SDK不要 |
✅ 141/156 |
合計: 656/664のテストがパス (98.8%) — 各プラットフォームは、50以上の要素を持つ複雑なソーシャルメディアアプリでテストされています。
パフォーマンス
複雑なソーシャルメディアアプリに対する自動テスト実行の実際のベンチマーク:
| 操作 |
Web (CDP) |
Electron |
Android |
connect |
93 ms |
55 ms |
103 ms |
tap |
1 ms |
1 ms |
2 ms |
enter_text |
1 ms |
1 ms |
2 ms |
inspect |
3 ms |
12 ms |
10 ms |
snapshot |
2 ms |
8 ms |
29 ms |
screenshot |
31 ms |
80 ms |
88 ms |
eval |
1 ms |
— |
— |
トークン効率: snapshot() は画像ではなく構造化された要素ツリーを返すため、AIエージェントにスクリーンショットを送信する場合と比較して、87–99%少ないトークン です。
これはどれくらい速いですか? tap 操作はエンドツーエンドで1~2 msかかります。PlaywrightやSeleniumなどのブラウザ自動化ツールは、同じ操作に通常50~100 msかかります。つまり、flutter-skillはWebDriverやCDPの間接的な処理を介さずにアプリのランタイムに直接アクセスするため、50~100倍速いです。
重いDOMサイト (実際の世界)
15のMCPツールを本番ウェブサイトでテストしました — 75/75がパスし、タイムアウトはゼロでした:
| サイト |
ツール |
合計時間 |
snapshot |
screenshot |
count_elements |
| YouTube |
15/15 ✅ |
6.9s |
43 ms |
30 ms |
4 ms |
| Amazon |
15/15 ✅ |
14.2s |
1 ms |
5 ms |
2 ms |
| Reddit |
15/15 ✅ |
17.9s |
6 ms |
32 ms |
51 ms |
| Hacker News |
15/15 ✅ |
4.8s |
53 ms |
188 ms |
1 ms |
| Wikipedia |
15/15 ✅ |
7.8s |
15 ms |
336 ms |
1 ms |
合計時間にはページの読み込み時間が含まれています。重いDOMサイトでもツールの実行時間は一貫して100 ms未満です。
Playwright / Appium / Detoxとの比較
|
flutter-skill |
Playwright MCP |
Appium |
Detox |
| MCPツール |
253 |
~33 |
❌ |
❌ |
| プラットフォーム |
10 |
1 (web) |
モバイル |
React Native |
| セットアップ時間 |
30秒 |
数分 |
数時間 |
数時間 |
| テストコードが必要 |
❌ なし |
✅ はい |
✅ はい |
✅ はい |
| AIネイティブ (MCP) |
✅ |
✅ |
❌ |
❌ |
| 自己修復テスト |
✅ |
❌ |
❌ |
❌ |
| モンキー/ファズテスト |
✅ |
❌ |
❌ |
❌ |
| ビジュアルリグレッション |
✅ |
❌ |
❌ |
❌ |
| ネットワークモック/リプレイ |
✅ |
❌ |
❌ |
❌ |
| API + UIテスト |
✅ |
❌ |
❌ |
❌ |
| マルチデバイス同期 |
✅ |
❌ |
部分的 |
❌ |
| アクセシビリティ監査 |
✅ |
❌ |
❌ |
❌ |
| i18nテスト |
✅ |
❌ |
❌ |
❌ |
| パフォーマンスモニタリング |
✅ |
❌ |
❌ |
❌ |
| 自然言語 |
✅ |
❌ |
❌ |
❌ |
| Flutterサポート |
✅ ネイティブ |
部分的 |
部分的 |
❌ |
| デスクトップアプリ |
✅ |
✅ |
❌ |
❌ |
| AIページ理解 |
✅ AXツリー |
❌ スクリーンショット |
❌ |
❌ |
| 境界/セキュリティテスト |
✅ 13のペイロード |
❌ |
❌ |
❌ |
| バッチアクション |
✅ 5回以上/呼び出し |
1回/呼び出し |
1回/呼び出し |
1回/呼び出し |
flutter-skillは、モバイル、ウェブ、デスクトップを横断して動作する唯一のAIネイティブのE2Eテストツールで、最も近い競合他社よりも7倍以上のツールを備えています。
AIネイティブ: 95%少ないトークン
ほとんどのAIテストツールはLLMにスクリーンショットを送信しますが、1枚あたり約4,000トークンかかります。
flutter-skillはChromeのアクセシビリティツリーを使用して、AIにページのコンパクトなセマンティックな要約を提供します。
{
"title": "ショッピングカート",
"nav": ["ホーム", "商品", "カート", "アカウント"],
"forms": [{"input:クーポンコード": "text"}],
"buttons": ["適用する", "レジに進む", "買い物を続ける"],
"features": {"検索": true, "ページネーション": true},
"links": 47, "inputs": 3
}
そして、1回の呼び出しで複数のアクションをバッチ処理します。
{"actions": [
{"type": "fill", "target": "input:クーポンコード", "value": "SAVE20"},
{"type": "tap", "target": "button:適用する"},
{"type": "tap", "target": "button:レジに進む"},
{"type": "fill", "target": "input:メールアドレス", "value": "test@example.com"},
{"type": "tap", "target": "button:続ける"}
]}
結果: AIエージェントは、スクリーンショットベースのツールよりも高速にテストを実行し、コストを削減し、ページをよりよく理解することができます。
|
flutter-skill |
スクリーンショットベースのツール |
| 1ページあたりのトークン |
~200 |
~4,000 |
| 1回の呼び出しあたりのアクション |
5回以上 |
1回 |
| セマンティクスを理解する |
✅ ロール、名前、状態 |
❌ ピクセルのみ |
| Shadow DOMで動作する |
✅ |
❌ |
できること
👀 見る
screenshot — 画面をキャプチャする
inspect_interactive — すべてのタップ可能/入力可能な要素とセマンティックな参照
find_element / wait_for_element
get_elements — 完全な要素ツリー
|
👆 操作する
tap / long_press / swipe / drag
enter_text / set_text / clear_text
scroll — すべての方向
go_back / press_key
|
🔍 検査する (v0.8.0)
- セマンティックな参照:
button:ログイン, input:メールアドレス
- UIの変更に対して安定している
tap(ref: "button:送信")
- 7つのロール: ボタン、入力、トグル、スライダー、セレクト、リンク、アイテム
|
🚀 制御する
launch_app — フレーバーを指定してアプリを起動する
hot_reload / hot_restart
get_logs / get_errors
scan_and_connect — アプリを自動検出して接続する
|
253のツール — 完全なリファレンス
AI探索: page_summary, explore_actions, boundary_test, explore_report
起動と接続: launch_app, scan_and_connect, connect_cdp, hot_reload, hot_restart, list_sessions, switch_session, close_session, disconnect, stop_app
画面: screenshot, screenshot_region, screenshot_element, native_screenshot, inspect, inspect_interactive, snapshot, get_widget_tree, find_by_type, get_text_content, get_visible_text
操作: tap, double_tap, long_press, enter_text, set_text, clear_text, swipe, scroll_to, drag, go_back, press_key, type_text, hover, fill, select_option, set_checkbox, focus, blur, native_tap, native_input_text, native_swipe
スマートテスト: smart_tap, smart_enter_text, smart_assert (ファジーマッチによる自己修復)
アサーション: assert_text, assert_visible, assert_not_visible, assert_element_count, assert_batch, wait_for_element, wait_for_gone, wait_for_idle, wait_for_stable, wait_for_url, wait_for_text, wait_for_element_count
ビジュアルリグレッション: visual_baseline_save, visual_baseline_compare, visual_baseline_update, visual_regression_report, visual_verify, visual_diff, compare_screenshot
ネットワークモック: mock_api, mock_clear, record_network, replay_network, intercept_requests, clear_interceptions, block_urls, http_request
APIテスト: api_request, api_assert
カバレッジと信頼性: coverage_start, coverage_stop, coverage_report, coverage_gaps, retry_on_fail, stability_check
データ駆動: test_with_data, generate_test_data
マルチデバイス: multi_connect, multi_action, multi_compare, multi_disconnect, parallel_snapshot, parallel_tap
アクセシビリティ: accessibility_audit, a11y_full_audit, a11y_tab_order, a11y_color_contrast, a11y_screen_reader
i18n: set_locale, verify_translations, i18n_snapshot
パフォーマンス: perf_start, perf_stop, perf_report, get_performance, get_frame_stats, get_memory_stats
セッション: save_session, restore_session, session_diff
録画とエクスポート: record_start, record_stop, record_export (Playwright、Cypress、XCUITest、Espresso、Detox、Maestro、+5以上), video_start, video_stop
認証: auth_inject_session, auth_biometric, auth_otp, auth_deeplink
CDPブラウザ: navigate, reload, go_forward, get_title, get_page_source, eval, get_tabs, new_tab, switch_tab, close_tab, get_cookies, set_cookie, clear_cookies, get_local_storage, set_local_storage, clear_local_storage, generate_pdf, set_viewport, emulate_device, throttle_network, go_offline, set_geolocation, set_timezone, set_color_scheme
デバッグ: get_logs, get_errors, get_console_messages, get_network_requests, diagnose, diagnose_project, reset_app
プラットフォームのセットアップ
Flutter (iOS / Android / Web)
dependencies:
flutter_skill: ^0.9.7
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
React Native
npm install flutter-skill-react-native
import FlutterSkill from 'flutter-skill-react-native';
FlutterSkill.start();
Electron
npm install flutter-skill-electron
const { FlutterSkillBridge } = require('flutter-skill-electron');
FlutterSkillBridge.start(mainWindow);
iOS (Swift)
import FlutterSkill
FlutterSkillBridge.shared.start()
Text("Hello").flutterSkillId("greeting")
Android (Kotlin)
implementation("com.flutterskill:flutter-skill:0.8.0")
FlutterSkillBridge.start(this)
Tauri (Rust)
[dependencies]
flutter-skill-tauri = "0.8.0"
KMP Desktop
Gradle依存関係を追加します — 詳細は を参照してください。
.NET MAUI
NuGetパッケージを追加します — 詳細は を参照してください。
サンプルプロンプト
AIにテスト内容を指示するだけです。
| プロンプト |
実行内容 |
| "間違ったパスワードでログインをテストしてください" |
スクリーンショットを撮り、資格情報を入力し、ログインボタンをタップし、エラーを検証します。 |
| "すべての画面を探索し、バグを報告してください" |
すべての画面を体系的にナビゲートし、すべての要素をテストします。 |
| "エッジケースで登録フォームを入力してください" |
絵文字🌍、長い文字列、空のフィールド、特殊文字をテストします。 |
| "iOSとAndroidでチェックアウトフローを比較してください" |
両方のプラットフォームで同じテストを実行し、スクリーンショットを比較します。 |
| "すべての5つのタブのスクリーンショットを撮ってください" |
各タブをタップし、状態をキャプチャします。 |
📄 ライセンス
MIT License © 2025
🔗 リンク
⭐ flutter-skillがあなたの時間を節約してくれたら、スターをつけて他の人にも見つけやすくしましょう!