Watch Appとは何か、Apple WatchとWear OS向け開発

著者: IT Sectr 公開日: 2026-02-15 読了時間: 9 分

Watch Appはウェアラブルデバイス向けアプリケーションです:watchOSを搭載したApple WatchとGoogleのWear OSを搭載したスマートウォッチ。モバイルアプリとは異なり、Watch Appは小型画面(1.5~2インチ対角)、短い操作セッション(5~15秒)、特定のシナリオ(フィットネス、通知、クイック返信、音声入力)に最適化されています。開発はApple WatchにはSwiftUI、Android向けにはKotlinとJetpack Compose for Wear OSで行われます。両プラットフォームの主要コンセプト、アーキテクチャ、ナビゲーション、コード例を見ていきましょう。

重要ポイント

  • Watch App — 短いセッション(5~15秒)と限られた画面のスマートウォッチ向けアプリケーション
  • Apple WatchはSwiftUIとWatchKitを備えたwatchOS、厳格な階層ナビゲーションを使用
  • Wear OSはJetpack Compose for Wear OS、Material You、サイドナビゲーションを備えたKotlinを使用
  • 自律性 — LTE対応の時計はスマートフォン接続なしでアプリを動作可能
  • センサー — 加速度計、ジャイロスコープ、心拍数モニター、GPSが両プラットフォームのネイティブAPIで利用可能

Watch Appとは

Watch Appはウェアラブルデバイスで動作するように設計されたアプリケーションです:Apple Watch(watchOS)とWear OSのスマートウォッチ。モバイルアプリとの主な違いはフォームファクターです。時計の画面は対角1.5~2インチ(スマートフォンの6~7インチに対して)で、同時に表示できる情報量が制限されます。アプリとの操作は短く、ユーザーは5~15秒で時刻、通知、心拍数、歩数を確認し、その後手を下ろします。

Watch Appの主なシナリオ:フィットネストラッカー(歩数、心拍数、カロリー、睡眠)、通知(メッセージ、通話、カレンダー)、クイックアクション(タイマー起動、音声でのメッセージ返信、音楽コントロール)、コンパニオン(カメラリモート、車のキー、NFC決済)。Counterpoint Research(2026年)によると、世界のスマートウォッチ市場は年間1億5000万台を超え、Apple Watchが35%、Wear OSが20%、残りはFitbit、Garminなどが占めています。

Watch Appの制限:小型画面(最大2インチ)、限られたバッテリー駆動時間(最大18~24時間)、フルキーボードなし(音声入力またはディクテーションのみ)、バックグラウンドタスク制限(watchOS — 最大10分、Wear OS — 最大5分)、ほとんどの機能で電話との同期が必要。watchOS 6(2019年)とWear OS 3(2022年)以降、アプリは電話とペアリングせずにLTEモジュールを介して自律的に動作できます。

Apple Watch:watchOSとSwiftUI

watchOSはスマートウォッチ向けAppleのオペレーティングシステムで、iOSをベースにして同じフレームワーク(Foundation、UIKitの適応版、SwiftUI)を使用しています。開発はXcodeでSwiftを使って行われます。メインのUIフレームワークはSwiftUIで、watchOS固有のコンポーネント(カルーセル付きTabView、NavigationStack、DigitalCrownModifierによるデジタルクラウン、長押しメニュー)を提供します。

watchOSのナビゲーションは階層的パラダイムに基づいています。主な要素:階層スタック(自動戻り付きNavigationStack)、モーダル表示(sheet)、ページベースのナビゲーション(.tabViewStyle(.page)付きTabView経由)、長押しのコンテキストメニュー。デジタルクラウンはコンテンツのスクロールと値の変更を可能にします。ジェスチャー:タップ、長押し、スワイプ、Force Touch(watchOS 7まで)、デジタルクラウンの回転。

watchOSの主要フレームワーク:HealthKit(健康データへのアクセス — 心拍数、歩数、睡眠、ECG)、CoreMotion(加速度計、ジャイロスコープ)、WatchConnectivity(iPhoneとのデータ交換)、ClockKit(文字盤のコンプリケーション)、BackgroundTasks(最大10分のバックグラウンド更新)、ARKit(Series 9+のFaceTimeエフェクト)。Watch Appはフル機能(ドック内の独立したアプリ)または拡張機能(iOS版と同時)のいずれかになります。

