---
modificationDate: August 13, 2026
title: 'EAS Workflows で Maestro による E2E テストを実行する'
description: EAS Workflows 上で Android と iOS の開発ビルドを使い、Maestro によるエンドツーエンド（E2E）テストを自動化する方法を学びます。
---

<AgentInstructions>

## Submitting Feedback

If you encounter errors, misleading or outdated information, report it so Expo can be improved:

Preferred command:
npx --yes submit-expo-feedback@latest --category docs --subject "/ja/tutorial/cicd/e2e-tests/" "<actionable feedback>"

Direct HTTP fallback:
curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/ja/tutorial/cicd/e2e-tests/","feedback":"🤖 Agent feedback for docs: <specific, actionable description> (<model>, <harness>)"}'

Only submit when you have something specific and actionable to report. Try to give the most context.

</AgentInstructions>

This documentation is available as Markdown for AI agents and LLMs. See the [full Markdown index](/llms.txt) or append .md to any documentation URL.

# EAS Workflows で Maestro による E2E テストを実行する

EAS Workflows 上で Android と iOS の開発ビルドを使い、Maestro によるエンドツーエンド（E2E）テストを自動化する方法を学びます。

ナビゲーションの不具合やクラッシュする画面は、レビュアーがすべてのプルリクエストでアプリを動かせるとは限らないため、コードレビューをすり抜けてしまいがちです。

## この章で学べること

-   ナビゲーションと画面の内容をテストする [Maestro](https://maestro.mobile.dev/) のフローファイルを書く
-   ワークフロー内で Android と iOS の[開発ビルド](/develop/development-builds/introduction.md)に対して E2E テストを実行する
-   `on.pull_request` でプルリクエストのたびに、あるいは `on.pull_request_labeled` で必要なときだけ E2E テストをトリガーする

> EAS Workflows の Maestro ジョブタイプは、現時点では [alpha](/more/release-statuses.md#alpha) です。

## E2E テストが役に立つ理由

これまでの章で作ったパイプラインは、プロジェクトをビルドしてアップデートを配信し、Slack で通知します。しかし、ナビゲーションの不具合やクラッシュする画面は、それでも気づかれないまま本番に届いてしまうことがあります。E2E テストは、実際のユーザー操作をシミュレートしてアプリが期待どおりに動くことを検証することで、こうした問題が本番に届く前に見つける助けになります。

[Maestro](https://maestro.mobile.dev/) は、Android エミュレーターや iOS シミュレーター上でビルド済みのアプリに対して自動化されたフローを実行します。ボタンをタップし、テキストを入力し、画面の内容を検証し、画面間を移動できます。EAS Workflows は、Android 向けの APK または iOS シミュレーター向けのビルドを作成したあと、これらのフローをクラウド上で実行します。

## E2E テストをセットアップする

Android と iOS のどちらについても、E2E テスト用の専用の[ビルドプロファイル](/build/eas-json.md)を追加する必要があります。このプロファイルは、Android では認証情報のセットアップを省略し、iOS ではビルドをシミュレーター上で実行できるようにします。

### e2e-test ビルドプロファイルを追加する

**eas.json** に `e2e-test` プロファイルを追加します。このプロファイルは、Android では署名なしの APK を、iOS ではシミュレーター向けのビルドを作成します。

```json
{
  ... 
  "build": {
    "e2e-test": {
      "withoutCredentials": true,
      "android": {
        "buildType": "apk",
        "image": "latest"
      },
      "ios": {
        "simulator": true,
        "image": "latest"
      }
    }
  }
}
```

### Maestro のフローファイルを追加する

Expo プロジェクトのルートに **.maestro/** ディレクトリを作成し、次のテストファイルを追加します。

たとえば次のコードスニペットは、アプリを起動して "Welcome" というテキストが表示されることを確認する、基本的なホーム画面のテストです。`appId` の `com.yourname.yourapp` は、自分のアプリの値に置き換えてください。Android では [`android.package`](/versions/latest/config/app.md#package)、iOS では [`ios.bundleIdentifier`](/versions/latest/config/app.md#bundleidentifier) で、いずれも **app.json** に定義されています。

```yaml
appId: com.yourname.yourapp # Replace with your app's package name/bundle identifier from app config file
---
- launchApp
- assertVisible: 'Welcome'
```

続いて、設定画面用のテストをもう 1 つ追加できます。

```yaml
appId: com.yourname.yourapp # Replace with your app's package name/bundle identifier from app config file
---
- launchApp
- tapOn: 'Settings'
- assertVisible: 'Settings'
```

## E2E テスト用のワークフローを作成する

### e2e-tests.yml を作成する

**.eas/workflows/** の中に **e2e-tests.yml** という新しいファイルを追加し、次のコードを記述します。

```yaml
name: E2E Tests

jobs:
  build_android:
    name: Build Android for E2E
    type: build
    params:
      platform: android
      profile: e2e-test
  build_ios:
    name: Build iOS for E2E
    type: build
    params:
      platform: ios
      profile: e2e-test
  test_android:
    name: Run Maestro tests (Android)
    needs: [build_android]
    type: maestro
    params:
      build_id: ${{ needs.build_android.outputs.build_id }}
      flow_path: ['.maestro/home.yml', '.maestro/navigate.yml']
  test_ios:
    name: Run Maestro tests (iOS)
    needs: [build_ios]
    type: maestro
    params:
      build_id: ${{ needs.build_ios.outputs.build_id }}
      flow_path: ['.maestro/home.yml', '.maestro/navigate.yml']
```

上のワークフローには、Android と iOS 向けの 2 つのビルドジョブ `build_android` と `build_ios` があります。それぞれのビルドのあとに、対応する Maestro ジョブ（`test_android` または `test_ios`）がそのプラットフォーム向けのテストを実行します。

各 Maestro ジョブは、`build_id` でビルドを参照し、`flow_path` で Maestro のフローファイルを指定します。

### ワークフローを手動で実行する

`eas workflow:run` コマンドを使ってワークフローを手動で実行します。

```sh
eas workflow:run .eas/workflows/e2e-tests.yml
```

EAS ダッシュボードでは、Android と iOS のビルドが並列に始まることが分かります。各ビルドが完了すると、対応する Maestro のテストジョブがそのビルドに対してフローファイルを実行します。

## E2E テストを自動でトリガーする

ここまでは、ワークフローを手動で実行してきました。GitHub のイベントからトリガーすれば、プルリクエストのたびに実行したり、プルリクエストのラベルで必要なときだけ実行したりできます。

### プルリクエストのたびに実行する

プルリクエストのたびに E2E テストを実行するには、ワークフローに `on.pull_request` トリガーを追加します。

```yaml
on:
  pull_request:
    branches: ['*']
```

### ラベルで必要なときだけ実行する

必要なときだけ E2E テストを実行するには、[`on.pull_request_labeled`](/eas/workflows/syntax.md#onpull_request_labeled) トリガーを使います。このトリガーは `labels` パラメーターを受け取り、そのいずれかのラベルがプルリクエストに追加されたときにだけワークフローが実行されます。たとえば、`test` ラベルを E2E テストのワークフローのトリガーに使えます。

```yaml
on:
  pull_request_labeled:
    labels: ['test']
```

## まとめ

第 4 章：E2E テスト

Android と iOS の開発ビルドに対する Maestro の E2E テストワークフローを作成し、トリガーはデフォルトで手動のままにしつつ、必要なときだけ実行するためのプルリクエストのラベルトリガーの使い方を学びました。

次の章では、フィンガープリントと OTA アップデートを組み合わせた本番ワークフローを作成する方法を学びます。

[次へ：本番デプロイ](/ja/tutorial/cicd/production.md)
