
こんにちは。システムエンジニアのバッサーノです。
私はここ1年ほどモバイルデバイスに関連したソフトウェアの開発業務に携わっています。
特に近年はテスト自動化への注目が高まっており、モバイルデバイスについてもテスト自動化の導入が進んでいます。
今回はモバイルテストの自動化をする上で最もオーソドックスなツールであるAppium(アピウム又はアッピウム)について、概要や使い方に触れていきたいと思います。
この記事がモバイルアプリのテスト自動化に興味がある方、導入を検討している方や勉強中の方の参考になれば幸いです。
1. Appiumとは?
1.1. Appiumの概要
まずAppiumとは何か、形式的なところで言うとAppiumは、iOS・Android向けのネイティブアプリ、ハイブリッドアプリ、Webアプリのテストを自動化するためのオープンソースツールです。
構造としては以下の図のようになっており、Appium Serverがテストスクリプトの命令を解析してAndroid/iOSデバイスを操作するコマンドへと変換し、デバイス上で指定した操作を実行してくれます。

またAppiumという名前からもわかるように、Webのテスト自動化で標準的に使用されているSeleniumベースの記法となっているため、すでにSeleniumを使用している方は同じような形式でAppiumのテストスクリプトを作成することができます。
1.2. Appiumの主な特徴
1.2.1. クロスプラットフォーム対応
iOSとAndroidの両方に対応し、同じテストコードで異なるプラットフォームをテストできます
1.2.2. 多言語サポート
WebDriver Protocolに基づいているため、以下の言語でテストコードを記述できます
- Java
- Python
- JavaScript (Node.js)
- Ruby
- C#
- PHP
1.2.3. オープンソース
Appiumはオープンソースで開発が進められているため、無償で利用することができます
1.3. Appiumを利用するメリット
Appiumを使うことで以下の点を改善することができます。
- 自動化によってリグレッションテストのたびに同じ操作を繰り返す必要がなくなる
- iOSとAndroidで別々のツールを使い分ける必要がない
- CI/CDパイプラインにテストを組み込むことができる
2. Appiumを動かしてみる
では実際にAppiumを使ってどのように自動テストができるのか、Appiumを実際にインストールして動かしてみましょう。
2.1. 事前準備
前項でも述べているようにAppiumはオープンソースであるため、無償でインストールして利用することができます。ここではサンプルとして以下の環境でAppiumを使用してAndroidのテストを実行してみます。
| OS | バージョン |
|---|---|
| macOS | 14.6.1 |
| ツール | バージョン | 確認コマンド |
|---|---|---|
| Node.js | v20.19.1 | node -v |
| npm | 11.6.2 | npm -v |
| JDK | Java 8 | java -version |
2.2. Appium のインストール
この記事の執筆時点(2025年11月)ではAppiumの最新バージョンは3.1.1であるため、今回はこのバージョンをインストールして使ってみます。使用するAppiumのバージョンによっては事前条件の各種ツールの必要バージョンも変化します。
# Appium本体のインストール
npm install -g appium
# インストールの確認
appium -v出力例:
3.1.12.3. UiAutomator2ドライバのインストール
Appiumでは、プラットフォームごとのドライバを個別にインストールする必要があります。
# Android用UiAutomator2ドライバのインストール
appium driver install uiautomator2
# インストール済みドライバの確認
appium driver list --installed出力例:
✔ Listing installed drivers
- uiautomator2@6.3.0 [installed (npm)]なお、すでにAppium2系をインストール済みの場合は、ドライバのバージョンの競合などによりエラーが発生する場合があります。その場合はドライバの更新や再インストールなどを試してみてください。
2.4. Android Studioのインストール
今回はAndroid Studioのエミュレータを使用してテストを実行します。Android Studioをインストールされていない場合は公式サイトからインストールが可能です。
Android Studio公式サイト:https://developer.android.com/studio
2.5. 環境変数の設定確認
Androidツールを使用するためには環境変数が設定されている必要があります。以下のコマンドを実行し、JAVA_HOMEとANDROID_HOMEに正しいパスが表示され、PATHにそれらのパスが含まれていれば問題ありません。
# 環境変数の確認
echo $JAVA_HOME
echo $ANDROID_HOME
echo $PATH未設定の場合は、以下を ~/.zshrc または ~/.bash_profile に追加します:
# Java
export JAVA_HOME=$(/usr/libexec/java_home -v 8)
# Android SDK
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
export PATH=$ANDROID_HOME/emulator:$PATH
# 設定を反映
source ~/.zshrc # または source ~/.bash_profile2.6. Appium Doctorで環境チェック
Appium Doctorを使って、環境が正しくセットアップされているか確認します。
# Appium Doctorのインストール
npm install -g appium-doctor
# Android環境のチェック
appium-doctor --android出力例:
info AppiumDoctor Appium Doctor v.1.16.2
info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
…
info AppiumDoctor ### Diagnostic for optional dependencies starting ###
…「### Diagnostic for necessary dependencies starting ###」のすべての項目に ✓ が表示されればOKです。
2.7. Androidエミュレータの準備
今回はAndroidエミュレータを使用してテストを行います。
- Android Studioを起動
- Tools > Device Manager を開く
- Add a new device… > Create Virtual Device をクリック
- デバイス(例: Pixel 5)を選択して Next
- システムイメージ(例: API 33 (Android 13))を選択して Next (未ダウンロードの場合はダウンロードアイコンからダウンロードが可能)
- エミュレータ名を設定(例:
Pixel_5_API_33)して Finish - Device Managerメニューにある「▶︎」を押してエミュレータを起動する
Android Studio上でエミュレータの画面が表示されればOKです。
また、以下のコマンドでデバイスの接続状態が確認できます。「emulator-5554」という文字列がこのデバイスを指定するためのシリアルIDとなっており、実機の場合もここがデバイス固有の値になります。
# 接続されているデバイスを確認
adb devices出力例:
List of devices attached
emulator-5554 deviceStatus が device と表示されていればOKです。
2.8. Python環境のセットアップ
Appiumは複数の言語のスクリプトに対応していますが、今回はその中でもPythonを使用してサンプルのスクリプトを作成します。
以下で必要なライブラリのインストールを行います。
# Appium Pythonクライアントのインストール
pip install Appium-Python-Client
# Seleniumライブラリ(依存関係)
pip install selenium
# pytest(テストフレームワーク)
pip install pytest2.9. テストスクリプトの作成
それでは、実際に実行するテストスクリプトを見ていきましょう。ここでは、以下のようなテストを作成しています。
- Androidの標準の設定アプリを起動する
- 画面要素を探して標準出力する
- スクリーンショットを取得する
流れとしてはまず端末の指定するためのシリアルIDやテスト対象のアプリの指定などの各種情報をcapabilitiesに設定して、この後立ち上げるAppium ServerにHTTP通信してセッションを作成します。
そして、そのセッションを使用してテスト内の各命令を送信し、デバイスを操作してテストを実行します。
ファイル名: test_android_settings.py
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import time
def test_android_settings():
# Desired Capabilitiesの設定
options = UiAutomator2Options()
options.platform_name = 'Android'
options.automation_name = 'UiAutomator2'
options.device_name = 'emulator-5554' # adb devicesで確認したデバイス名
# 設定アプリを起動(アプリのインストール不要)
options.app_package = 'com.android.settings'
options.app_activity = '.Settings'
# セッション開始までのタイムアウト設定
options.new_command_timeout = 300
# Appium Serverに接続
driver = webdriver.Remote('http://localhost:4723', options=options)
try:
print("✓ 設定アプリが起動しました")
# アプリが起動するまで少し待機
time.sleep(2)
# 現在のアクティビティを取得
current_activity = driver.current_activity
print(f"✓ 現在のアクティビティ: {current_activity}")
# 画面上の要素を検索(検索ボックスを探す)
search_elements = driver.find_elements(AppiumBy.CLASS_NAME, 'android.widget.TextView')
print(f"✓ 画面上に {len(search_elements)} 個のTextView要素が見つかりました")
# 最初のいくつかの要素のテキストを表示
print("\n--- 画面上の要素 ---")
for i, element in enumerate(search_elements[:5]):
text = element.text
if text:
print(f"{i+1}. {text}")
# スクリーンショットを保存
driver.save_screenshot('settings_app.png')
print("✓ スクリーンショットを保存しました: settings_app.png")
print("\n✓ テスト成功!")
except Exception as e:
print(f"✗ エラーが発生しました: {e}")
driver.save_screenshot('error_screenshot.png')
finally:
# セッションを終了
driver.quit()
print("✓ セッションを終了しました")
if __name__ == '__main__':
test_android_settings()2.10. Appium Serverの起動
ここまででテストを実行する準備が整いました。早速テストを実行してみましょう。
手順としてはまずAppium Serverを先に起動します。
# デフォルトポート(4723)で起動
appium
# または、ログレベルを指定して起動
appium --log-level info起動成功時の出力例:
[Appium] Welcome to Appium v3.1.1
[Appium] The autodetected Appium home path: /Users/testkit/.appium
[Appium] Attempting to load driver xcuitest...
[Appium] Attempting to load driver uiautomator2...
[Appium] Requiring driver at /Users/testkit/.appium/node_modules/appium-uiautomator2-driver/build/index.js
[Appium] Requiring driver at /Users/testkit/.appium/node_modules/appium-xcuitest-driver/build/index.js
[Appium] AndroidUiautomator2Driver has been successfully loaded in 1.403s
[Appium] XCUITestDriver has been successfully loaded in 3.417s
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
http://127.0.0.1:4723/ (only accessible from the same host)
http://192.168.3.13:4723/
http://192.168.64.1:4723/
http://172.32.1.15:4723/
http://172.32.1.34:4723/
http://172.32.1.26:4723/
[Appium] Available drivers:
[Appium] - xcuitest@10.8.0 (automationName 'XCUITest')
[Appium] - uiautomator2@6.3.0 (automationName 'UiAutomator2')
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.注意: Appium Serverは起動したままにしておきます(テストスクリプトは別のターミナルウィンドウで実行してください)。
2.11. スクリプトの実行
# スクリプトを実行
python test_android_settings.py実行成功時の出力例:
✓ 設定アプリが起動しました
✓ 現在のアクティビティ: .Settings
✓ 画面上に 42 個のTextView要素が見つかりました
--- 画面上の要素 ---
1. Settings
2. Network & internet
3. Connected devices
4. Apps
5. Notifications
✓ スクリーンショットを保存しました: settings_app.png
✓ テスト成功!
✓ セッションを終了しました出力されたスクリーンショット(settings_app.png)

このようにAppiumを使用することでモバイル端末上でアプリを起動し自動テストを実行することができます。実行時にAndroid Studioのエミュレータの画面をみてみると、実際に端末の設定画面が起動されるところも確認できると思います。
また、今回はAndroid Studioのエミュレータを使用しましたが、実機をADB接続することでエミュレータと同様に実機上でアプリをテストすることも可能です。
3. まとめ
本記事では、モバイルテストの標準的な自動化ツールとして、Appiumの概要を説明し、インストールから実際のテストコード実行までを解説しました。
Appiumは環境構築でのコマンドラインの操作やテストスクリプトの作成など、普段あまり触れない方にとってはとっつきにくい部分もあるかもしれません。実際に現在では様々なテスト自動化のGUIツールが存在し、コードレスに自動テストを作成することもできます。しかしAppiumは原始的な分、より柔軟なテストが作成できますし、自動テストの原理や流れを理解しやすいという点でも勉強して損はないと思います。
次回は、実機でのAppiumのテスト実行の手順や、より複雑なテストを作成するのに便利なツールの紹介をしていきます。

