Claude CodeでwatchOSアプリを作る — 独立実行アプリの実装手順
Claude CodeでwatchOSアプリを開発する2つの経路と、独立実行アプリを作るときの実装フローを、Apple公式ドキュメントをもとにまとめます。
Claude CodeでwatchOSアプリを作るには、ターミナルからSwiftUIのコードを書きxcodebuildでビルドする経路と、Xcode自体に組み込まれた「Claude for Xcode」を使う経路の2つがあります。どちらもApple Watch向けアプリのビルドに対応しますが、シミュレーターでの見た目確認の仕組みが異なります。本記事ではwatchOSアプリの構成要素、独立実行アプリの作り方、Claude Codeでの実装フローを、Apple公式ドキュメントに沿ってまとめます。
はじめに — 前提となる環境
watchOSアプリの開発にはmacOSとXcodeが必須です。WindowsやLinuxではXcode自体が動かないため、Claude Codeを使う場合でもmacOS上での作業になります。
CLIのComputer use機能を使ってシミュレーターを操作したい場合は、Pro・Maxプランのいずれかが必要です。Team・Enterpriseプランでは、CLIのComputer useは現在利用できません。Claude for Xcodeの対応プランはclaude.comの料金ページで確認してください。
ステップ1: watchOSアプリの構成要素を理解する
Apple公式ドキュメントは、watchOSアプリの体験を4つの技術の組み合わせとして説明しています。
- メインアプリ: 起動して直接操作する土台となる部分です。ただしユーザーが毎回アプリを明示的に起動するとは限りません。
- コンプリケーション: 文字盤上にアプリのデータを小さく表示する仕組みです。タップすればアプリをすぐに起動できます。
- 通知: ローカル通知・リモート通知のどちらでも、アプリを起動しなくても重要な更新を伝えられます。アクション付きの通知なら、開かずにその場で応答できます。
- Siri: SiriKitまたはApp Intentsを使い、Siriやショートカットアプリからアプリの機能を呼び出せるようにします。
Apple Watchでのやり取りは短い操作の積み重ねが前提です。公式ドキュメントは「watchOSでは、実際のコードを書く時間より、体験の計画・設計・調整に多くの時間を使うことになる」と述べており、画面設計を先に固めてから実装に入る進め方が公式に推奨されています。
ステップ2: 独立実行アプリと連携アプリのどちらを作るか決める
watchOSアプリは、iPhone側のアプリを必要とせずに単体で動く「独立実行アプリ」にできます。Apple公式ドキュメントは実装方法を2通り示しています。
- Watch-only App: iOS側のアプリを持たない、Apple Watch専用アプリとして新規作成する方法です。Xcodeの新規プロジェクト作成時に「Watch-only App」を選びます。
- 連携するiOSアプリを持つが独立動作もできるWatch App: iOSアプリと組み合わせて作成したwatchOSアプリを、あとから独立動作に切り替える方法です。
Xcodeでwatchアプリと連携するiOSアプリを同時に作成すると、既定では「依存型(dependent)」のwatchOSアプリになります。依存型のままだと、iPhone側のアプリがインストールされていない間はwatchOS側のアプリを起動できません。これを独立動作に切り替えるには、プロジェクトエディタでWatch Appターゲットを選び、Deployment Info内の「Supports Running Without iOS App Installation」を有効にします。
Watch-only Appを選ぶと、Xcodeは4つのターゲットを自動生成します。ルートターゲットはiOS側のラッパーとして機能するスタブで、Universal Purchase用のバンドルIDの設定やApp Storeへの配信パッケージングに使われますが、実際のiOS実行ファイルは作られません。ユーザーがWatch-only Appをインストールしても、ペア設定されたiPhone側には何もインストールされません。
独立実行アプリやWatch-only Appを作る場合、Apple公式ドキュメントは次の点を単体でテストするよう求めています。
- アカウント作成とサインインをApple Watch単体で完結させる
- 権限リクエストのダイアログをiPhone側ではなくApple Watch上に直接表示する
- データのダウンロードをApple Watch単体で行う。独立実行アプリは
WatchConnectivityフレームワークを主要なデータ経路として使えないため、CloudKitや自前サーバーとの同期を検討する - コンプリケーション用のプッシュ通知を含め、通知をApple Watchへ直接送る
連携するiOSアプリがあれば、そちら経由でWatch Connectivityによるデータ転送を補助的に使うことはできますが、それを主要な取得手段にはできません。
ステップ3: Claude Codeでプロジェクトを作成してビルドする
Claude Code CLIは一般的なコーディングエージェントで、watchOS専用の統合機能を持ちません。プロジェクト作成・SwiftUIコードの編集・xcodebuildによるビルドは、他の言語のプロジェクトと同じくBashツール経由で行います。
シミュレーターでの見た目確認が必要な場合は、macOS版CLIのComputer use機能を有効にします。
/mcpcomputer-useサーバーを選んで有効化し、初回利用時にAccessibilityとScreen Recordingの権限を許可します。有効化後は、次のような依頼でビルドから見た目確認までを一度に任せられます。
xcodebuild -scheme "MyWatchApp Watch App" \
-destination "platform=watchOS Simulator,name=<利用可能なシミュレーター名>" \
build公式ドキュメントは「CLIから、Claudeはビルド・起動・すべてのコントロールのクリック・結果のスクリーンショットを、コードを書いたのと同じ会話の中で行える」と説明しています。ただし画面操作を伴う機能で名指しされているのはiOS Simulatorで、watchOS Simulatorへの言及はありません。watchOS SimulatorもXcode配下で動くmacOSネイティブアプリという点は同じですが、Claude Code DesktopのiOS Simulatorペインのような専用の常時表示パネルは、watchOS向けには用意されていません。見た目を確認したい場合は、CLIのComputer useを有効にして、Simulatorアプリ自体を操作対象として明示的に依頼する形になります。
ステップ4: 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は、watchOSのネイティブUIコンポーネントであるWKInterfaceTableにはないプラッターUI・スワイプアクション・行の並べ替えに対応しています。Xcodeのキャンバスでプレビューしながら実装できる点も、watchOS向けSwiftUIの利点として公式ドキュメントが挙げています。
Claude CodeとClaude for Xcodeの使い分け早見表
watchOS開発でどちらの経路を選ぶかは、視覚確認の頻度とプロジェクトの規模で変わります。
| 観点 | Claude Code CLI | Claude for Xcode |
|---|---|---|
| 対応プラットフォーム | Claude Code CLI一般的なプロジェクト全般(watchOS専用機能なし) | Claude for XcodeiPhone・iPad・Mac・Apple Watch・Apple TV・Apple Vision Pro |
| Watch向けの視覚検証 | Claude Code CLIComputer use経由(iOS Simulatorが名指しの対象) | Claude for XcodeXcode Previewsのキャプチャに対応 |
| 対象プラン | Claude Code CLIComputer useはPro・Maxのみ | Claude for Xcodeclaude.comで要確認 |
| 作業の起点 | Claude Code CLIターミナル、CLAUDE.mdでの文脈共有 | Claude for XcodeXcodeの「Intelligence」設定 |
| 向くケース | Claude Code CLICLIでの一連の作業に統合したい、複数プロジェクトを横断する | Claude for XcodeXcode内で完結させたい、プロジェクト全体の構造理解を任せたい |
Claude for XcodeはClaude Agent SDKの統合により、iPhone・iPad・Mac・Apple Watch・Apple Vision Pro・Apple TV向けの開発を対象プラットフォームに含みます。Xcodeから離れずに作業したい場合や、SwiftUI・WatchKitにまたがる複雑な依存関係をClaudeに把握させたい場合は、こちらが選択肢になります。
よくあるつまずき
watchOS Simulatorの画面がClaude Codeの会話に表示されない
Claude Code DesktopのiOS Simulatorペインは名前のとおりiOS専用で、watchOS Simulatorには対応していません。CLIでComputer useを有効にし、「watchOS Simulatorでアプリをビルドして起動し、画面をスクリーンショットして」のように操作対象を明示的に指定します。
独立実行アプリのはずがiPhoneアプリのインストールを要求される
新規作成したwatchOSアプリと連携するiOSアプリのプロジェクトは、既定で依存型です。独立動作させるには、Watch AppターゲットのDeployment Infoで「Supports Running Without iOS App Installation」を明示的に有効にする必要があります。
データがApple Watch単体で取得できない
WatchConnectivityは連携するiOSアプリが起動している間だけ使える転送経路で、独立実行アプリの主要なデータ取得手段にはできません。CloudKitや自前サーバーとの直接通信に切り替える設計が必要です。
Team・EnterpriseプランでCLIのComputer useが使えない
CLIのComputer useはPro・Maxプラン限定です。組織アカウント(Team・Enterprise)でシミュレーターの見た目を確認したい場合は、Claude for Xcodeの対応状況をclaude.comで確認してください。
まとめ
Claude CodeでwatchOSアプリを作る際は、独立実行アプリにするかどうかをまず決め、Xcodeのプロジェクト設定でそれに応じたターゲット構成を選びます。実装はSwiftUIのAppプロトコルとシーン定義が中心で、通知やライフサイクルイベントの扱いにはアプリデリゲートの併用が必要になる場面があります。ビルドと見た目確認はCLIならComputer use、Xcode内で完結させたいならClaude for Xcodeが担い、どちらもApple Watch向けアプリのビルドに対応しています。ただし公式ドキュメントが視覚確認の対象として名指ししているのはiOS Simulatorとイベント連携部分で、watchOS Simulator向けの専用パネルは用意されていない点は、作業を始める前に押さえておく価値があります。