本書の前提:
02_回帰テスト版の前提に加え、クラウドファーム (BrowserStack / LambdaTest / Sauce Labs / AWS Device Farm) を全廃し、ローカル Mac と USB-C ケーブル接続の実機モバイル端末のみで完結させる 運用に最適化したベストプラクティス。底本:
02_回帰テスト版/次世代検証ツール選定案_問2_モバイルWeb_回帰テスト版.mdの結論を、オールローカル前提に書き直したもの。調査日: 2026-06-08
Mac mini 上で Playwright (Android Chrome / Samsung Internet 用) + Appium Safari Driver (iOS / iPadOS Safari 用) を起動し、USB-C 接続の実機モバイルブラウザに対して直接通信する完全ローカル構成。クラウド経由の実機 iOS Safari Playwright サービスは廃止し、自社 Apple Silicon Mac の Web Inspector / safaridriver と Appium Safari Driver で代替する。
| 項目 | CI/CD 前提版 | 回帰テスト版 | ローカル実機版 |
|---|---|---|---|
| コアフレームワーク | Playwright | Playwright | Playwright (Android 用) + Appium Safari Driver (iOS 用) のハイブリッド |
| iOS Safari 接続 | BrowserStack 経由 | BrowserStack Live | USB-C 接続実機 + Appium Safari Driver via safaridriver |
| Android Chrome 接続 | クラウド経由 | クラウド経由 | USB-C 接続実機 + ADB + Chrome DevTools Protocol |
| Samsung Internet | BrowserStack | BrowserStack | USB-C 接続実機 Galaxy + Appium |
| 視覚検証 | Applitools (CI 版) / PixelMatch (回帰版) | PixelMatch | PixelMatch + 手動目視 |
| 端末ファーム | BrowserStack 多重化 / Live | BrowserStack Live | 完全廃止、自社実機のみ |
| CI/CD | GitHub Actions 並列度 5 | 廃止 | 廃止 |
| データ流出 | クラウドにスクリーンショット送信 | 同左 | ゼロ (オンプレ完結) |
| マルチモーダル LLM | 不採用 | 不採用 | 変更なし (ローカル LLM 補助のみ) |
iOS Safari の自動化は実機 USB-C 接続が必須である。Apple のブラウザエンジン制約により:
┌───────────────────────────────┐
│ Mac mini M4 Pro │
│ ├─ Appium 3.x server │
│ ├─ Safari Driver (XCUITest) │
│ └─ safaridriver (Apple 公式) │
└──────┬────────────────────────┘
│ USB-C ケーブル
▼
┌───────────────────────────────┐
│ iPhone 15 Pro (実機) │
│ ├─ Safari (iOS 18) │
│ ├─ Web Inspector │
│ └─ WebKit Remote Debugger │
└───────────────────────────────┘
capabilities = {
'platformName': 'iOS',
'appium:automationName': 'XCUITest',
'appium:deviceName': 'iPhone 15 Pro',
'appium:udid': '00008130-001A4D2E0E8B001E', # xcrun devicectl で取得
'browserName': 'Safari',
'appium:safariInitialUrl': 'https://example.com/',
'appium:safariAllowPopups': True,
}| 機種 | 適合 |
|---|---|
| Mac mini M4 / M4 Pro (推奨) | ✅ |
| Mac Studio M4 Max | ✅ (大規模並列向け) |
| MacBook Pro M4 系 | ⚠️ (USB-C ポート数注意) |
| Intel Mac | ❌ |
| 機種 | 役割 |
|---|---|
| iPhone 15 / 16 / 17 | iOS Safari メイン検証 |
| iPhone 15 Pro Max / 17 Pro Max | 大画面 iOS 検証 |
| iPad Air M2 / iPad Pro M4 | iPadOS Safari / Stage Manager 検証 |
| iPad mini A17 Pro | 小画面 iPad 検証 |
| 機種 | 役割 |
|---|---|
| Pixel 8 / 9 | Android Chrome メイン検証 |
| Galaxy S24 / S25 | Samsung Internet 検証 (One UI 固有挙動) |
| Xiaomi / OPPO | グローバル端末対応の場合 |
BrowserStack 年額 $468 ≈ ¥73,000 と比較し、10 年で回収。ただし他の問1 と共有する場合は実質初期投資ゼロ。
brew install node
brew install --cask android-platform-tools # ADB
brew install libimobiledevice ios-deploy # iOS USB 接続
brew install --cask android-studio # SDK Manager で必要バージョン install
# Xcode 16 (Mac App Store)
xcode-select --install
# Appium 3.x + Safari Driver + UiAutomator2 Driver
npm install -g appium@^3.5.0
appium driver install safari # iOS Safari 用
appium driver install xcuitest # iOS ネイティブ用 (補完)
appium driver install uiautomator2 # Android 用
# Playwright (Android 用)
npm install -g playwright@^1.50
npx playwright install # Chromium / WebKit / Firefox の bundled をローカルに
# Python テストランナー
pip install playwright pytest-playwright opencv-python scikit-image pixelmatch# 1. Mac 側 Safari の開発メニュー有効化 (GUI で実施)
# Safari → 環境設定 → 詳細 → "メニューバーに開発メニューを表示"
# 2. iPhone 側 Web Inspector ON (GUI で実施)
# 設定 → Safari → 詳細 → Web インスペクタ ON
# 3. USB-C 接続後、safaridriver の有効化
sudo safaridriver --enable # macOS の Safari WebDriver を有効化
# 4. 実機 UDID 確認
xcrun devicectl list devices# 開発者オプション ON、USB デバッグ ON は問1 と同様
adb devices
# Chrome DevTools Protocol (CDP) で接続するための remote debugging
adb forward tcp:9222 localabstract:chrome_devtools_remote
# Playwright で Android Chrome に接続 (例)
# Playwright の Android サポートは公式 stable は限定的、CDP 直接接続が主Playwright は公式に Android Chrome をある程度サポートしている
(_android API、experimental):
// playwright/android (experimental) を使うパターン
const { _android } = require('playwright');
(async () => {
const [device] = await _android.devices();
await device.shell('am force-stop com.android.chrome');
const context = await device.launchBrowser();
const page = await context.newPage();
await page.goto('https://example.com/');
await page.screenshot({ path: 'android_chrome.png' });
await context.close();
await device.close();
})();実機が ADB で認識されていれば、Playwright がそのまま Chrome を制御可能。Samsung Internet は CDP 互換のためほぼ同手順。
┌─────────────────────────────────────────────┐
│ Mac mini M4 Pro │
│ ├─ Appium 3.x server │
│ │ ├─ Safari Driver (iOS 用) │
│ │ └─ UiAutomator2 Driver (Android 用) │
│ ├─ Playwright (Android Chrome / CDP 経由) │
│ ├─ iOS Simulator (補完) │
│ ├─ Android Emulator (補完) │
│ └─ Test Runner (pytest / Mocha) │
└──────┬──────────────────────────────────────┘
│ Thunderbolt 4 / USB-C
▼ CalDigit TS4
│
├─ USB-C → iPhone 15 (実機 Safari)
├─ USB-C → iPad Air M2 (実機 Safari)
├─ USB-C → Pixel 8 (実機 Chrome)
└─ USB-C → Galaxy S24 (実機 Samsung Internet)
| 検証対象 | 実機優先 / 補完で十分 |
|---|---|
| DOM 構造・JS 挙動の確認 | Simulator / Emulator で十分 |
| タッチ・スワイプ・ピンチ | 実機推奨 (Simulator は摩擦感ゼロ) |
| PWA インストールフロー | 実機必須 (Simulator では「ホーム画面に追加」フロー不可) |
| DRM 動画再生 (EME / FairPlay) | 実機必須 |
| Visual Diff (DPI 差吸収) | 実機推奨 (Simulator は完全ベクター描画で実機と微差あり) |
| OS 古バージョン (iOS 17 等) | Simulator で OS 網羅 |
| Push Notification | 実機必須 |
| 領域 | 実装 |
|---|---|
| 通常 UI (Playwright auto-wait 対応) | Playwright + 直接 DOM 検証 |
| Canvas 領域 | スクリーンショット取得後 PixelMatch / OpenCV SSIM |
| DRM 領域 | <video> プロパティ監視 + 実機画面を Mac
でキャプチャ → 手動目視 |
| PWA バナー検出 | Playwright page.evaluate() で
beforeinstallprompt リスナー登録 (Android Chrome のみ) |
スクリーンショット取得は USB-C 直結で 1-2 秒、クラウド経由 (5-10 秒) より圧倒的に速い。
| 観点 | 必須要件 |
|---|---|
| ホスト | Apple Silicon Mac M2 以降、メモリ 32 GB 推奨 |
| iOS Safari 接続 | USB-C 直結 + Mac Safari の開発メニュー有効化 + iPhone の Web
インスペクタ ON + safaridriver --enable |
| Android Chrome 接続 | ADB 接続 + USB デバッグ ON |
| コアフレームワーク | Playwright (Android) + Appium Safari Driver (iOS) のハイブリッド |
| 視覚比較 | PixelMatch / OpenCV SSIM、商用 Visual AI 不要 |
| データ流出ゼロ | スクリーンショット・ログを外部送信しない |
sudo safaridriver --enable
が起動条件| 番号 | 作業 | 担当 | 想定時間 |
|---|---|---|---|
| 1 | Mac mini 起動、Xcode / Appium / Playwright バージョン確認 | QA | 10 分 |
| 2 | 実機 4 台を USB-C 接続、xcrun devicectl list /
adb devices で認識確認 |
QA | 5 分 |
| 3 | Mac Safari 開発メニュー / iPhone Web インスペクタの ON 確認 | QA | 5 分 |
| 4 | テストスクリプト / シナリオの最新化 | QA + Dev | 30-60 分 |
| 5 | Appium server 起動、iOS Safari 主要シナリオ実行 (iPhone + iPad) | QA | 1-2 時間 |
| 6 | Playwright (Android CDP) で Chrome / Samsung Internet 実行 | QA | 1-2 時間 |
| 7 | iOS Simulator / Android Emulator で OS バージョン網羅 | QA | 1 時間 |
| 8 | PixelMatch / SSIM 差分検出された画面の目視確認 | QA | 1-2 時間 |
| 9 | DRM 領域シナリオの手動目視レビュー (実機画面を直接観察) | QA | 30 分 |
| 10 | PWA インストールフローの実機手動確認 | QA | 30 分 |
| 11 | レポート作成、Issue 起票 | QA | 1 時間 |
| 合計 | 約 1 営業日 |
| 対立項目 | CI/CD 前提版 / 回帰テスト版 | ローカル実機版 |
|---|---|---|
| 端末ファーム | BrowserStack 多重化 / Live | 完全廃止、自社実機のみ |
| iOS Safari 接続経路 | クラウド経由 Playwright | USB-C + Appium Safari Driver |
| Android Chrome 接続 | クラウド経由 Playwright | ADB + Playwright _android (CDP) |
| 視覚 AI | Applitools / PixelMatch | PixelMatch のみ |
| WebDriver BiDi | 不採用 | 変更なし |
| マルチモーダル LLM | 不採用 | 変更なし、ローカル LLM 補助のみ |
| OS バージョン網羅 | クラウド 30,000+ デバイス | Simulator/Emulator + 実機 5-10 台 |
_android の安定性: 公式
experimental 扱い、stable 化までは Appium Safari Driver
と組み合わせるか、Selenium WebDriver も検討beforeinstallprompt
検出までで、実際のインストール操作は手動 UAT| 品目 | 金額 (税込) |
|---|---|
| Mac mini M4 Pro 32 GB / 512 GB | ¥250,000 |
| iPhone 15 (USB-C モデル) | ¥120,000 |
| iPad Air M2 11“ | ¥100,000 |
| Pixel 8 | ¥80,000 |
| Galaxy S24 | ¥120,000 |
| CalDigit TS4 | ¥45,000 |
| USB-C ケーブル + 周辺 | ¥10,000 |
| Apple Developer Program (年契) | ¥12,800 |
| 初期投資合計 | 約 ¥737,800 |
問1 と Mac / 周辺を共用すれば実質端末費 ¥420,000 程度の追加投資で完結可能。
底本
02_回帰テスト版/次世代検証ツール選定案_問2_モバイルWeb_回帰テスト版.md
の参考文献をすべて引き継ぐ。ローカル実機版固有の追加情報: