この記事ではClaude Codeに特化して解説します。Claude Code全般は Claude Code完全ガイド2026:インストールから本番運用まで をご覧ください。

iOS Simulator Skillとは

iOS Simulator Skillは、Claude CodeがiOSシミュレータを直接操作できるようにするPythonスキルセットです。GitHubで公開されており(conorluddy/ios-simulator-skill)、AIエージェントがiOSアプリのテスト・デモ・検証をシミュレータ上で自律的に実行できる環境を提供します。

XcodeのiOSシミュレータはmacOS上で動作する仮想デバイス環境です。このスキルセットを導入することで、Claude Codeはシミュレータの起動・アプリインストール・UIの操作・スクリーンショット取得といった一連の操作を、自然言語の指示から自動実行できます。

このスキルが解決する課題
従来の座標ベース自動化はUIレイアウト変更のたびにスクリプト修正が必要でした。iOS Simulator Skillはテキスト・型・IDによるセマンティックナビゲーションを採用し、UIリデザイン後も大幅な再実装なしにテストを維持できます。

主な機能

  • セマンティックナビゲーション:座標ではなくテキスト・コンポーネント種別・アクセシビリティIDで要素を検出する
  • 21本の本番対応スクリプト:ブート・シャットダウン・アプリインストール・起動・タップ・テキスト入力・スクリーンショット・シミュレータ一覧取得など
  • ゼロコンフィグ:macOS上のXcode環境があれば追加設定なしに動作開始できる
  • 自動UDID検出:使用するシミュレータのデバイスIDを自動取得するため毎回指定が不要
  • 構造化出力:JSON形式およびフォーマット済みテキストで出力を提供し、AIが解析しやすい
  • バッチ操作:複数デバイスの一括ブート・削除・消去に対応
  • IDB統合:Facebook製のiOS Developer Bridge(IDB)と連携した高度な操作が可能

AIエージェントとiOSシミュレータの連携フロー

sequenceDiagram participant User as ユーザー participant Claude as Claude Code participant Skill as iOS Simulator Skill participant Simulator as iOSシミュレータ participant App as iOSアプリ User->>Claude: 「アプリのログインフローをテストして」 Claude->>Skill: list_simulators.py を呼び出し Skill->>Simulator: xcrun simctl list Simulator-->>Skill: 利用可能なシミュレータ一覧 Skill-->>Claude: JSON形式で返却 Claude->>Skill: boot_simulator.py {UDID} Skill->>Simulator: xcrun simctl boot {UDID} Claude->>Skill: install_app.py {app_path} Skill->>Simulator: xcrun simctl install {UDID} {app} Claude->>Skill: launch_app.py {bundle_id} Skill->>App: アプリ起動 Claude->>Skill: tap_element.py "ログイン" text Skill->>App: セマンティックナビゲーションでタップ Claude->>Skill: screenshot.py Skill-->>Claude: スクリーンショット取得 Claude-->>User: テスト結果レポート

セマンティックナビゲーション vs 座標ベース

iOS自動化の従来手法は座標指定(x=210, y=450でタップ)でした。この方式の問題点は、画面サイズの違いや、UIリデザインによる要素移動でスクリプトが即座に壊れることです。

iOS Simulator Skillのセマンティックナビゲーションは、Xcodeのアクセシビリティツリーを通じて要素を意味的に特定します。

# 座標ベース(脆弱な方式)
tap(x=210, y=450)  # UIが変わると即座に壊れる

# セマンティックナビゲーション(iOS Simulator Skillの方式)
tap_element(text="ログイン")           # テキストで要素を特定
tap_element(type="XCUIElementTypeButton", index=0)  # コンポーネント種別で特定
tap_element(accessibility_id="login_button")        # アクセシビリティIDで特定
比較項目 座標ベース セマンティックナビゲーション
UIレイアウト変更への耐性 低い(即座に壊れる) 高い(要素が存在する限り動作)
異なる画面サイズ対応 再実装が必要 そのまま動作
可読性 低い(数値の羅列) 高い(意図が明確)
デバッグのしやすさ 難しい 容易
AI生成との親和性 低い 高い(自然言語に近い)

導入方法

前提条件

  • macOS(Xcode動作環境)
  • Xcode(iOS Simulatorを含む)
  • Python 3.x
  • Claude Code

インストール手順

# 1. リポジトリをクローン
git clone https://github.com/conorluddy/ios-simulator-skill.git

# 2. Claude Code のスキルディレクトリに配置
cp -r ios-simulator-skill ~/.claude/skills/ios-simulator-skill

# 3. スクリプトの実行権限を付与
chmod +x ~/.claude/skills/ios-simulator-skill/*.py

基本的な使用例

シミュレータの一覧を取得する:

# 利用可能なiOSシミュレータを一覧表示
python ~/.claude/skills/ios-simulator-skill/list_simulators.py

出力例(JSON形式):

{
  "simulators": [
    {
      "name": "iPhone 15 Pro",
      "udid": "A1B2C3D4-E5F6-7890-ABCD-EF1234567890",
      "state": "Shutdown",
      "runtime": "iOS 17.2"
    },
    {
      "name": "iPhone 14",
      "udid": "B2C3D4E5-F6A7-8901-BCDE-F12345678901",
      "state": "Booted",
      "runtime": "iOS 16.4"
    }
  ]
}

シミュレータを起動してアプリをインストール・実行する:

# シミュレータを起動
python ~/.claude/skills/ios-simulator-skill/boot_simulator.py \
  --udid "A1B2C3D4-E5F6-7890-ABCD-EF1234567890"

# アプリをインストール
python ~/.claude/skills/ios-simulator-skill/install_app.py \
  --udid "A1B2C3D4-E5F6-7890-ABCD-EF1234567890" \
  --app-path "./build/MyApp.app"

# アプリを起動
python ~/.claude/skills/ios-simulator-skill/launch_app.py \
  --bundle-id "com.example.myapp"

UI操作とスクリーンショット:

# テキストでUI要素をタップ
python ~/.claude/skills/ios-simulator-skill/tap_element.py \
  --text "ログイン"

# テキストフィールドに入力
python ~/.claude/skills/ios-simulator-skill/type_text.py \
  --accessibility-id "email_field" \
  --text "[email protected]"

# スクリーンショットを取得
python ~/.claude/skills/ios-simulator-skill/screenshot.py \
  --output "./screenshots/login_screen.png"
Claude Codeでの呼び出し例
Claude Codeに「iOSシミュレータでアプリのオンボーディングフローをテストして、各ステップのスクリーンショットを撮って」と指示すると、スキルを使って自律的に操作・記録を行います。

主要スクリプト一覧

スクリプト名 機能
list_simulators.py 利用可能なシミュレータ一覧を取得
boot_simulator.py 指定したシミュレータを起動
shutdown_simulator.py シミュレータをシャットダウン
install_app.py .appバンドルをインストール
launch_app.py バンドルIDでアプリを起動
tap_element.py セマンティックナビゲーションでタップ
type_text.py テキストフィールドに文字を入力
screenshot.py スクリーンショットを保存
erase_simulator.py シミュレータのデータを消去(リセット)
batch_boot.py 複数シミュレータの一括起動

ユースケース

AIドリブンなiOSアプリテスト

Claude Codeと組み合わせることで、テスト仕様を自然言語で記述しAIが実行する体制が構築できます。OpenHandsのようなAIコーディングエージェントと組み合わせることで、テストコード生成から実行まで自動化できます。

CI/CDパイプラインへの組み込み

GitHub ActionsなどのmacOSランナー上でスクリプトを呼び出し、PRごとのシミュレータテストを自動化できます。

# .github/workflows/ios-sim-test.yml
jobs:
  simulator-test:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Boot Simulator
        run: |
          python .claude/skills/ios-simulator-skill/boot_simulator.py \
            --udid "$"
      - name: Run App Tests
        run: |
          python .claude/skills/ios-simulator-skill/launch_app.py \
            --bundle-id "com.example.myapp"

アプリデモの自動記録

リリースノートやドキュメント用に、シミュレータ上のアプリ操作を自動実行してスクリーンショットを連続取得するワークフローが構築できます。

iOSテストツールの比較

ツール 操作方式 AI親和性 対象 特徴
iOS Simulator Skill セマンティック 高い シミュレータ Claude Code統合、ゼロコンフィグ
XCTest コードベース 中程度 実機・シミュレータ Apple公式、Xcode統合
Appium WebDriver 中程度 実機・シミュレータ クロスプラットフォーム
Maestro YAML定義 中程度 実機・シミュレータ 宣言的、シンプルな構文
EarlGrey コードベース 低い 実機・シミュレータ Google製、Googleアプリ向け

iOS Simulator SkillはAIエージェントとの連携を前提とした設計が特徴です。Browser UseがWebブラウザをAIエージェントに操作させる仕組みと同様のアプローチを、iOS環境に適用したツールといえます。

注意事項

  • macOS専用:XcodeはmacOS限定のため、このスキルはmacOSでのみ動作します
  • Xcode要インストール:Xcodeおよびコマンドラインツール(xcrunsimctl)が必要です
  • 実機テストには別途対応:このスキルはシミュレータ専用です。実機でのテストにはXCTestなど別のツールが必要です

関連記事: Claude Code完全ガイド2026:インストールから本番運用まで

参照ソース