testa について
Testaは、iOS SimulatorでアプリをテストするMCPサーバー兼コマンドラインツールです。AIエージェントや開発者向けに画面の読み取りと実際のタッチ操作を提供し、エージェントの実行をフローとして記録して、モデルなしでCIから再生できます。
主な機能
- 01画面を簡潔なテキストで読み取り
- 02タップ、入力、スワイプ、ジェスチャー操作
- 03シミュレーターのデバイス機能を制御
- 04フローファイルの記録と再生
- 05JUnit出力付きでCIから再生
活用シーン
- 01エージェントによるアプリの初期画面確認
- 02testIDを追加せずに画面をテスト
- 03フローを記録してCIで再生
MCP 対応
TestaはiOS Simulatorの画面観察と操作をMCPクライアントに提供します。`testa setup` はClaude Codeにサーバーを登録し、ほかのクライアントでは `testa mcp` を設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @valewnrt/testa-mcpTESTA_MCP_FULLSet to 1 to expose all 40 tools instead of the 13-tool token-lean default.TESTA_UDIDTarget a specific simulator UDID instead of the booted one.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Testa を使うと、Claude Code、Codex、Cursor、その他の MCP クライアントから iOS Simulator を操作できます。画面を簡潔なテキストとして読み取り、実際のタッチイベントでタップ、入力、スワイプを行い、その結果を確認します。React Native、Expo、SwiftUI のアプリで動作し、testID を追加する必要はありません。エージェントの作業が終わったら、実行内容をフローファイルとして保存し、モデルを使わずに CI で再生できます。
インストール
Xcode 26(iOS 26 シミュレーター)を搭載した macOS が必要です。
brew tap valewnrt/testa
brew install testa
testa setup # installs the Claude Code skill and registers the MCP server
または、ソースからビルドします:git clone https://github.com/valewnrt/testa && cd testa && ./install.sh。
エージェントを接続する
testa setup で Claude Code はすでに設定されます。その他のエージェントの場合:
codex mcp add testa -- testa mcp # Codex
{ "mcpServers": { "testa": { "command": "testa", "args": ["mcp"] } } }
この JSON を Cursor の .cursor/mcp.json またはその他の MCP クライアント設定に追加します。
その後、エージェントに 「シミュレーターでアプリを起動し、テスト用アカウントで登録して、ウェルカム画面が表示されることを確認して」 のように依頼します。
詳しくは docs/agents.md をご覧ください。
自分で試す
Testa はシンプルな CLI なので、手動でも操作できます。
$ testa boot "iPhone 17 Pro"
$ testa install ./MyApp.app && testa launch com.example.myapp
$ testa ui
19 elements (on screen)
e2 StaticText "ready" #status @201,89
e5 Button "Tap me" #tapButton @102,171
e18 TextField #textInput =type here @201,601
…
$ testa tap "Tap me"
tapped e5 Button Tap me
-- ui changes --
~ e2 StaticText "tap:1" #status @201,89
~ e6 StaticText "count: 1" #tapCount @41,208
$ testa assert "#status" label=tap:1
PASS label tap:1
最初のコマンドでバックグラウンドデーモンが起動します(初回のみ、数秒かかります)。その後、各コマンドは約 60 ms で実行されます。
特長
- アプリの変更は不要です。 Testa はアクセシビリティツリーを読み取り、ツリーに含まれないものはデバイス上の OCR(Apple Vision)で補います。対象にはシステムシート、キャンバス描画の画面、ゲーム、WebView が含まれます。詳細 →
- トークン予算を考慮した設計です。 画面は要素ごとに 1 行で表され、スクリーンショットの約 1,500 トークンに対して約 200 トークンです。また、各操作の応答には変更内容だけが含まれます。ベンチマーク →
- 一度記録すれば、CI で再生できます。
testa flow recordはエージェントの操作をプレーンテキストのフローファイルに変換します。testa flow runは JUnit 出力と失敗時のアーティファクトを含めて再生します。GitHub Action も用意されています。詳細 → - 実際のジェスチャーとデバイス操作に対応します。 タップ、長押し、スワイプ、ドラッグ&ドロップ、ピンチ、回転、マルチタッチ、ハードウェアボタンに加え、プッシュ通知、位置情報、Face ID、ダークモード、Dynamic Type などを利用できます。
- ローカルバイナリ 1 つで、依存関係はありません。 Testa は Apple のシミュレーターフレームワークと直接通信するため、Node、Python、WebDriver サーバーは不要です。ネットワーク通信もテレメトリーもありません。仕組み →
ステータス
Testa は 1.0 より前のバージョンで、実際の本番アプリを対象に使用されています。Apple のプライベートフレームワークに依存しているため、新しい Xcode で動作しなくなる可能性があります。そこで、週次ジョブで Xcode ベータ版に対してテストスイートを実行し、問題を早期に検出しています。Xcode 26.4 と iOS 26.4 シミュレーターで動作確認済みです。対象は iOS Simulator のみで、実機と Android には対応していません(理由)。
ドキュメント
- コマンド:セレクター、observe → act → verify のループ、全コマンドのリファレンス
- AI エージェントから Testa を利用する:MCP の設定、ツール、トークンコスト
- testID を使わずにアプリをテストする
- フローと CI:フローファイル、記録、GitHub Action
- 仕組み · セキュリティモデル
- Maestro、Appium、idb、Argent と Testa を比較する
- トラブルシューティングと制限事項
貢献
バグ報告、Xcode 互換性に関する報告、プルリクエストを歓迎します。まず CONTRIBUTING.mdをご確認ください。質問やアイデアは Discussionsへお寄せください。変更内容は CHANGELOGに記載しています。
謝辞
Testa の HID とアクセシビリティに関する取り組みは、Meta の idb(MIT)を調査して得た知見を参考にしています。idb のコードはリンクもバンドルもしていません。 貢献してくださった皆様に感謝します。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。