Claude CodeでApple Watchアプリを作る — watchOS独立実行アプリの手順
Apple Watch上でClaude Codeは動かず、Macで開発します。Claude CodeでwatchOSアプリを作る2つの経路と、独立実行アプリの作り方、シミュレーター名の調べ方、見た目確認でつまずく点をまとめます。
Claude CodeでwatchOSアプリを作る経路は2つあります。ターミナルでSwiftUIのコードを書いてxcodebuildでビルドする経路と、Xcodeに組み込まれたClaude for Xcodeを使う経路です。違いが出るのは、シミュレーターで見た目を確かめる場面です。
Apple Watch上でClaude Codeは動くのか
Apple Watchの上でClaude Codeは動きません。Claude Codeの動作環境はmacOS 13.0以上、Windows 10 1809以上、Ubuntu 20.04以上で、watchOSは含まれません。Apple Watchアプリを作るときは、Mac上のClaude Codeでコードを書き、ビルドしたアプリをApple Watchのシミュレーターか実機で動かします。
Apple Watchでの利用を考えている場合は、次の2つに分けて読むと迷いません。
| やりたいこと | この記事の該当部分 |
|---|---|
| Claude CodeでApple Watch向けアプリを作る | この記事の該当部分全体(独立実行アプリの作り方からビルドまで) |
| XcodeからClaudeを使う | この記事の該当部分「CLIとClaude for Xcodeの使い分け」とClaude for Xcodeの解説 |
前提 — macOSとXcode、そしてシミュレーターの有無
watchOSアプリの開発にはmacOSとXcodeが必須です。WindowsやLinuxではXcodeが動かないため、macOS上での作業になります。Claude Codeを使う場合も同じです。
CLIの見た目確認(Computer use)はmacOS限定で、ProまたはMaxプランが条件です。Team・Enterpriseプランでは使えず、-pによる非対話モードでも使えません。
作業を始める前に、手元のXcodeにwatchOSのシミュレーターが入っているかを確かめます。Xcode 26.6とwatchOS 26.5のランタイムが入った環境では、次のように確認できます。
xcodebuild -version
xcrun simctl list runtimes | grep -i watchos
xcrun simctl list devices available | grep -A3 "watchOS"出力は次のとおりです(デバイスのIDは省略しています)。
Xcode 26.6
Build version 17F113
watchOS 26.5 (26.5 - 23T570) - com.apple.CoreSimulator.SimRuntime.watchOS-26-5
-- watchOS 26.5 --
Apple Watch Series 11 (46mm) (Shutdown)
Apple Watch Series 11 (42mm) (Shutdown)
Apple Watch Ultra 3 (49mm) (Shutdown)watchOSの行が出なければ、xcodebuild -downloadPlatform watchOSでランタイムを入れます。-downloadPlatformの引数にwatchOSが選べることは、xcodebuild -helpの出力に載っています。ここに出たApple Watch Series 11 (46mm)のような名前が、後でxcodebuildの-destinationに渡すシミュレーター名になります。
独立実行アプリにするか、iPhoneとセットにするか
Apple Watchは、iPhoneが手元になくても動くことが期待されます。Appleは、iPhone側のアプリを必要としない独立実行アプリを推奨しており、作り方は2通りあります。
watchOSアプリの2つの作り方
Watch-only App
iOS側のアプリを持たない、Apple Watch専用アプリです。Xcodeで「File > New > Project」から、watchOSタブのAppを選び、プロジェクト名の入力画面で「Watch-only App」にします。ペア設定されたiPhoneには何もインストールされません。
iOSアプリとセット
「Watch App with New Companion iOS App」で作ると、既定は依存型(dependent)のwatchOSアプリです。iPhone側のアプリのインストールが終わるまで起動できません。独立動作にするには、Watch Appターゲットの「Deployment Info」で「Supports Running Without iOS App Installation」を有効にします。この項目は、新規プロジェクトでは既定で無効です。
既存のiOSプロジェクトにwatchOSを足す場合は、プロジェクトエディタの「Add a target」からwatchOSタブのAppを選び、「Watch app for Existing iOS App」を指定します。
Watch-only Appを選ぶと、Xcodeは4つのターゲットを作ります。1つ目のルートターゲットはiOS側のラッパーとなるスタブで、ルートのバンドルIDの設定とApp Store向けのパッケージングを担います。このバンドルIDはUniversal Purchaseやデバイス間の通信に使われます。スタブからiOSの実行ファイルは作られません。残る3つがアプリ本体と、そのユニットテスト・UIテストです。
独立実行アプリでApple Watch単体のテストが必要な4項目
独立実行アプリは、アカウント作成やデータ取得をiPhoneなしで済ませる必要があります。Appleが挙げる確認項目は次の4つで、Claude Codeに実装を頼むときも、そのまま依頼文の受け入れ条件にできます。
Apple Watch単体で確かめる項目
アカウント
アカウント作成とサインインを、Apple Watch上で完結させます。
権限
システム機能の許可を求めるダイアログを、iPhoneではなくApple Watch上に出します。
データ取得
WatchConnectivityを主な経路にしません。CloudKitや自前サーバーとの同期を検討します。通知
コンプリケーション用を含むプッシュ通知を、Apple Watchへ直接送ります。
連携するiOSアプリがあれば、iPhoneが使えるときに限ってWatchConnectivityで情報を受け取れます。
Claude Codeでビルドする — CLIの手順
Claude Codeは他の言語のプロジェクトと同じように、Bashツール経由でコードを書いてビルドします。ビルドにはxcodebuildを使い、watchOS向けの違いは-destinationの指定です。
先ほど調べたシミュレーター名を使って-destinationを指定します。次のスキーム名とシミュレーター名は、書式を示すための例です。
xcodebuild -scheme "MyWatchApp Watch App" \
-destination "platform=watchOS Simulator,name=Apple Watch Series 11 (46mm)" \
buildスキーム名とシミュレーター名は、自分のプロジェクトと環境のものに置き換えます。シミュレーター名が合わないときは、xcodebuild -scheme "..." -showdestinationsで宛先の一覧を出せます。-showdestinationsはxcodebuild -helpに載っています。CLAUDE.mdに「watchOSのビルドは上のコマンドで行う」と書いておくと、セッションごとに宛先を探し直さずに済みます。
シミュレーターの見た目を確認する — Computer useの設定
ビルドが通ったあとの見た目確認には、CLIのComputer useを使います。公式ドキュメントは「Swiftアプリをコンパイルし、起動し、すべてのボタンをクリックして、コードを書いたのと同じ会話の中でスクリーンショットを撮る」ことができると説明しています。例に挙がっているシミュレーターはiOS Simulatorです。
Claude Code DesktopのiOS SimulatorペインはiOS向けの機能です。watchOSのシミュレーターはCLIの画面操作で扱います。
有効化はCLIの対話セッションで行います。
CLIでComputer useを有効にする
- 1
/mcpを開く
対話セッションで
/mcpを実行します。一覧にあるcomputer-useは、最初は無効です。 - 2
サーバーを有効にする
computer-useを選んで「Enable」を選びます。設定はプロジェクト単位で保持されます。 - 3
macOSの権限を許可する
最初に画面操作が必要になったとき、「アクセシビリティ」と「画面収録」の許可を求められます。許可しても、画面収録の反映にClaude Codeの再起動が要ることがあります。
有効にしたあとも、すべてのアプリが操作対象になるわけではありません。セッションの中で初めてアプリが必要になったとき、端末にそのアプリの許可を求める確認が出ます。Simulatorを操作させたいときは、ここで「Allow for this session」を選びます。
操作中は次の点が挙動として表に出ます。
- 操作を始めると他のアプリが隠れ、ターンの終了時に元へ戻ります。端末のウィンドウは隠れず、スクリーンショットにも写りません
- 画面操作ができるセッションは同時に1つだけです。2つ目のセッションは、ロックを持つセッションを名指しするエラーで失敗します
- 途中で止めたいときは
Escを押します。ターミナルならCtrl+Cでも止まります
依頼文は、操作対象のアプリを名前で書くと意図が伝わりやすくなります。
watchOS Simulatorでアプリをビルドして起動し、各画面をタップして
クラッシュしないか確かめてください。エラー状態はスクリーンショットを撮って。SwiftUIでアプリの骨格を書く
watchOSアプリはSwiftUIで作ります。Appプロトコルに準拠した構造体が、アプリのエントリーポイントです。
import SwiftUI
@main
struct MyProject_Watch_App: App {
var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
}
}
}
}通知のカテゴリごとに専用の画面を出したいときは、WKNotificationSceneを追加します。表示内容はWKUserNotificationHostingControllerを継承したクラスで組み立てます。
scenePhase環境値だけでは扱えないイベントがあります。ワークアウトの設定と復旧、拡張ランタイムセッション、リモート通知の登録などです。これらにはWKApplicationDelegateに準拠したアプリデリゲートを用意し、@WKApplicationDelegateAdaptorで組み込みます。
SwiftUIのListは、storyboard時代のテーブルにはなかったプラッタースタイル、スワイプアクション、行の並べ替えに対応します。Xcodeのキャンバスでプレビューしながら実装できるため、アプリを起動せずにUIを調整できます。
CLIとClaude for Xcodeの使い分け
Claude for XcodeはXcode 26.3に入ったClaude Agent SDKの統合です。XcodeはiPhone・iPad・Mac・Apple Watch・Apple Vision Pro・Apple TV向けアプリの開発環境で、Claude for Xcodeはその中で動きます。
どちらの経路でも、Xcode Previewsを使った見た目の確認ができます。Claude for XcodeはXcode Previewsをキャプチャして、作っているSwiftUIのビューが実際にどう見えるかを確かめ、直してゆけます。さらにXcode 26.3は、その機能をModel Context Protocol(MCP)経由でも使えるようにしています。Claude CodeからXcodeにMCPで接続すれば、CLIから離れずにPreviewsを取得できます。
Claude for Xcodeの土台はClaude Agent SDKで、Claude Codeと同じ実行基盤です。そのためサブエージェント、バックグラウンドタスク、プラグインを、Xcodeの中を離れずに使えます。
| 観点 | CLI(Computer use) | CLI + Xcode MCP | Claude for Xcode |
|---|---|---|---|
| 視覚確認の対象 | CLI(Computer use)起動したシミュレーター画面 | CLI + Xcode MCPXcode Previews | Claude for XcodeXcode Previews |
| 条件 | CLI(Computer use)macOS、Pro・Max | CLI + Xcode MCPXcode 26.3以降 | Claude for XcodeXcode 26.3以降(Claude Agent SDKの統合) |
| 向く場面 | CLI(Computer use)ビルドからシミュレーター実行までを1つの会話で通す | CLI + Xcode MCPCLIのままPreviewsを見て直す | Claude for XcodeIDEの中で長い作業を任せる |
よくあるつまずき
画面収録を許可したのにプロンプトが消えない
macOSが、許可後にClaude Codeの再起動を求めることがあります。Claude Codeを完全に終了して、新しいセッションで試します。それでも出る場合は、「システム設定 > プライバシーとセキュリティ > 画面収録」に端末アプリが入っているか確認します。
作業が終わったのに別のセッションが画面を操作できない
ロックは、最初の画面操作で取られ、セッションを抜けたときに外れます。タスクが終わった時点では外れないので、操作を終えたセッションを閉じるまで、別のセッションは待たされます。操作中のセッションが異常終了した場合は、プロセスがなくなったことをClaude Codeが検知して、ロックが自動で外れます。
まとめ
独立実行にするかどうかはプロジェクト作成の時点で決まり、後から変えるなら「Supports Running Without iOS App Installation」の1項目です。Previewsで繰り返し直す段階とシミュレーターで通し確認する段階で、使う経路を切り替える選択肢があります。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。
- developer.apple.com/documentation/watchos-apps
- developer.apple.com/documentation/watchOS-Apps/creating-independent-watchos-ap…
- developer.apple.com/documentation/watchOS-Apps/setting-up-a-watchos-project
- developer.apple.com/documentation/watchOS-Apps/building_a_watchos_app
- code.claude.com/docs/en/computer-use
- anthropic.com/news/apple-xcode-claude-agent-sdk
- code.claude.com/docs/en/setup