Maestro × Antigravity — モバイルUIテスト自動化の新標準
モバイルアプリ開発において、UIテストの自動化は品質保証の要でありながら、長らく「手間がかかる割に維持しづらい」という課題を抱えてきました。XCUITestやEspressoは強力ですが、記述量が多く、UIの変更に追随するだけで多大な工数がかかります。
そこで注目されているのが Maestro です。YAMLベースのシンプルな記法でiOS/Androidどちらにも対応できるMaestroは、そのシンプルさゆえにAIとの親和性が極めて高いツールです。AntigravityのAIエージェントに「このフローをテストするMaestroシナリオを書いて」と指示するだけで、実用的なテストが瞬時に生成されます。
Maestro とは — なぜ AI との相性が抜群なのか
Maestro は、mobile.dev が開発したモバイルE2Eテストフレームワークです。最大の特徴は、テストシナリオをYAML形式で記述できることです。
# ログインフローのテスト例
appId: com.example.myapp
---
- launchApp
- tapOn: "メールアドレス"
- inputText: "test@example.com"
- tapOn: "パスワード"
- inputText: "password123"
- tapOn: "ログイン"
- assertVisible: "ホーム画面"このシンプルさがAntigravityとの組み合わせで威力を発揮します。アプリの仕様をAntigravityに伝えるだけで、このようなYAMLシナリオを大量に自動生成できるからです。
XCUITestやEspressoとの主な違いを整理すると次のようになります。
- Maestro: YAML記述、iOS/Android共通、セットアップ簡単、AIによる自動生成が容易
- XCUITest: Swift/Objective-C記述、iOS専用、Xcodeとの統合が深い
- Espresso: Kotlin/Java記述、Android専用、Googleが公式サポート
Maestroを選ぶべきシーンは「クロスプラットフォームで素早くE2Eカバレッジを上げたい」「テストをAIで大量生成・維持したい」場合です。
環境準備 — Maestro のインストールと設定
まずMaestroをインストールします。
# macOS / Linux
curl -Ls "https://get.maestro.mobile.dev" | bash
# バージョン確認
maestro --version
# 期待する出力: Maestro v1.x.x次に、Antigravityのプロジェクトにテスト用のディレクトリ構造を作ります。
myapp/
├── maestro/
│ ├── flows/
│ │ ├── login.yaml
│ │ ├── onboarding.yaml
│ │ └── checkout.yaml
│ └── config.yaml
└── src/
└── ...
Antigravityにこの構造を伝えるために、プロジェクトルートに .antigravity/rules.md(または AGENTS.md)を作成しておきましょう。
# テスト規約
- E2EテストはMaestro(YAML形式)で記述する
- テストファイルは `maestro/flows/` に配置する
- appId: com.example.myapp
- 言語切替時は `tapOn: "言語を変更"` を使うこのコンテキストがあることで、AntigravityはMaestro形式のテストを迷いなく生成してくれます。
Antigravity でテストシナリオを AI 自動生成する
環境が整ったら、Antigravityのエージェントモードを使ってテストシナリオを自動生成してみましょう。
プロンプト例
Antigravityへの指示(Agent Modeで実行):
maestro/flows/ ディレクトリに以下のフローのテストシナリオを作成してください:
1. 新規ユーザー登録フロー(メール・パスワード入力→確認→ホーム画面遷移)
2. 商品検索フロー(キーワード入力→結果表示→商品詳細→カートに追加)
3. チェックアウトフロー(カート確認→住所入力→支払い方法選択→注文完了)
各フローのYAMLシナリオを作成し、エッジケース(入力値が空の場合、ネットワークエラー時など)のシナリオも含めてください。
生成されるテストシナリオの例
Antigravityが生成した登録フローのシナリオです。
# maestro/flows/signup.yaml
appId: com.example.myapp
---
- launchApp:
clearState: true
- tapOn: "アカウントを作成"
- tapOn:
id: "email_input"
- inputText: "newuser@example.com"
- tapOn:
id: "password_input"
- inputText: "SecureP@ss123"
- tapOn:
id: "confirm_password_input"
- inputText: "SecureP@ss123"
- tapOn: "次へ"
- assertVisible:
text: "確認メールを送信しました"
timeout: 5000
- tapOn: "スキップ(後で確認)"
- assertVisible:
text: "ホーム"
timeout: 10000# maestro/flows/signup_error.yaml(エラーケース)
appId: com.example.myapp
---
- launchApp:
clearState: true
- tapOn: "アカウントを作成"
- tapOn: "次へ"
- assertVisible: "メールアドレスを入力してください"
- tapOn:
id: "email_input"
- inputText: "invalid-email"
- tapOn: "次へ"
- assertVisible: "正しいメールアドレスを入力してください"Antigravityは画面の仕様を理解した上で、正常系・異常系の両方のシナリオを生成します。これを手動で書くと数時間かかる作業が、数分で完了します。
iOS 実機 / シミュレーターでのテスト実行
iOSシミュレーターでテストを実行する手順です。
# シミュレーターを起動(Xcode コマンドラインツールが必要)
open -a Simulator
# アプリをビルド・インストール
xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15' build
# 単体テスト実行
maestro test maestro/flows/login.yaml
# 全フロー一括実行
maestro test maestro/flows/
# 期待する出力:
# ✅ Launch App
# ✅ Tap on "メールアドレス"
# ✅ Input "test@example.com"
# ✅ Tap on "ログイン"
# ✅ Assert visible "ホーム画面"
# Test PASSED in 8.3sテストが失敗した場合、Maestroは失敗時のスクリーンショットとビデオを自動保存します。このファイルをAntigravityに渡すと、なぜ失敗したか、どう修正すべきかを分析してくれます。
Antigravityへの指示:
以下のMaestroテストが失敗しました。
- フロー: maestro/flows/login.yaml
- エラー: assertVisible timeout - "ホーム画面" が見つかりませんでした
- スクリーンショット: [添付]
ログインフローに問題がある可能性があります。テストのYAMLまたはアプリ側の実装を確認して修正してください。
Android 実機 / エミュレーターでのテスト実行
AndroidエミュレーターやAndroid実機でも同一のYAMLファイルが使えます(appIdが共通の場合)。
# Android エミュレーターを起動
emulator -avd Pixel_7_API_34
# APKをビルド・インストール
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
# Maestro でテスト実行(iOS と全く同じコマンド)
maestro test maestro/flows/login.yaml
# クロスプラットフォームで同一テストを実行する場合
# appIdを環境変数で切り替え
MAESTRO_APP_ID=com.example.myapp.android maestro test maestro/flows/login.yamliOS/Android でUIが異なる場合の対処
プラットフォームによって要素のIDや配置が異なる場合は、条件分岐を使います。
# maestro/flows/platform_specific.yaml
appId: com.example.myapp
---
- launchApp
- runFlow:
when:
platform: iOS
file: ios_specific_steps.yaml
- runFlow:
when:
platform: Android
file: android_specific_steps.yaml
- assertVisible: "共通のUI要素"このような条件分岐もAntigravityに「iOSとAndroidで異なる操作をするMaestroフローを作って」と指示するだけで自動生成できます。
GitHub Actions との CI/CD 連携
テストを継続的に実行するため、GitHub Actionsに組み込みましょう。AntigravityでワークフローYAMLを生成してもらいます。
# .github/workflows/maestro-tests.yml
name: Mobile UI Tests
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
ios-ui-tests:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install Maestro
run: curl -Ls "https://get.maestro.mobile.dev" | bash
- name: Add Maestro to PATH
run: echo "$HOME/.maestro/bin" >> $GITHUB_PATH
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '26.0'
- name: Build and Install App
run: |
xcodebuild -scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15' \
build
- name: Run Maestro Tests
run: maestro test maestro/flows/ --format junit --output test-results.xml
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: maestro-test-results
path: |
test-results.xml
~/.maestro/tests/CI/CDのセットアップもAntigravityに任せれば、プロジェクトの構成を読み取った上で最適なワークフローファイルを生成してくれます。さらに詳しいCI/CD自動化手法については、Antigravity × Firebase App Distribution — iOS/Android ベータ配布を CI/CD で自動化する完全ガイド もあわせてご覧ください。
よくあるエラーと Antigravity による修正
エラー1:要素が見つからない(ElementNotFoundError)
Error: java.lang.IllegalArgumentException: Element not found: "ログイン"
原因: テキストの表記揺れ(全角/半角、スペースの有無)が多いです。
Antigravityへの修正依頼:
「ログイン」ボタンが見つからないエラーが出ています。
テキストマッチではなく要素IDやアクセシビリティラベルを使ったより堅牢な指定方法に変更してください。
修正後のYAML:
# テキストマッチの代わりにID指定
- tapOn:
id: "login_button"
# またはアクセシビリティラベル指定
- tapOn:
label: "ログインボタン"エラー2:タイムアウト(Timeout)
Error: Timeout waiting for element to be visible: "ホーム画面" (10000ms)
対処: タイムアウト値の調整またはアニメーション待機の追加。
- assertVisible:
text: "ホーム画面"
timeout: 20000 # 10000 → 20000ms に延長エラー3:キーボードがUI要素を隠す
対処: テキスト入力後にキーボードを閉じるステップを追加。
- inputText: "test@example.com"
- hideKeyboard # キーボードを閉じる
- tapOn: "次へ"これらの修正パターンもAntigravityが学習してくれるので、同様のエラーが出た際に「先ほどと同じ問題です、修正してください」と伝えるだけで対応可能です。
Maestro Cloud によるクラウド実行
ローカルやCI/CDだけでなく、Maestro Cloudを使うと複数の実機デバイスで並行テストが実行できます。
# Maestro Cloud にテストをアップロード
maestro cloud --apiKey YOUR_MAESTRO_CLOUD_KEY maestro/flows/
# 期待する出力:
# Uploading flows...
# Running on: iPhone 15 Pro (iOS 26.0)
# Running on: Google Pixel 8 (Android 15)
# Running on: Samsung Galaxy S24 (Android 14)
# All tests PASSEDAntigravityを使えば、テストの作成から実行環境の設定、失敗時の修正まで一貫して任せることができます。さらに本番環境へのリリース自動化まで視野に入れる場合は、Antigravity × Fastlane:App Store & Google Play 自動デプロイ完全攻略ガイド が参考になります。
全体を振り返って
MaestroとAntigravityを組み合わせることで、モバイルUIテストの自動化が劇的に楽になります。
YAMLというシンプルな記法はAIとの相性が抜群で、画面の仕様を伝えるだけでAntigravityが実用的なテストシナリオを生成してくれます。iOS/Android両対応、CI/CD連携、クラウド実行まで一貫したワークフローが構築でき、テストのメンテナンス負担も大きく削減されます。
モバイルアプリの品質をAIの力で底上げし、リリースへの自信を高める第一歩として、ぜひMaestro × Antigravityのワークフローを試してみてください。