402 Views
August 25, 26
スライド概要
YUMEMI.grow Mobile #28 - connpass
https://yumemi.connpass.com/event/399875/
HealthKitの基本の話をしました #yumemi_grow - usami-kの日記
https://usami-k.hatenablog.com/entry/2026/08/25/202917
https://usami-k.github.io/
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ 直接デバイスデータを読むわけではない どのデバイスのどのセンサーの情報を得るか、というのを指定する形ではない。 ヘルスケア情報のためのリポジトリが提供される デバイス間の情報同期は iCloud 経由で行われ、内容は全体で統合される どのデバイスから見ても同じデータが取れる 参考:デバイスからの情報を得たい場合は別のフレームワーク。 Core Motion は HealthKit を経由せずに歩数などがとれる 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 8 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ HealthStore HealthKit を使う前に、現在のデバイスで利用可能か確認する必要がある。Mac や iPadOS 16 以前の iPad はここではじかれる。 if HKHealthStore.isHealthDataAvailable() { // HealthKitが利用可能 } 利用可能であれば、HealthStore のインスタンスを生成する。このインスタンス は通常アプリ内にひとつだけ生成して利用する。 let healthStore = HKHealthStore() 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 11 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ アクセス権限のリクエスト 必要なデータタイプを指定してアクセス権限のリクエストを行う。 try await healthStore.requestAuthorization(toShare: [...], read: [...]) ただし権限の状態を表す HKAuthorizationStatus は 3 つしかない。 case notDetermined case sharingDenied case sharingAuthorized 読み取りの可否を表す値がない requestAuthorization の成功は、許可を意味しない 取得結果が空でも、拒否とデータなしを区別できない 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 12 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ 取得するデータを指定する ヘルスケア情報は「データタイプ」ごとに分かれている。取得したいタイプを指定 する。 HKQuantityType:数値で表せるもの(歩数、心拍数、体重) HKCategoryType:区分で表せるもの(睡眠、月経) HKCharacteristicType:変化しないもの(生年月日、血液型) let stepCount = HKQuantityType(.stepCount) let sleepAnalysis = HKCategoryType(.sleepAnalysis) 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 14 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ サンプルを取得する データタイプと期間を指定してクエリを組み立てる。 let period = HKQuery.predicateForSamples( withStart: start, end: end, options: [] ) let descriptor = HKSampleQueryDescriptor( predicates: [.quantitySample(type: stepCount, predicate: period)], sortDescriptors: [SortDescriptor(\.startDate)], limit: 100 ) let samples = try await descriptor.result(for: healthStore) 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 15 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ 取得したサンプルから値を取り出す 取得できるのは HKQuantitySample で、値そのものではなく HKQuantity を持つ。 let steps = samples.map { $0.quantity.doubleValue(for: .count()) } 単位を指定して取り出す。合わない単位を渡すと実行時エラーになる 歩数なら count()、体重なら gramUnit(with: .kilo) 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 16 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ 集計して取得する サンプルを全件取得して自分で合計する必要はない。集計は HealthKit 側ででき る。 let descriptor = HKStatisticsCollectionQueryDescriptor( predicate: .quantitySample(type: stepCount), options: .cumulativeSum, anchorDate: anchorDate, intervalComponents: DateComponents(day: 1) ) let collection = try await descriptor.result(for: healthStore) let dailySteps = collection.statistics().map { $0.sumQuantity() } 1 日ごとの歩数のように、区間で区切った集計が得られる。 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 17 / 20
HealthKit の概要 アプリで HealthKit を使う データの取得 まとめ サンプル取得と集計の使い分け 個々の記録が必要なら HKSampleQueryDescriptor 合計や平均だけ必要なら統計クエリ 統計クエリは HKQuantityType 専用で、睡眠などの HKCategoryType には使えない。 集計方法はデータタイプの性質で決まり、合わない組み合わせは例外になる。 歩数のような累積型は、.cumulativeSum 心拍数のような離散型は、.discreteAverage 宇佐見公輔 2026-08-25 HealthKit のデータ取得の基本 18 / 20