ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-04-04中級

Antigravity × Maestro — UI の変更に追随し続けるモバイル E2E テストの組み方

MaestroとAntigravityを組み合わせてiOS/AndroidのE2EテストをAIで自動生成・実行する方法を解説。テストフロー作成からCI/CD連携まで実践的なワークフローを紹介します。

maestromobile-testinge2e-testios35android27ui-testantigravity435

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.yaml

iOS/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 PASSED

Antigravityを使えば、テストの作成から実行環境の設定、失敗時の修正まで一貫して任せることができます。さらに本番環境へのリリース自動化まで視野に入れる場合は、Antigravity × Fastlane:App Store & Google Play 自動デプロイ完全攻略ガイド が参考になります。

全体を振り返って

MaestroとAntigravityを組み合わせることで、モバイルUIテストの自動化が劇的に楽になります。

YAMLというシンプルな記法はAIとの相性が抜群で、画面の仕様を伝えるだけでAntigravityが実用的なテストシナリオを生成してくれます。iOS/Android両対応、CI/CD連携、クラウド実行まで一貫したワークフローが構築でき、テストのメンテナンス負担も大きく削減されます。

モバイルアプリの品質をAIの力で底上げし、リリースへの自信を高める第一歩として、ぜひMaestro × Antigravityのワークフローを試してみてください。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

アプリ開発2026-07-03
ダウンロードサイズの逆行に提出直前で気づかないために — AAB/IPA のサイズ予算をエージェントの週次ゲートで守る
メディエーションSDKやアセットの追加で静かに膨らむダウンロードサイズに、bundletool と App Thinning レポートを使ったサイズ台帳・予算ゲート・増分の内訳特定で歯止めをかける設計をまとめます。
アプリ開発2026-05-13
AntigravityでGoogle ML Kitを試したら、公式ドキュメントより速く動いた — でも1つだけ詰まった
Google ML KitをAntigravityでiOS/Androidアプリに統合する実践ガイド。テキスト認識・顔検出の実装コードとXcode 15バグ回避策、個人開発での使いどころをまとめています。
アプリ開発2026-04-25
Gemma 4 × Antigravity — iOS・Android 両対応オンデバイスAI 実装ガイド
Gemma 4 モデルを iOS(Core ML)と Android(TensorFlow Lite / AI Core)の両プラットフォームに本番統合する手順を、Antigravity で AI 支援しながら詳解。モデル変換・量子化・審査対策まで。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →