フレームワーク比較 · 2026

Appium vs XCUITest

AppiumとXCUITestは、iOS UIテストを自動化する主要な2つの方法です。Appiumは、W3C WebDriverプロトコル上のクロスプラットフォームのブラックボックスフレームワークであり、XCUITestはAppleが開発した、iOS専用の高速なネイティブフレームワークです。このガイドでは、コードサンプルと5分で実践できる結論を交えながら、両者を徹底的に比較します。

ブラウザとデバイス
6100+
クラウド並列処理
100×
稼働時間SLA
99.99%

世界で最も革新的な企業のいくつかから信頼されています

30秒で答える

どちらを選ぶべきでしょうか?

Appium Appiumを選ぶべき理由は…

iOSとAndroidの両方で実行できる1つのテストスイートを求めている場合、チームがJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合、あるいはテストターゲットを加えて再ビルドできないアプリをテストする場合。

XCUITest XCUITestを選ぶべき理由は…

iOSのみをテストし、Xcodeでアプリを所有しており、アプリと並んでSwiftまたはObjective-Cで記述する、最速かつ最も信頼性の高いネイティブUIテストを求めている場合。

両方選ぶべき場合…

高速なiOS専用のネイティブテストにはXCUITestを、クロスプラットフォームのエンドツーエンドカバレッジにはAppiumを使いたい場合。TestingBotは両方を同じ実機グリッド上で、並列に実行します。

背景

AppiumとXCUITestとは何ですか?

2つのiOS UI自動化フレームワーク、それぞれ正反対の設計。一方はクロスプラットフォームのブラックボックスであり、もう一方はAppleネイティブでXcodeと密接に結びついています。

Appium

Appium

リリース日:2012年 · OpenJS Foundation · Apache 2.0

Appiumは、ネイティブ、ハイブリッド、モバイルWebアプリ向けのオープンソースのクロスプラットフォームテストフレームワークです。W3C WebDriverプロトコルを実装しているため、同じクライアントライブラリがJava、Python、Node.js、Ruby、C#などからiOSとAndroidの両方を操作します。

Appiumは、アプリを外部からブラックボックスとして操作するため、アプリのソースコードを必要としません。iOSでは内部で(WebDriverAgentを介して)AppleのXCUITestを使用し、AndroidではUiAutomator2を使用します。その層こそが、1つのテストをプラットフォーム間で再利用可能にするものです。

  • Java / Python / Node.js / Ruby / C# / PHP
  • クロスプラットフォーム、ネイティブ、ハイブリッド、モバイルWeb
  • ブラックボックス、アプリのソース不要
XCUITest

XCUITest

リリース日:2015年 · Apple · Xcodeの一部

XCUITestは、AppleのUIテストフレームワークであり、Xcodeに同梱されるより大きなXCTestフレームワークの一部です。テストはSwiftまたはObjective-Cで記述され、XCTestを介してデバイス上で実行され、iOSのアクセシビリティツリーへの一流のアクセスを備えています。

XCUITestはネイティブであり、Appleによって保守されているため、高速かつ信頼性が高く、常に最新のiOSに対応しています。トレードオフは、iOS専用であること、SwiftまたはObjective-Cで記述すること、そしてXcodeのテストターゲットを必要とすることです。

  • SwiftとObjective-C
  • ネイティブXCTest、アクセシビリティツリーへのアクセス
  • iOS専用 · Xcodeのテストターゲットが必要
直接対決

Appium vs XCUITest:並べて比較

iOS UIテストとクロスプラットフォームカバレッジにおいて重要なあらゆる側面において。

Appium versus XCUITest feature comparison
項目 Appium XCUITest
First release 2012 2015
Maintained by Open source (OpenJS Foundation) Apple
Platforms iOS + Android iOS only
Languages Java, Python, JS, Ruby, C#, PHP Swift, Objective-C
Protocol W3C WebDriver XCTest / XCUITest (native)
iOS engine XCUITest via WebDriverAgent XCUITest (direct)
Speed Slower (extra layers) Faster (native)
App source needed No (black-box) Yes (Xcode test target)
Tooling Any IDE / CI Xcode
Cross-platform reuse Same test on iOS + Android iOS only
Web / hybrid apps Yes Limited
Flakiness Good Excellent (native sync)
On TestingBot Upload app, WebDriver hub Upload app + test zip, CLI
Free for open source on TestingBot

