
シンプルなMobile UIテストツールの「Maestro」をつかってみた!
はじめに
こんにちは。株式会社SHIFTにて自動化アーキテクトをしている荻野です。
モバイルネイティブアプリの自動化ツールだと代表的なものとして、Appium が上げられますが、今回は、Maestro というよりモダンなテストフレームワークを紹介します。
Maestroとは
Maestroは、主にモバイルアプリ(Android/iOS)のE2Eを簡単かつ、高速に実行できる用に設計されたOSSのテストフレームワークです。
モバイルUIテストフレームワークの前身(Appium, Espresso, UIAutomator, XCTest)から学んだ知識から基づいて開発されており、2022年にリリースされました。
Appiumが2012年にオープンソース化されたことと比較すると、比較的新しいツールになっています。
■Maestroの主な特徴
コード不要のフロー定義(YAMLベース)
.yamlファイルでテストスクリプトを記載。インタプリタ型のため毎回のコンパイルが不要。
シンプルなセットアップ
環境構築が簡単。Linux , Mac OSの場合は、下記コマンドで環境構築が完了。(https://docs.maestro.dev/getting-started/installing-maestro )
curl -fsSL "https://get.maestro.mobile.dev" | bash
Windowsの場合も、zipファイルの解凍と環境変数の設定だけで環境構築が完了。(https://docs.maestro.dev/getting-started/installing-maestro/windows )
クロスプラットフォーム対応
iOS , Android , React Native , Flutter , WebViewなどをサポート
ノーコード/ローコード開発可能
Maestro Studioを使用すれば、ノーコード/ローコード開発も可能。
テストフローの更新時に自動実行可能
テストコードが改修されたことを検知して、テスト実行を自動で行うことが可能(Continue Mode)。開発しながら頻繁に自動テストの作成/実行を繰り返すATDD(受け入れ駆動開発)に適している。
実際に「Maestro」を動かしてみる
■Maestroの環境構築
Maestroをインストールする
下記コマンドを実行するだけでインストールが完了します。
curl -fsSL "https://get.maestro.mobile.dev" | bash
さっそく動かしてみる。
Emulatorの環境構築などについては、実施済みを前提としています。
今回は、1.39.13バージョンを使用しました。
サンプル用のフロー実行
Maestroでは、サンプルのアプリが用意されているので、下記コマンドを実施して、サンプルアプリをダウンロードします。
maestro download-samples
ダウンロードが終了すると、samplesフォルダがカレントフォルダに生成されるのでその後、公式の手順に従って、コマンドを実行します。
https://maestro.mobile.dev/getting-started/run-a-sample-flow
cd ./samples
unzip sample.zip
xcrun simctl install Booted Wikipedia.app
maestro test ios-flow.yaml
# ios-flow.yaml
appId: org.wikimedia.wikipedia
tags:
- ios
- passing
---
- launchApp
実行が完了すると、Wikipediaアプリが開かれてテストが完了します。


Continue Modeについて
Continue Modeも試してみます。 https://maestro.mobile.dev/cli/continuous-mode
Continue Modeは、テストスクリプトに変更を加えるたびに、テストが自動的に再開されます。そのため、新しいテストを最初から作成する場合に特に便利な機能です。
Continue Modeは、-cオプションを付与するだけです。
maestro test -c ios-flow.yaml
実行すると通常と同様にテストが実行されます。 その後、ios-flow.yamlを下記に書き換えます。
# ios-flow.yaml
appId: org.wikimedia.wikipedia
tags:
- ios
- passing
---
- launchApp
- tapOn: "Next"
そうすると、自動で書き換えられたテストが実行され、Nextをタップした後のテスト結果となりました。


Maestro Studioについて
Maestro StudioはMaestro CLIに組み込まれているWebアプリで、接続しているデバイスをWeb上で操作しながら、テストスクリプトを作成することができます。
起動方法は、下記コマンドを入力するだけで、Maestro StudioがWebアプリとして起動します。
maestro studio

Maestro Studioを使用することで、ノーコード/ローコードでテストスクリプトを記述することができます。

https://docs.maestro.dev/getting-started/maestro-studio
Yamlの記法について
yamlはプログラミング言語ではないため、共通処理を書きたいときは、別ファイルにする必要がありました。
たとえば、Playwrightの場合だとログインの関数は
// loginHelper.ts
export async function login(page: Page, email: string , password: string) {
await page.fill('input[name="email"]', email)
await page.fill('input[name="password"]', password)
await page.click('button[type="submit"]')
}
// test-login.spec.ts
import { test , expect } from '@playwright/test';
import { login } from './loginHelper';
test('Login test' , async ({ page }) => {
await login(page, 'test@example.com', 'password123');
}
みたいになりますが、Maestroの場合だと
# login.yaml
appId: xxxx
---
- inputText: "${EMAIL}"
id: "email_input"
- inputText: "${PASSWORD}"
id: "password_input"
- tapOn: "ログイン"
# login-flow.yaml
appId: xxx
---
- lanchApp
- tapOn: "ログイン"
- runFlow: login.yaml
env:
EMAIL: test@example.com
PASSWORD: password123
のように関数ではなく、yamlファイルをrunFlowで呼び出す形になります。
サポート外について
Gherkin記法には対応していない。
物理的なiOSデバイスをサポートしていない。
Androidの場合、Unicode文字列の入力は未対応
シンプルがゆえに複雑な処理の自動化は難しい。
などがあります。しかしMaestro自体も頻繁にアップデートされているため、いずれ上記のデメリットも解消する可能性があります。(2025/2時点)
まとめ
ATDD(Acceptance Test-Driven Development)のような開発サイクルの中でテスト設計、実装、リファクタを行う開発手法においては、Maestroは向いていると思います。
Maestroでは、YAMLファイルで書かれるため、コードの知識がなくても直感的に理解しやすいこと。
記述がシンプルであるため、テストコード実装のコストも従来のフレームワークより低くなることが見込まれる。
テストフロー更新時に自動実行可能であることから、新規スクリプトの作成に向いている。(素早くGreenを達成できる)
リリースしてからも頻繁なアップデートが行われているため、今後NativeアプリのUIテストフレームワークの一つとして選択肢に挙がってくるではないでしょうか。
執筆者プロフィール:荻野 善祥
某Slerで、組込機器の自動テスト開発/運用を経験後、SHIFTへ入社。
入社後は、Webの自動テスト開発/運用やアジャイルQAについて日々、奮闘中。
めんどくさがりのため、仕事や家庭でも、自動化・効率化を推進している。
モットーは、「あとは機械にお任せ」。
✅SHIFTへのお問合せはお気軽に
✅\無料ダウンロード/お役立ち資料はこちら
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのAndras Vas