取り組みの背景 — watchOS アプリ開発に Antigravity を使う理由
Apple Watch 向けのアプリ開発は、iPhoneアプリとは異なる制約や設計思想が求められます。小さな画面サイズ、バッテリー効率、Complications(コンプリケーション)、HealthKit との連携など、watchOS 固有の要素を理解しながら開発を進める必要があります。
Antigravity のAIエージェントは、こうした watchOS 固有のパターンを熟知しており、SwiftUI コードの自動生成から Xcode プロジェクトの設定まで、開発者の作業を大幅に効率化してくれます。実際のプロジェクトを例に取りながら、Antigravity を活用した watchOS アプリ開発の全工程を順を追って整理していきます。
この記事で学べること:
- watchOS プロジェクトのセットアップと Antigravity エージェントとの連携方法
- SwiftUI ベースの Watch アプリ UI 構築のコツ
- Complications(文字盤の情報表示)の実装手順
- HealthKit を使ったヘルスデータ取得の AI 支援実装
- WatchConnectivity による iPhone との通信設計
iOSアプリ開発の基本を学びたい方は、まず AntigravityでiOSアプリを作る入門ガイド:Swift・SwiftUIを使ったはじめての開発 から始めることをおすすめします。
watchOS 開発の基礎知識
watchOS の構成要素
watchOS アプリは大きく以下の3つの要素で構成されます。
- Watch App: Apple Watch 上で動作するメインのアプリ本体
- Watch Extension: バックグラウンド処理やデータ取得を担うターゲット(watchOS 7 以降は統合)
- iPhone App(オプション): iPhone 側のアプリとデータを共有する場合に用意
watchOS 7 以降は Watch App と Extension が統合され、シンプルな構成になっています。watchOS 開発では「軽量・素早い操作・必要な情報だけ表示」という設計哲学が重要です。
Antigravity で watchOS を扱う前の準備
Antigravity を使って watchOS 開発を始める前に、以下の環境を整えておきましょう。
- macOS 15 以上
- Xcode 26(または最新版)
- Apple Developer Program への加入(実機テスト・リリースに必要)
- Apple Watch 実機(シミュレータでも基本動作は確認可能)
Step 1 — Xcode で watchOS プロジェクトを作成する
プロジェクトテンプレートの選択
Xcode を起動し、「File → New → Project」から「watchOS」タブを選択します。「Watch App」テンプレートを選ぶと、Watch アプリ単体のプロジェクトが作成されます。iPhone アプリとペアで動かしたい場合は「Watch App for iOS App」を選択してください。
プロジェクト作成後、Antigravity に以下のようなプロンプトを送ると、プロジェクト構成の最適化を任せることができます。
@Antigravity プロジェクトの構成を確認して、watchOS 開発に最適なフォルダ構造と
初期ファイル配置を提案してください。SwiftUI を使ったシンプルな
フィットネストラッカーアプリを作ります。
Antigravity は ContentView.swift、App.swift、そして Complications 用の ComplicationController.swift の骨格を自動生成し、コメント付きで提案してくれます。
Step 2 — SwiftUI で Watch UI を設計する
小画面向け UI の考え方
watchOS の画面は iPhone と比べて極めて小さいため、UI 設計の原則が異なります。
- 1画面に表示する情報は最小限に絞る
- タップ操作はシンプルに(デジタルクラウンの活用も検討)
- リストやスクロールビューは縦方向のみ
- テキストは大きめのフォントサイズで可読性を確保
Antigravity に以下のように依頼すると、watchOS に最適化された UI コンポーネントを生成できます。
// Antigravity に生成させた watchOS 向けリストビューの例
struct WorkoutListView: View {
let workouts: [Workout]
var body: some View {
// watchOS では NavigationStack が使用可能(watchOS 9 以降)
NavigationStack {
List(workouts) { workout in
NavigationLink(destination: WorkoutDetailView(workout: workout)) {
HStack {
Image(systemName: workout.iconName)
.foregroundColor(.orange)
.frame(width: 28, height: 28)
VStack(alignment: .leading, spacing: 2) {
Text(workout.name)
.font(.system(size: 15, weight: .semibold))
Text(workout.duration)
.font(.system(size: 13))
.foregroundColor(.secondary)
}
}
}
}
.navigationTitle("ワークアウト")
}
}
}デジタルクラウン対応
watchOS アプリならではのインタラクションとして、デジタルクラウンの回転操作があります。.focusable() モディファイアと digitalCrownRotation を使うと、スクロール操作に利用できます。
struct HeartRateView: View {
@State private var crownValue: Double = 70.0
var body: some View {
VStack {
Text("目標心拍数")
.font(.footnote)
.foregroundColor(.secondary)
Text("\(Int(crownValue))")
.font(.system(size: 48, weight: .bold, design: .rounded))
.foregroundColor(.red)
Text("bpm")
.font(.footnote)
}
// デジタルクラウンで値を調整
.focusable()
.digitalCrownRotation(
$crownValue,
from: 50,
through: 200,
by: 1,
sensitivity: .medium
)
}
}
// 期待する出力: クラウンを回すと心拍数の目標値がリアルタイムで変化するStep 3 — Complications(コンプリケーション)の実装
Complications は Apple Watch の文字盤に表示できる小さな情報ウィジェットです。ユーザーが文字盤を一目見るだけでアプリの情報を確認できるため、watchOS アプリのエンゲージメントを大きく向上させます。
ClockKit から WidgetKit Complications へ
watchOS 9 以降、Complications の実装は WidgetKit ベースに移行しました。これにより、iOS のホーム画面ウィジェットと同じ API を使って実装できます。
Antigravity に「watchOS Complication を WidgetKit で実装して」と指示するだけで、以下のような雛形を生成してくれます。
import WidgetKit
import SwiftUI
// Complication のエントリ(表示するデータ)
struct FitnessEntry: TimelineEntry {
let date: Date
let stepCount: Int
let caloriesBurned: Double
}
// Complication のビュー定義
struct FitnessComplicationView: View {
var entry: FitnessEntry
var body: some View {
VStack(alignment: .leading, spacing: 2) {
Image(systemName: "figure.walk")
.foregroundColor(.green)
Text("\(entry.stepCount)")
.font(.system(size: 14, weight: .bold))
.minimumScaleFactor(0.7)
Text("歩")
.font(.system(size: 10))
.foregroundColor(.secondary)
}
}
}
// タイムラインプロバイダ(データ更新ロジック)
struct FitnessProvider: TimelineProvider {
func getTimeline(in context: Context, completion: @escaping (Timeline<FitnessEntry>) -> Void) {
let entry = FitnessEntry(
date: Date(),
stepCount: 8432, // 実際は HealthKit からデータ取得
caloriesBurned: 312.5
)
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion(timeline)
}
func placeholder(in context: Context) -> FitnessEntry {
FitnessEntry(date: Date(), stepCount: 0, caloriesBurned: 0)
}
func getSnapshot(in context: Context, completion: @escaping (FitnessEntry) -> Void) {
completion(FitnessEntry(date: Date(), stepCount: 8432, caloriesBurned: 312.5))
}
}ホーム画面ウィジェットの実装についてはさらに詳しく、Antigravity × SwiftUI WidgetKit 完全ガイド — AIエージェントでホーム画面ウィジェットを高速開発する でも解説しています。
Step 4 — HealthKit でヘルスデータを取得する
権限リクエストの設定
HealthKit を使用するには、Info.plist への説明文追記と、Capabilities での HealthKit 有効化が必要です。
Antigravity に「HealthKit のセットアップをして、歩数と心拍数を取得するコードを書いて」と依頼すると、権限リクエストから実際のデータ取得まで一貫したコードを生成してくれます。
import HealthKit
class HealthKitManager: ObservableObject {
private let healthStore = HKHealthStore()
// 取得を許可するデータ型
private let typesToRead: Set<HKObjectType> = [
HKObjectType.quantityType(forIdentifier: .stepCount)!,
HKObjectType.quantityType(forIdentifier: .heartRate)!,
HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!
]
// 権限リクエスト
func requestAuthorization() async throws {
guard HKHealthStore.isHealthDataAvailable() else {
throw HealthKitError.notAvailable
}
try await healthStore.requestAuthorization(
toShare: [],
read: typesToRead
)
}
// 今日の歩数を取得
func fetchTodayStepCount() async -> Int {
let type = HKQuantityType(.stepCount)
let startOfDay = Calendar.current.startOfDay(for: Date())
let predicate = HKQuery.predicateForSamples(
withStart: startOfDay,
end: Date(),
options: .strictStartDate
)
return await withCheckedContinuation { continuation in
let query = HKStatisticsQuery(
quantityType: type,
quantitySamplePredicate: predicate,
options: .cumulativeSum
) { _, result, _ in
let count = result?.sumQuantity()?.doubleValue(for: .count()) ?? 0
continuation.resume(returning: Int(count))
}
self.healthStore.execute(query)
}
}
}
// 期待する出力: 今日の歩数が Int 型で取得できるStep 5 — WatchConnectivity で iPhone と通信する
WatchConnectivity の基本設計
アプリの設定データや大きなデータセットは iPhone 側で管理し、Watch 側では表示に必要な最小限のデータだけを扱うのが watchOS 開発の基本パターンです。WCSession を使うことで、iPhone と Apple Watch 間でリアルタイムにデータを送受信できます。
import WatchConnectivity
class WatchSessionManager: NSObject, WCSessionDelegate, ObservableObject {
@Published var receivedData: [String: Any] = [:]
override init() {
super.init()
if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}
}
// iPhone からメッセージを受信
func session(
_ session: WCSession,
didReceiveMessage message: [String: Any]
) {
DispatchQueue.main.async {
self.receivedData = message
}
}
// Watch から iPhone へメッセージを送信
func sendToPhone(_ message: [String: Any]) {
guard WCSession.default.isReachable else { return }
WCSession.default.sendMessage(message, replyHandler: nil) { error in
print("送信エラー: \(error.localizedDescription)")
}
}
// --- WCSessionDelegate の必須メソッド ---
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {
WCSession.default.activate()
}
func session(
_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?
) {}
}Antigravity では「WatchConnectivity を使って iPhone のユーザー設定を Watch に同期する」と指示するだけで、送受信両側の実装コードを同時生成してくれます。複数ファイルにまたがる実装でも、コンテキストを維持したまま整合性の取れたコードを出力するのが Antigravity の強みです。
Step 6 — テストとデバッグ
シミュレータでのテスト
Xcode の Watch シミュレータを使うと、実機なしで基本動作を確認できます。ただし HealthKit の実際のデータ取得や Complications のリアルタイム更新は、実機テストが必要です。
Antigravity を使ったデバッグの効率化には、以下のプロンプトが便利です。
@Antigravity 現在のコードで Xcode に表示されているエラーをすべて修正して。
また watchOS シミュレータで HealthKit テスト用のモックデータを注入する
テストコードも追加してほしい。
よくあるエラーと対処法
「HealthKit is not available on this device」エラー
シミュレータでは HealthKit が使えないため、HKHealthStore.isHealthDataAvailable() で確認し、シミュレータ向けにはモックデータを返す設計にしましょう。
Complications が文字盤に反映されない
WidgetKit の Timeline が更新されていない可能性があります。WidgetCenter.shared.reloadAllTimelines() を適切なタイミングで呼び出してください。
WatchConnectivity のメッセージが届かない
iPhone と Apple Watch が同一の Apple ID でサインインしていること、Bluetooth が有効なことを確認してください。
Antigravity エージェントを活用する実践的なプロンプト集
watchOS 開発で特に役立つ Antigravity へのプロンプトをまとめます。
プロジェクト設計フェーズ
watchOS 向けのフィットネストラッカーアプリを設計してほしい。
機能要件: 歩数・心拍数の表示、ワークアウト開始/停止、Complication 対応。
SwiftUI + HealthKit + WatchConnectivity を使った
アーキテクチャを提案して。
UI 生成フェーズ
Apple Watch Ultra のディスプレイサイズに最適化した
ワークアウト中画面を SwiftUI で作成して。
心拍数・経過時間・消費カロリーをリアルタイム表示する。
デバッグフェーズ
この watchOS アプリが Xcode 26 でビルドエラーになっている。
エラーログを解析して原因と修正方法を教えて。
[エラーログをペースト]
まとめ
Antigravity を使った watchOS アプリ開発では、SwiftUI による UI 構築から HealthKit・WatchConnectivity の連携実装まで、AIエージェントが一貫してサポートしてくれます。watchOS 固有の設計パターン(Complications・デジタルクラウン・軽量UI)を理解した上で Antigravity に具体的な指示を出すことで、開発速度を大幅に高めることができます。
次のステップとして、アプリ内課金を組み込む場合は Antigravity × StoreKit 2 アプリ内課金実装ガイド — AI エージェントでサブスクリプション課金を高速開発する も参考にしてください。SwiftUI によるより高度なアプリ開発を深めたい方には、Antigravity SwiftUI スキルで iOS アプリ開発を加速する完全ガイド 2026 もおすすめです。
また、watchOS アプリの開発をさらに実践的に深めたい方には、CloudKit を使ったデバイス間データ同期の実装について詳しく解説したプレミアム記事「Antigravity × SwiftUI + CloudKit:iCloud 同期アプリを本番実装するアドバンスガイド」もご覧ください。