OpenAIExpo2025/12/15 17:00

Expo now supports Maestro Cloud testing in your CI workflow

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

ExpoがEASワークフローでMaestro Cloudテストをサポート

Key Points

  • EASでMaestro Cloudを直接実行
  • ビルドとE2Eを同一ワークフローで
  • APIキーは環境変数で管理

Summary

ExpoのEASワークフローでMaestro Cloudがネイティブに実行できるようになりました。これによりビルドと同じワークフロー内でクラウド上の並列デバイステストを実行でき、従来のGitHub ActionやローカルランナーのGlueコードを減らせます。大規模なE2Eスイートや短いフィードバックループを必要とするプロジェクトに有効です。

Key Points

  • EASワークフロー内でMaestro Cloudジョブを定義し、ビルドの出力(build_id)を受け取ってテストを実行できる。
  • 設定は既存のeas.jsonとワークフローファイルに追記するだけ。MAESTRO_CLOUD_API_KEYでAPIキーを環境変数として渡す運用が推奨。
  • Maestro Cloudは並列実行とダッシュボードによる結果集約を提供するが、コストがかかるため用途は本番規模のテスト向け。

Quick setup(実務向け)

  • ローカル準備: npx eas-cli@latest init → 必要に応じてnpx expo run:android --variant releaseでリリースビルド確認。
  • Maestro Flow作成: シンプルなスモークフロー(例:アプリ起動→要素検証)を.maestro/に置く。
  • EASワークフロー: ビルドジョブの後にtype: maestro-cloud相当のジョブを追加し、build_idflows/maestro_project_idを渡す。
  • 実行/デバッグ: PRトリガーか、npx eas-cli@latest workflow:run .eas/workflows/your.yamlで手動実行して結果を確認。

Recommendations

  • 小規模・趣味プロジェクトは既存の無償Maestro統合を継続。並列実行や高速フィードバックが必要な商用・大規模プロジェクトでMaestro Cloudを検討する。
  • ワークフロー内で機密情報はMAESTRO_CLOUD_API_KEYのような環境変数に置き、maestro_project_idはリポジトリに含めても問題ないことを明示する。

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

ExpoがCIワークフローでMaestro Cloudテストをサポートしました

ExpoがCIワークフローでMaestro Cloudテストをサポートしました

Product • Development • React Native • 2025-12-15 • 7分読了

ゲスト寄稿:Dan Caseley

EAS Workflows内でMaestro Cloudのテストを実行できるようになりました。ビルドの横でそのままテストを走らせるシンプルなセットアップを紹介します。CIの接着コードをやめて、テストをより速くスケールさせましょう。

これはMaestroを普段から愛用している(かつスタッフでもある)Dan Caseleyによるゲスト投稿です。彼は日常的に彼らのツールを使ってアプリ開発をしています。


我々は少し照れています。ExpoはEASで実行できるワークフローにMaestro Cloudの統合を追加しました。これにより、ローカルでまかなえない規模・能力のビルドに加えて、同じワークフロー内で高品質なモバイルテストツールを使ってビルド済みアプリのテストも行えます。

私はこれまでいくつもの職場でReact Native+Expoを使ってアプリを作り、ビルドとリリースの手間を省くサービスを利用してきました。iOSのコード署名の憎たらしさは皆さんご存知でしょう。自然な流れで私も長くMaestroを使ってきましたが、両者を繋ぐのはこれまで面倒でした。

統合前の苦労

これまでは通常、GitHub Actions上で eas build --local を走らせ、並列でMaestro CloudのGitHub Actionを実行し、EASのトリガーと並行して動かす、という手順にしていました。テストが完全にリリース対象と同じものを検証しているわけではありませんが、多くの場合は十分に近い結果が得られます。ローカル向けのEAS設定をまとめるのもそこまで大変ではありませんでした。

ただ、GitHub Actionはランナーの変更などに合わせて微調整やメンテナンスが必要で、そこそこ手間がかかります。しかし、とにかく動いていました。だいたいは。

先週EAS上のMaestro Cloud統合を試す機会がありましたが、驚くほど簡単でした。あの面倒が一切なくなります。

統合は、アプリとテストをMaestro Cloudへプッシュし、テスト結果を取得するラッパーです。以前のGitHub Actionや maestro cloud <many args here> を使っていたときと同じ流れですが、今回はビルドパイプラインで既に使っているEASワークフローYAMLの中に収まります。便利です。

セットアップ方法

私がやった手順を順に紹介します。

Step 1: アプリの準備

私はモバイルアプリ開発者ではないので、アプリは npx create-expo-app@latest を実行した直後とほとんど変わらないものでした。ほんの数語を直しただけです。

次に npx eas-cli@latest init を実行してEASに接続し、app.jsonが更新されてワンタイムの初期設定が完了しました。

ローカルのAndroidエミュレータでアプリを動かし、Maestroのワークフローを開発する準備をしました。リリースビルドの方が実際のテストに近くなるので、次のコマンドを使いました:

npx expo run:android --variant release

初回ビルドにはお約束の待ち時間が発生しますが、コーヒー/紅茶を飲んでいるうちに終わり、package nameがapp.jsonに追加されているのを確認しました。

Step 2: スモークテストを作る

単純なアプリに対して最小限のテストを作成しました。例:

appId: com.danmaestro.maestroineas
---
- launchApp
- assertVisible:
    text: 'Tab One'
- assertVisible:
    text: 'Tab Two'

このくらいのテストならMaestro Studioは不要ですが、今回は手順を揃えるためにStudioを使って同じ流れで作業しました。

Step 3: EASの設定

EASのドキュメントに従って次を実行し、EASにどう振る舞ってほしいかを設定しました:

npx eas-cli@latest build:configure

これでプロジェクトルートに eas.json が作られ、例えば dev はデバッグ可能、production はバージョンを自動インクリメントする、といった合理的なデフォルトが設定されました。

既存のMaestro統合のドキュメントに従い、ワークフローで使う追加のプロファイルを eas.json に追加しました(代表性を保つため)。そして同じドキュメントを参考にして、Maestro Cloud統合のワークフローを追加しました。例:

name: e2e-test-android
on:
  pull_request:
    branches: ['*'] # Run the E2E test workflow on every pull request.
jobs:
  build_android_for_e2e:
    type: build
    params:
      platform: android
      profile: e2e-test
  maestro_test:
    needs: [build_android_for_e2e]
    type: maestro-cloud
    params:
      build_id: $ { { needs.build_android_for_e2e.outputs.build_id } }
      flows: '.maestro/smoke.yaml'
      maestro_project_id: proj_01jy292wt8et3ayd00prxbjkwh

ここで注意してほしいのは、プロジェクトIDは公開情報で問題ないのでYAMLに置いてあります。APIキーは含めていません。Expoはシンプルさに優れていて、APIキーは明示的に渡すことも、プロジェクト内の MAESTRO_CLOUD_API_KEY 環境変数から拾うこともできます。私は後者にしています — 実際のプロジェクトであれば、このAPIキーを次にメンテナンスする人がわざわざファイルに書く必要はありません。

パラメータの一覧はMaestroのドキュメントにありますし、CLIやGitHub ActionsでMaestro Cloudを使ったことがある人ならほとんど馴染みのあるものばかりです。

代表的な設定にしているとはいえ、次の作業は手早く済ませました。PRを作ってワークフローをトリガーする代わりに、信頼して手動で起動しました:

npx eas-cli@latest workflow:run .eas/workflows/e2e-test-android.yaml

少し待つと、ビルドとテストが完了しました。出力は以前の maestro cloud コマンドのものと同じような形で表示され、そこからリンクを辿ってMaestro Cloud上で実行詳細を確認できます。

今日アプリを作るなら、私はこの方法でセットアップします。どのステップも難しくなく、リポジトリに残る設定も扱いやすいです。コードに集中でき、ビルドや配布のための呪文のような手順が減りました。素早く動いても、何も壊さない自信が持てます。

Maestro Cloud vs. 標準EAS統合:どちらを選ぶべきか

これは、既存のEAS内のMaestro統合(ローカルでテストするのと同じようにEASインフラ上でMaestro CLIを走らせる)に対する代替手段です。どちらを選ぶかは用途次第です。

まず現実的な点として、Maestro Cloudは無料ではありません。一方で標準のMaestro統合は既に持っているEASのパッケージの一部として使える可能性があります。趣味プロジェクトにはMaestro Cloudは必ずしも適していません。Maestro Cloudは成長を目指す本格的なプロダクションアプリ向けです。

なぜMaestro Cloudを使うのか?

スケール面での利点があります。まともなフローの合計実行時間が2分程度なら、5個のテストで合計10分待つのは許容できるかもしれません(しかも無料で)。しかしテストが100個になり、アプリを出荷しようとしている状況なら、結果を早く出したいはずです。上司の機嫌も良くないでしょうし、少しコストをかけてでも結果を早く得たい状況は十分にありえます。

Maestro Cloudは並列実行を提供し、各実行前にデバイスを同一の状態に準備することで信頼性を高めます。ダッシュボードで結果を収集しトレンドを可視化する機能もあり、いわゆるエンタープライズ向けの機能群が揃っています。

まずは試してみてフィードバックをください!