iOS アプリの開発に、Mac は必ずしも必要ではない
EAS Simulator を知る——Expo の新サービスで、すべての開発者とコーディング agent がクラウド上に iPhone を 1 台持てるようになる。
日本語
コピー

世界のデスクトップデバイスのおよそ4分の3は Mac ではない。Expo があれば、EAS Build を使ってどのデバイスからでも iOS アプリをビルドできる。だが agentic 開発の時代に入り、新たなボトルネックが現れた。agent がコード変更を繰り返し改良していくには、即時のフィードバックが欠かせない。iOS Simulator は Xcode に付属しており、Xcode は macOS でしか動かない。つまり Mac がなければ、あなたや agent が加えた変更のたびに、実機の iPhone でしか確認できない。EAS Simulator は、その必要をなくす。
機能的には、EAS Simulator はクラウド上でシミュレータのセッションを動かし、それをブラウザのタブにストリーミングする。このサービスが可能にするのは、モバイルソフトウェアの作り方そのものを変えるものだ。どのノート PC も iOS 開発マシンになり、どのコーディング agent も自分の作業を検証するための実機を手に入れ、URL を受け取った人は誰でも同じ端末を一緒に操作できる。
私たちのエンジニア Keith Kurak はEAS Simulator を、誰も試したことのない場所へ持ち込んだ。Windows on ARM のノート PC で、Fast Refresh 付きの iOS Simulator を動かしたのだ。この記事では、Keith がデモで見せた内容と、私がアプリ開発で使い続けている5つの機能を紹介する。
動画で見たい方はこちら。短縮版はここにある:
Keith が示したもの:Windows マシンで iOS 開発
Keith が公開した内容はこうだ:
Windows on ARM では Android Studio が動かず、Microsoft は Snapdragon X で Windows Subsystem for Android を打ち切った。あのノート PC にはエミュレータもシミュレータも一切なかった。それが今では、ブラウザのタブの中に iPhone がいる。VS Code での変更は Fast Refresh でそのまま反映される。
必要なコマンドは 2 つだけ。シミュレータ向けの開発ビルドが要る。release ビルドはホットリロードしないからだ。JavaScript がビルド時に固定されてしまう。あとはトンネル経由で Metro を起動し、そこにつなぐセッションを立ち上げる:
EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel
eas simulator:start --platform ios --type agent-device \
--build-id <your-build-id> \
--open-url "<your-scheme>://expo-development-client/?url=<encoded-metro-url>" \
--name "windows hot reload" --non-interactive
このコマンドが webPreviewUrl を返す。開けば、アプリはクラウド上の iPhone で動いている。ファイルを 1 つ編集して保存すれば、変更がデバイスに現れる。Keith は WSL で実行した。Expo Go のバージョンを含む完全な手順は実行と制御のドキュメントにある。
これだけでも、Windows や Linux マシンから何を作れるかが変わる。だが EAS Simulator については、ほかにも知っておくべきことが 5 つある:
1. シミュレータでカメラアプリをテストする
私は OpenMulticam というカメラアプリを作っている。複数の iPhone カメラから同時に録画するアプリで、テストにはこれまで実機が欠かせなかった。シミュレータにカメラは存在しなかったからだ。EAS Simulator のウェブプレビューがそれを変えた。ツールパネルに Camera セクションがあり、それを開くとアプリにシミュレートされたカメラ映像が届く。

録画を押して、停止し、その素材を開く。カメラのキャプチャパイプライン全体がクラウド上の1台のデバイスで動いており、あなたはブラウザのタブで操作するだけでいい。


注意すべき点が2つある。デフォルトの画面ソースはアニメーションのテストパターンだが、パソコン内の動画や写真をパネルにドラッグして画面ソースにすることもできる。注入を効かせるには、あなたのアプリが標準の AVFoundation キャプチャ API を使っている必要がある。ほとんどのカメラライブラリはそうしている。
1つ制約がある。現時点でカメラパネルはブラウザ上でクリックして操作する必要があり、agent にはまだ開放されていない。つまり agent が自分でカメラを注入することはできない。ここで触れた以外の機能は、agent がすべて実行できる。
2. agent に自分の作業を検証させる
クラウド agent でもローカルのコーディング agent でも、agent-device 経由でシミュレータを操作できる。Argent でもよく、computer use のほうが慣れているならそれも使える。
最も手早い設定方法は eas-simulator skill だ。Claude Code、Cursor、Codex にインストールし、何を確認するかを agent に伝えれば、あとは全部やってくれる。アプリをビルドし、クラウドセッションを起動し、ページを1つずつクリックし、スクリーンショットを送り返してくる。終わったらセッションのリプレイを見るだけでよく、自分でブランチを引っ張ってきてテストし直す必要はない。
3. URL でスマホをチームに共有する
プレビュー自体が1つのウェブサイトだ。URL を同僚に送れば、あなたが今何をしているかをリアルタイムで見られ、シミュレータも操作できる。あなた、同僚、クラウド agent、ローカル agent が同時に同じデバイスを操作できる。
共有できるビューだけが欲しくて agent の操作が不要なら、ちょうどそれに合うセッションタイプがある:
eas simulator:start --platform ios --type web-preview-only --name "design review"
プレビューには全画面ボタンもあり、押すとデバイスだけが残る。
4. agent の操作を含め、すべてのセッションをリプレイする
セッションは毎回 expo.dev のあなたのプロジェクトのページに表示される。

完了したセッションを開くと、デバイス上で起きたすべてを収めた完全な動画と、各インタラクションのタイムラインが表示されます。動画に対応するセッションでは、agent が app をクリックして操作し、指定した機能をテストする様子を、各ステップのスクリーンショット付きで確認できます。

pull request でこれらのリンクを証拠として使い始めた。「これがバグ、これが修正、これが再現」のほうが「信じてくれ、自分で走らせた」よりずっと説得力がある。
5. どんなフレームワークのアプリでも持ち込める
Expo や React Native でなくても構わない。デバイスは空の状態で起動するので、iOS Simulator のビルド成果物でも Android APK でもアップロードできる。SwiftUI、Kotlin、Flutter、シミュレータ上で動くものなら何でもいい。
eas simulator:exec npx agent-device@latest install com.example.app ./path/to/MyApp.app --platform ios
はじめかた
EAS Simulator は現在 limited preview で、waitlist からバッチごとに順次案内している。
-
waitlist に登録する:expo.dev/services/simulators。
-
ドキュメントを読む。Get started ではセッションの種類を、Run and control an app では本記事で触れた Fast Refresh のレシピを扱っている。
-
agent に任せる。eas-simulator skill をインストールすれば、実際のデバイスランタイム上で何かを検証させられる。
自分のマシンでこの一連の流れを組み立てるチュートリアルが読みたいなら、教えてほしい。クラウドのシミュレータをどう使うのかも気になっている。私たちの Discord コミュニティの #eas-simulator チャンネルでユースケースを共有してくれると嬉しい。
よくある質問
EAS Simulator とは? Expo が提供するサービスで、EAS のインフラ上でリモートの iOS Simulator または Android Emulator を動かす。CLI、REST API、coding agent、ブラウザから操作できる。対応する iOS セッションにはリアルタイムのウェブプレビューが付く。現在は limited preview。
Expo で Windows から iOS アプリをビルドできる? できる。EAS Build が Expo の Mac インフラ上でアプリをコンパイルし、EAS Simulator も同じ場所で iOS Simulator を動かす。開発ビルドはトンネル経由で Metro に接続するので、ブラウザ上で Fast Refresh が得られる。CLI は WSL で動かす。
iOS Simulator でカメラ機能をテストできる? EAS Simulator のウェブプレビューならできる。ツールパネルの Camera セクションがアプリに模擬カメラ映像を流し込む。デフォルトは動くテストパターンで、ドラッグした写真や動画も使える。アプリは標準の AVFoundation キャプチャ API を使っている必要がある。
AI agent は EAS Simulator を使える? 使える。Agent は agent-device か Argent を通じてデバイスを操作する。eas-simulator skill が Claude Code、Cursor、Codex に一連の流れを教える。アクセス権の確認、ビルド、セッションの開始、デバイス操作、フォレンジック、クリーンアップまで。
アプリは Expo か React Native でないとダメ? ダメではない。iOS Simulator のビルドでも Android APK でも動く。
EAS Simulator のセッションは他人と共有できる? できる。ウェブプレビューは 1 つの URL なので、リンクを受け取った人は誰でも同じデバイスを同時に視聴・操作できる。agent による操作が不要なら web-preview-only タイプのセッションを使えばいい。
関連リンク
-
EAS Simulator ドキュメント:https://docs.expo.dev/preview/eas-simulator/introduction/
-
アプリの実行と操作:https://docs.expo.dev/preview/eas-simulator/run-and-control/
-
eas-simulator skill:https://github.com/expo/skills/tree/main/plugins/expo/skills/eas-simulator
-
agent-device:https://docs.expo.dev/agents/agent-device/
-
serve-sim、ウェブプレビューを支えるツール:https://github.com/expo/serve-sim
-
Keith の記事:https://x.com/llamaluvr/status/2094414188181332015
-
OpenMulticam:https://github.com/rami-maalouf/open-multicam