WatchKit — Apple WatchフレームワークとwatchOSの解説

著者: IT Sectr 公開日: 2026-06-16 読了時間: 8 分

WatchKitは、2014年にwatchOS 1とともに発表された、Apple Watch向けアプリケーションを作成するためのAppleのフレームワークです。WKInterfaceのUI要素(ボタン、ラベル、テーブル、マップ)と画面間のナビゲーションメカニズムを提供します。最新のwatchOS開発はますますSwiftUIに移行していますが、WatchKitは既存のアプリケーションのサポートやインターフェースを完全に制御する必要があるシナリオにおいて引き続き重要です。Apple Developer Documentation, 2026によると、WatchKitはwatchOS App Storeカタログの35%のアプリで依然として使用されており、フィットネスアプリ、ナビゲーター、データへのクイックアクセスのためのユーティリティが含まれています。

重要なポイント

  • WatchKitは、WKInterface UIコンポーネントとWKInterfaceControllerベースのナビゲーションを使用して、Apple Watch向けアプリケーションを作成するためのAppleのフレームワークです。
  • WKInterfaceControllerは、アプリケーションのメイン画面クラスであり、iOSのUIViewControllerと同様に、ライフサイクル管理と階層構造を持ちます。
  • WCSessionは、Apple WatchとiPhone間の通信メカニズムであり、Bluetoothを介したデータ、ファイル、コンテキストの転送を可能にします。
  • WKInterfaceDeviceは、画面サイズ、モデル、watchOSバージョン、ハードウェアコンポーネントの機能などのデバイス情報を提供します。
  • Complications Controllerは、CLKComplicationDataSourceを介してアクティブ化される、文字盤にデータを表示するためのAPIです。

WatchKitとは何か、どのように機能するか

WatchKitは、Apple Watch上でアプリケーションを作成するためのAPIを提供するAppleのフレームワークです。watchOS 2(2015年)以降、WatchKitアプリはiPhoneではなく時計上で直接実行されるため、電話との常時接続なしでデータを処理し、インターフェースを表示できます。それ以前のwatchOS 1では、すべてのアプリがiPhone上で実行され、時計は単なるリモートディスプレイであり、UIに大きな遅延が生じていました。

最新のWatchKitアーキテクチャには、WatchKit App(時計上のStoryboard+リソース)とWatchKit Extension(時計上で実行されるコード)の2つのコンポーネントが含まれています。ユーザーは親のiOSアプリケーションをインストールする際に、App Storeを通じて両方のコンポーネントをインストールします。WatchKitは、通知(UNUserNotificationCenter経由)、コンプリケーション(文字盤のデータ)、Workout API、HealthKitなどのシステム機能と統合されています。

Counterpoint Research(2025年)によると、Apple Watchは世界のスマートウォッチ市場の52%を占めており、平均的なユーザーはWatchKitまたはSwiftUIを使用する6~8個のサードパーティアプリをインストールしています。最も人気のあるカテゴリは、フィットネス(56%)、健康(22%)、ナビゲーション(9%)、ユーティリティ(8%)です。

watchOS向けWatchKit vs SwiftUI

SwiftUIは、watchOS 6以降のwatchOS向けインターフェースを作成するためのApple推奨の方法です。SwiftUIは宣言型構文と画面サイズへの自動適応を提供します。ただし、WatchKitはSwiftUIが登場する前に開始されたプロジェクト、特定の要素(WKInterfaceMap、WKInterfaceMovie)を使用する場合、およびwatchOS 6未満のバージョンのサポートが必要な場合において、引き続き重要性を保っています。

基準WatchKitSwiftUI
Appleの推奨レガシー現行
最小watchOSwatchOS 1watchOS 6
コード量多い少ない
コンプリケーション統合クラス経由で直接WidgetKit経由
WKInterfaceMapありMap(MapKit)

WatchKitインターフェース:WKInterfaceControllerと要素

WKInterfaceControllerは、WatchKitで画面を管理するための基本クラスです。初期化(awake(withContext:))、表示(willActivate)、非表示(didDeactivate)、およびコントローラー間のコンテキスト転送など、ライフサイクルを処理します。アプリケーションの各画面は、Interface Builderを介してStoryboardに接続された個別のWKInterfaceControllerサブクラスで表されます。ナビゲーションは階層型(push)またはモーダル(present)にすることができます。

WatchKitは、WKInterfaceプレフィックスを持つインターフェース要素のセットを提供します:WKInterfaceLabel(テキスト)、WKInterfaceButton(ボタン)、WKInterfaceTable(テーブル)、WKInterfaceImage(画像)、WKInterfaceMap(マップ)、WKInterfaceGroup(角丸と背景を持つコンテナ)。すべての要素は非同期で動作します。UIの変更はキューに入れられ、レンダリングサイクル間でシステムによって適用され、時計画面で安定した30 FPSを保証します。

基本的なWKInterfaceController

swift
class MainInterfaceController: WKInterfaceController {
    @IBOutlet weak var titleLabel: WKInterfaceLabel!
    @IBOutlet weak var actionButton: WKInterfaceButton!
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        titleLabel.setText("こんにちは、Watch!")
    }
    
    override func willActivate() {
        super.willActivate()
        actionButton.setTitle("開始")
    }
    
    @IBAction func didTapButton() {
        pushController(withName: "DetailController", context: nil)
    }
}

WCSession:WatchとiPhoneの通信

WCSessionは、BluetoothまたはWi-Fiを介したApple WatchとiPhone間の双方向通信のための中心的なクラスです。セッションでは、小さなデータ辞書の転送(updateApplicationContext)、即時応答付きメッセージの送信(sendMessage)、ファイルの転送(transferFile)、複雑なオブジェクトの同期(transferUserInfo)が可能です。WCSessionは非同期で動作し、最適な通信チャネルを自動的に選択します。

WCSessionを使用するには、両方のデバイスでセッションをアクティベートする必要があります。WatchアプリはwillActivate()メソッドでWCSessionを作成し、iOSアプリはAppDelegateまたはSceneDelegateで作成します。アクティベート後、デバイスは可能な場合に自動的にコンテキストを同期します。着信データを受信し、接続状態を監視するには、WCSessionDelegateを処理することが重要です。

Watch側のWCSession例

swift
class SessionManager: NSObject, WCSessionDelegate {
    private let session = WCSession.default
    
    func activate() {
        session.delegate = self
        session.activate()
    }
    
    func sendDataToPhone(key: String, value: Any) {
        guard session.isReachable else { return }
        session.sendMessage([key: value],
            replyHandler: { response in
                print("Response: \(response)")
            },
            errorHandler: { error in
                print("Error: \(error.localizedDescription)")
            }
        )
    }
    
    func session(_ session: WCSession,
               didReceiveMessage message: [String: Any],
               replyHandler: @escaping ([String: Any]) -> Void) {
        handleIncomingData(message)
        replyHandler(["status": "ok"])
    }
}

文字盤のデータ(コンプリケーション)

コンプリケーションは、Apple Watchの文字盤に表示される小さなデータ要素で、アプリを開かずに情報に素早くアクセスできます。WatchKitはCLKComplicationDataSourceを提供します。これは、アプリがコンプリケーション用のデータを提供するためのプロトコルです。文字盤自体が、円形、長方形、角、モジュラーのどの位置が利用可能かを決定します。

開発者は3つのサイズファミリー用にコンプリケーションを提供できます:CLKComplicationFamily — circularSmall、extraLarge、graphicCircular、graphicRectangular、graphicCorner、graphicBezel、modularSmall、modularLarge、utilitarianSmall/Large。各ファミリーには独自の寸法と表示形式があります。アプリは複数のファミリーをサポートできますが、最低2つ(グラフィックとモジュラー)が推奨されます。

CLKComplicationDataSourceの例

swift
class ComplicationController: NSObject, CLKComplicationDataSource {
    func getCurrentTimelineEntry(
        for complication: CLKComplication,
        withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void
    ) {
        let template = CLKComplicationTemplateModularSmallSimpleText()
        template.textProvider = CLKSimpleTextProvider(text: "96%")
        let entry = CLKComplicationTimelineEntry(
            date: Date(),
            complicationTemplate: template
        )
        handler(entry)
    }
}

SwiftによるWatchKitアプリの例

WatchKitアプリの作成は、XcodeにWatchKit App Targetを追加することから始まります。XcodeはInterface.storyboardを初期コントローラーとともに生成し、自動的にInterfaceControllerクラスにリンクします。開発者はInterface Builderを介してUI要素を追加し、コードから操作するためのIBOutletを作成します。以下は、WCSessionを介してiPhoneから受信したデータのテーブルを持つ完全なコントローラーの例です。

swift
class ItemRowController: NSObject {
    @IBOutlet weak var itemLabel: WKInterfaceLabel!
    
    func configure(with text: String) {
        itemLabel.setText(text)
    }
}

class ListController: WKInterfaceController {
    @IBOutlet weak var itemsTable: WKInterfaceTable!
    private var items: [String] = []
    
    override func awake(with context: Any?) {
        super.awake(with: context)
        items = context as? [String] ?? []
        
        itemsTable.setNumberOfRows(items.count,
            withRowType: "ItemRow")
        for i in 0..if let row = itemsTable
                .rowController(at: i) as? ItemRowController {
                row.configure(with: items[i])
            }
        }
    }
}

フィットネスアプリケーション向けWorkout API

Workout APIは、Apple Watch上でバックグラウンドでワークアウトを実行できるフィットネスアプリを作成するためのWatchKitクラスのセットです。APIは、加速度計、ジャイロスコープ、心拍数モニター(HKHealthStore経由)、GPS(GPS対応Watchモデル)などのセンサーへのアクセスを提供します。ワークアウトはHealthKitのHKWorkoutSessionを介して開始され、心拍数データはHKSampleQueryを通じてリアルタイムで更新されます。

Workout APIの主な利点はバックグラウンド動作です。ワークアウトがアクティブな場合、ユーザーが手首を下げてもwatchOSはアプリを一時停止しません。センサーはデータ収集を継続し、アプリは心拍数、距離、ペースなどのメトリクスを表示できます。ワークアウト終了後、データはHealthKitを介してiPhoneのヘルスケアアプリと同期され、ユーザーに統一されたフィットネスプロファイルを提供します。

センサーを使ったワークアウトの開始

swift
class WorkoutManager: NSObject {
    private let healthStore = HKHealthStore()
    private var session: HKWorkoutSession!
    
    func startWorkout(activityType: HKWorkoutActivityType) {
        let config = HKWorkoutConfiguration()
        config.activityType = activityType
        config.locationType = .outdoor
        
        session = try! HKWorkoutSession(
            healthStore: healthStore,
            configuration: config
        )
        session.startActivity(with: Date())
    }
    
    func stopWorkout() {
        session.stopActivity(with: Date())
        session.end()
    }
}

よくある質問

新しいプロジェクトでWatchKitを使うべきですか?

Appleは新しいwatchOSアプリにはSwiftUIを推奨しています。WatchKitは、レガシープロジェクトのサポートや、SwiftUIで利用できないWKInterfaceMapなどの特定の機能が必要な場合にのみ使用してください。

接続なしでWatchからiPhoneにデータを転送するには?

WCSessionは、transferUserInfoおよびtransferFileを介した遅延転送をサポートしています。データは、時計と電話の間に次回接続が確立されたときに配信されるため、一時的な接続断があっても配信が保証されます。

WatchKitアプリはすべてのApple Watchモデルで動作しますか?

WatchKitで書かれたアプリは、Apple Watch Series 0以降(watchOS 1+)と互換性があります。ただし、一部の機能(GPS、心拍数モニター、Dynamic Island)は特定のモデルでのみ利用可能です。

同じアプリでSwiftUIとWatchKitを併用できますか?

はい、1つのアプリでSwiftUIとWatchKitを組み合わせることができます。WKHostingControllerを使用してWKInterfaceControllerにSwiftUIビューを埋め込むか、UIViewRepresentableを介してWKInterfaceObjectsを統合します。

実機でWCSessionをデバッグするには?

接続されたデバイスでXcodeから両方のアプリ(iOS + watchOS)を実行します。デバッグコンソールを使用してWCSessionDelegateメッセージを監視します。両方のデバイスがBluetooth範囲内(最大10メートル)にあることを確認してください。

まとめ

  • WatchKitは、WKInterface UIコンポーネントとWKInterfaceControllerコントローラーを使用して、Apple Watch向けアプリを作成するためのAppleのフレームワークです。
  • WCSessionは、メッセージ、ファイル、コンテキストをサポートする、Bluetooth/Wi-Fiを介したWatchとiPhone間の双方向通信の中心的なメカニズムです。
  • コンプリケーションは、CLKComplicationDataSourceを介したApple Watch文字盤上のデータであり、9つの表示ファミリーをサポートしています。
  • Workout APIは、HKWorkoutSessionを介して心拍数、GPS、加速度計データをバックグラウンドで収集するフィットネスアプリ向けのクラスセットです。
  • SwiftUIは新しいプロジェクトにおけるAppleの推奨アプローチですが、WatchKitはレガシーアプリや特定の機能において引き続き重要です。
  • 組み合わせは、WKHostingControllerとUIViewRepresentableを介して1つのアプリでWatchKitとSwiftUIを組み合わせることが可能です。

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

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

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

こちらもお読みください