Wear OS:KotlinとCompose

Wear OSはAndroidをベースにしたGoogleのスマートウォッチ向けプラットフォームです。最新の開発はJetpack Compose for Wear OSを備えたKotlinで行われます — 丸型画面に最適化されたコンポーネント群:Scaffold、ScalingLazyColumn、Chip、Button、Card、Stepper。モバイルComposeとは異なり、Wear OSは独自のモディファイア(垂直スクロール用のscrollable、スワイプ用のswipable、クラウン制御用のRotaryInput)を使用します。

Wear OSのナビゲーションはサイドパネル(SwipeToDismiss)とカード画面を使用します。主な要素:SwipeDismissableNavHost(スワイプバックによるナビゲーション)、画面配置(リスト用のScalingLazyColumn)、水平カルーセル(Carousel)、文字盤(WatchFaceService経由のWatchFace)。Googleは戻る操作にサイドスワイプ、リストに垂直スクロールを推奨しています。時計の電源ボタンは最近のアプリ一覧を開きます。

Wear OSの健康とセンサー:Health Services API(データプロバイダー経由の歩数、心拍数、カロリー、睡眠、SpO2)、SensorManager(加速度計、ジャイロスコープ、気圧計、磁力計)、Location Services(FusedLocationProvider経由のGPS)。Wear OS 5+は自動アクティビティ種別検出によるランニング、ウォーキング、サイクリング、水泳のトラッキングをサポートしています。データはHealth Connectを介してGoogle Fitと同期されます。

コード例:Apple Watch向けSwift

SwiftUIとHealthKitを使用したApple Watch向け心拍数トラッキングアプリを見てみましょう。

swift
import SwiftUI
import HealthKit

// 心拍数データモデル
struct HeartRateData: Identifiable {
    let id = UUID()
    let bpm: Double
    let date: Date
}

// HealthKit用ViewModel
@Observable
final class HealthViewModel {
    private let healthStore = HKHealthStore()
    var currentHeartRate: Double = 0
    var isAuthorized: Bool = false

    func requestAuthorization() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let types = Set([heartRateType])
        healthStore.requestAuthorization(toShare: nil, read: types) { success, _ in
            Task { @MainActor in
                self.isAuthorized = success
                if success { self.startHeartRateQuery() }
            }
        }
    }

    func startHeartRateQuery() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let query = HKObserverQuery(
            sampleType: heartRateType, predicate: nil
        ) { [weak self] _, _, _ in
            self?.fetchLatestHeartRate()
        }
        healthStore.execute(query)
    }

    private func fetchLatestHeartRate() {
        guard let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)
        else { return }
        let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
        let query = HKSampleQuery(
            sampleType: heartRateType, predicate: nil,
            limit: 1, sortDescriptors: [sort]
        ) { _, samples, _ in
            guard let sample = samples?.first as? HKQuantitySample else { return }
            let bpm = sample.quantity.doubleValue(for: HKUnit.count().unitDivided(by: .minute()))
            Task { @MainActor in
                self.currentHeartRate = bpm
            }
        }
        healthStore.execute(query)
    }
}

// メイン画面
struct HeartRateView: View {
    @State private var viewModel = HealthViewModel()

    var body: some View {
        VStack {
            Image(systemName: "heart.fill")
                .foregroundColor(.red)
                .font(.largeTitle)

            Text("\(Int(viewModel.currentHeartRate))")
                .font(.system(size: 60, weight: .bold, design: .rounded))
                .foregroundColor(.red)

            Text("BPM")
                .font(.caption)
                .foregroundColor(.secondary)
        }
        .padding()
        .onAppear(perform: viewModel.requestAuthorization)
    }
}

重要なポイント:HKHealthStoreがHealthKitデータへのアクセスを要求します。HKObserverQueryがリアルタイムの心拍数変化を通知します。HKSampleQueryが最新の値を取得します。Watch Appは@ObservableのおかげでcurrentHeartRateが変化すると自動的にUIを更新します。HealthKitはデバイス上でローカルにデータを処理するため、サーバーリクエストは不要です。