両方ともTestingBotの実際のiPhoneとiPad上で動作します。Appiumはアップロードされたアプリを使ってWebDriverハブに接続し、XCUITestはTestingBot CLI経由で実行されます。

同じログインテスト

iOSでのログイン

Appiumによってブラックボックスで、XCUITestによってネイティブで操作されるログインフロー。どちらもTestingBot上の同じ実際のiPhoneで実行されます。

Appium + Python test_login.py
# real iPhone on TestingBot
from appium import webdriver
from appium.options.ios import XCUITestOptions
from appium.webdriver.common.appiumby import AppiumBy

opts = XCUITestOptions().load_capabilities({
    'platformName': 'iOS',
    'appium:app': 'tb://APP_ID',
    'tb:options': { 'realDevice': True },
})
d = webdriver.Remote('https://hub.testingbot.com/wd/hub', options=opts)
d.find_element(AppiumBy.ACCESSIBILITY_ID, 'username').send_keys('jane')
d.find_element(AppiumBy.ACCESSIBILITY_ID, 'sign_in').click()
assert d.find_element(AppiumBy.ACCESSIBILITY_ID, 'welcome').is_displayed()
XCUITest + Swift LoginTests.swift
// runs via the TestingBot CLI
func testLoginRedirectsToDashboard() {
    let app = XCUIApplication()
    app.launch()

    app.textFields["username"].typeText("jane@example.com")
    app.secureTextFields["password"].typeText("secret")
    app.buttons["sign_in"].tap()

    XCTAssertTrue(app.staticTexts["welcome"].exists)
}

Appiumのテストはアップロードされたアプリを使ってWebDriverハブに接続し、XCUITestのスイートはTestingBot CLI経由で実行されます。どちらも実際のiPhoneとiPadで実行されます。

意思決定マトリックス

どちらを選ぶかは

Appiumを選ぶとき

  • 書き直しなしでiOSとAndroidの両方で実行できる1つのテストスイートが必要な場合。
  • チームがSwiftではなくJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合。
  • テストターゲットを加えて再ビルドできないアプリ、またはサードパーティやハイブリッドのアプリをテストする場合。
  • 既にSeleniumまたはWebDriverを使用しており、モバイルでも同じプロトコルを使いたい場合。
  • ネイティブ、ハイブリッド、モバイルWebのフローを1つのツールでテストする場合。
TestingBotでAppiumを実行する

XCUITestを選ぶとき

  • iOSのみをテストし、Xcodeでアプリを所有しているため、テストターゲットで問題ない場合。
  • 最新のiOSに追従する、最速かつ最も信頼性の高いネイティブiOSテストを求めている場合。
  • チームがSwiftまたはObjective-Cで開発を行っており、アプリのコードの隣にテストを置きたい場合。
  • iOSのアクセシビリティツリーやネイティブコンポーネントへの深いアクセスが必要な場合。
  • 最初の日からXcodeのビルドとCIの一部としてUIテストを実行する場合。
TestingBotでXCUITestを実行する
TestingBotは両方をサポートしています

どちらかを選ぶのはやめて、両方を同じグリッドで実行しよう

アプリをアップロードし、WebDriverハブ経由でAppiumを使ってブラックボックスで操作するか、TestingBot CLI経由でXCUITestスイートを実行します。どちらも同じ実際のiPhoneとiPad上で、同じダッシュボード、並列スロット、ビデオ録画、EUデータ所在地とともに実行されます。

  • 実際のiPhoneとiPad
  • 両フレームワークのテスト履歴を並べて表示
  • オープンソースであれば無料、両方のフレームワーク
testingbot.com / run both
# Appium
appium:app = 'tb://APP_ID'
hub: https://hub.testingbot.com/wd/hub
# XCUITest (@testingbot/cli)
$ testingbot xcuitest app.ipa app-test.zip
--device "iPhone 16" --real-device
よくある質問

よくある質問

チームがこれらのフレームワークを選択する前、あるいは組み合わせる前に自問する質問。

XCUITestはAppiumより速いですか?

はい、iOSでは。XCUITestはAppleのネイティブフレームワークで、XCTestを介してデバイス上で実行されるため、Appiumが追加するWebDriverとWebDriverAgentの余分な層を回避します。これにより、XCUITestはより高速で、非常に信頼性が高くなります。トレードオフは、XCUITestがiOS専用でSwiftまたはObjective-Cで記述される一方、Appiumは同じテストをお好みの言語でiOSとAndroidにわたって実行することです。

iOSにはAppiumとXCUITestのどちらを使うべきですか?

目標によります。Xcodeプロジェクトを所有しているiOS専用のテストでは、XCUITestが最速かつ最も信頼性の高いネイティブ実行を提供します。クロスプラットフォームカバレッジ、Swift以外の言語でのテスト、または再ビルドできないアプリには、Appiumの方が適しています。Appiumは内部でXCUITestを介してiOSを操作するため、選んでいるのは抽象化のレベルであって、異なるエンジンではないことに注意してください。

Appiumは内部でXCUITestを使用していますか?

はい。iOSでは、AppiumはWebDriverAgentと呼ばれるコンポーネントを使用して、AppleのXCUITestフレームワークを介してアプリを操作します。つまり、AppiumのiOSテストは最終的にXCUITestの上で実行され、Appiumはその上にクロスプラットフォームのWebDriver APIを追加します。だからこそAppiumは、各プラットフォームのネイティブ自動化を内部で使用しながら、iOSとAndroidに同じテストインターフェースを提供できるのです。

XCUITestはAndroidアプリのテストを行うことができますか?

いいえ。XCUITestは、Apple製のiOS専用フレームワークです。Androidをテストするには、Espresso(Googleのネイティブフレームワーク)、またはUiAutomator2を介してAndroidを操作するAppiumが必要です。これらのうち、両方のプラットフォームで同じテストを実行できるのはAppiumだけです。TestingBotは、それらすべてを実際のデバイスで実行します。

iOSとAndroidで同じテストを再利用できますか?

Appiumなら、はい。AppiumはW3C WebDriverプロトコルを実装し、ネイティブドライバ(iOSではXCUITest、AndroidではUiAutomator2)を抽象化するため、1つのテストでわずかなケイパビリティの変更だけで両方のプラットフォームを対象にできます。XCUITestはこれができません。iOS専用です。クロスプラットフォームの再利用が重要なら、Appiumが選ぶべきフレームワークです。

XCUITestにはMacとXcodeが必要ですか?

XCUITestのテストをローカルで記述してビルドするには、Xcodeが入ったMacが必要です。それらを大規模に実行するには、自前のMacフリートは必要ありません。アプリの.ipaとXCUITestの.zipを一度ビルドし、両方をTestingBotにアップロードして、クラウド上の実際のiPhoneとiPadで実行します。Appiumのテストには、あなたの側でXcodeはまったく必要ありません。

TestingBot上でAppiumとXCUITestを実行できますか?

はい、どちらも同じTestingBotグリッド上で動作します。AppiumはアプリをTestingBot Storageにアップロードし、tb://APP_IDappium:appケイパビリティとともにhttps://hub.testingbot.com/wd/hubに接続します。XCUITestはTestingBot CLI経由で実行されます:testingbot xcuitest app.ipa app-test.zip --device "iPhone 16" --real-device。どちらも同じダッシュボード、並列スロット、EUデータ所在地を共有し、オープンソースであれば無料です。

さらに詳しく知りたい方は、専用のAppiumページとXCUITestページをご覧ください。

無料トライアルにサインアップ

TestingBotのクラウド上の実際のiPhoneとiPadで、AppiumとXCUITestを実行できます。

無料トライアルを開始する