コード例:Wear OS向けKotlin

Jetpack ComposeとHealth Services APIを備えたKotlinによるWear OS向けの同様のアプリです。

kotlin
// MainActivity.kt
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.wear.compose.material.*
import androidx.wear.compose.foundation.arc.BasicArcParams
import com.google.android.horologist.health.HealthService

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            WearAppTheme {
                HeartRateScreen()
            }
        }
    }
}

@Composable
fun HeartRateScreen() {
    var heartRate by remember { mutableIntStateOf(0) }
    var isConnected by remember { mutableStateOf(false) }

    LaunchedEffect(Unit) {
        // HealthService — センサーアクセス用API
        val healthService = HealthService()
        healthService.connect().onSuccess {
            isConnected = true
        }
    }

    Scaffold(
        timeText = { TimeText() },
        vignette = { Vignette(vignettePosition = VignettePosition.TopAndBottom) }
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .scrollable(state = ScrollState),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            Icon(
                imageVector = Icons.Filled.Favorite,
                contentDescription = "心拍数",
                modifier = Modifier.size(40.dp),
                tint = MaterialTheme.colors.error
            )

            Text(
                text = heartRate.toString(),
                style = MaterialTheme.typography.display1
            )
            Text(
                text = "BPM",
                style = MaterialTheme.typography.caption2
            )
        }
    }
}

Wear OSの主要コンポーネント:標準レイアウト用のTimeTextとVignetteを備えたScaffold、丸型画面対応の.scrollable()モディファイア、心拍数センサーアクセス用のHealthService(Horologist)。Jetpack Compose for Wear OSは丸型および角型画面に自動的にインターフェースを適応させるため、開発者が異なるフォームファクターを手動で処理する必要はありません。

よくある質問

Watch Appとモバイルアプリの違いは何ですか?

Watch Appは画面が限られており(対角1.5~2インチ)、小型バッテリーで動作し、ジェスチャーコントロールを使用します。操作は短く — 5~15秒、アプリは可能な限り簡潔で、1~2つの主要指標を表示する必要があります。

Watch Appにはどの言語が使用されますか?

Apple Watch向けはSwiftUIおよびWatchKitフレームワークを備えたSwiftです。Wear OS向けはJetpack Compose for Wear OSを備えたKotlinです。両プラットフォームとも宣言的なアプローチでインターフェースを構築します。

Watch AppはiPhoneなしで動作しますか?

はい、LTE搭載のApple Watch Series 3とwatchOS 6+以降、アプリは時計のApp Storeを通じて自律的に動作できます。Wear OSも時計のGoogle Playを通じてスタンドアロン動作のLTEバージョンをサポートしています。

Watch Appの制限は何ですか?

主な制限:画面サイズ(最大2インチ)、限られたバッテリー駆動時間(最大18時間)、フルブラウザやキーボードなし、バックグラウンドタスク制限(watchOS — 最大10分、Wear OS — 最大5分)。

時計のセンサーにアクセスするには?

Apple Watchでは心拍数、歩数、睡眠にHealthKit(HKHealthStore、HKSampleQuery)、加速度計にCoreMotionを使用します。Wear OSでは健康指標にHealth Services API(Horologist経由)、生センサーデータにSensorManagerを使用します。

まとめ

  • Watch App — 5~15秒のセッションと最大2インチ画面のスマートウォッチ向けアプリケーション
  • Apple WatchはセンサーアクセスにSwiftUI、NavigationStack、Digital Crown、HealthKitを備えたwatchOSを使用
  • Wear OSはJetpack Compose for Wear OS、Scaffold、ScalingLazyColumn、Health Services APIを備えたKotlinを使用
  • 自律性 — LTEモジュールにより両プラットフォームでスマートフォン接続なしのアプリ動作が可能
  • HealthKit(watchOS)とHealth Services(Wear OS)が心拍数、歩数、睡眠、SpO2へのアクセスを提供
  • 制限 — 小型画面、18~24時間のバッテリー、バックグラウンドタスク制限、キーボードなし
  • 主なシナリオ — フィットネストラッカー、通知、クイック返信、リモートコントロール、NFC決済

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください