HealthKitフレームワークは、Appleのヘルスエコシステムの中核コンポーネントであり、iPhone、Apple Watch、サードパーティ製デバイスからのデータを安全なローカルストレージに集約します。Apple Developer Documentation, 2025によると、このプラットフォームは100種類以上のデータタイプをサポートしています — 身体活動や睡眠から検査結果や心血管系の指標まで。単一のリポジトリに医療情報を保存することで、各データタイプに対するきめ細かなアクセス制御を備え、アプリケーション間のシームレスな同期を実現します。
重要なポイント
HealthKitは、2014年にiOS 8とともに発表されたAppleのフレームワークで、ユーザーの健康とフィットネスデータを一元管理するために設計されています。このプラットフォームは、アプリケーションやデバイスが医療情報を書き込みおよび読み取りできる統合リポジトリとして機能します。
サードパーティのソリューションとは異なり、HealthKitはiOSオペレーティングシステムに直接組み込まれており、ハードウェアレベルでの高いパフォーマンスとセキュリティを確保しています。アプリケーションは互いに直接アクセスすることはできません — すべての操作は中央のHKHealthStoreを通過します。
Apple WWDC 2024によると、米国のiPhoneユーザーの87%以上が、HealthKitをベースにした内蔵ヘルスケアアプリを少なくとも一度は使用したことがあります。エコシステムには、フィットネストラッカーから遠隔医療サービスまで、何千ものサードパーティ製アプリケーションが含まれています。
HealthKitのアーキテクチャは、各データソース用に分離されたコンテナを持つマルチレベルストレージの原則に基づいて構築されています。下位レベルには、ハードウェアAES-256で暗号化されたSQLiteデータベースがあります。上位レベルには、統一された対話インターフェースであるHKHealthStoreがあります。
各レコードには、HKSourceソース、HKDeviceデバイス、日付、時刻、iCloudの同期フラグなどのメタデータが含まれています。システムは、同じソースからの重複レコードを自動的に重複排除し、データの歪みを防ぎます。
データはタイプごとにグループ化されます — 数値指標の場合はHKQuantityType(心拍数、歩数、カロリー)、カテゴリカルイベントの場合はHKCategoryType(睡眠、症状、月経周期)。この構造により、HKSampleQueryやHKStatisticsQueryを通じて任意のパラメータの組み合わせを柔軟にクエリできます。
HealthKitは100種類以上の標準化されたデータタイプをサポートしており、身体活動、栄養、睡眠、心血管系、リプロダクティブヘルス、検査結果、バイタルサインなどのカテゴリに分類されています。各タイプにはHKUnit測定単位とアクセスレベルがあります。
開発者はHKCorrelationを通じてカスタム相関を作成することもできます — 関連する測定値のグループです。例えば、食事の記録には、カロリー、タンパク質、脂質、炭水化物を単一のオブジェクトとして含めることができます。グルコースレベルなどの連続測定には、HKSeriesSampleが使用されます。
HealthKitの使用は、フレームワークのインポート時に自動的に作成されるシングルトン、HKHealthStoreを定義することから始まります。ストアを通じて、アプリケーションはプラットフォームがデバイスで利用可能かどうかを確認します。iPadやiPod touchではサポートされていない場合があるためです。また、HealthKitはMac Catalystでは利用できません — macOSには別の実装が必要です。
import HealthKit
let healthStore = HKHealthStore()
let stepType = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let heartRateType = HKQuantityType
.quantityType(forIdentifier: .heartRate)
let typesToRead: Set = [stepType, heartRateType]
HealthKitは、非同期のパブリッシュ-サブスクライブモデルを使用して、データソースとアプリケーションの間の仲介役として機能します。ソースアプリケーションはHKHealthStoreを通じてデータを書き込み、サブスクライブするアプリケーションはバックグラウンドで実行されるHKObserverQueryを通じて新しいレコードの通知を受け取ります。
このフレームワークはiCloudを介したバックグラウンド同期をサポートしています。ユーザーがサインインしている場合、HealthKitは自動的にリアルタイムで全てのAppleデバイスにデータを配信します。ネットワークがない場合、変更はローカルにバッファリングされ、データ損失なしに接続が回復したときに同期されます。
Appleによると、iPhoneとApple Watchの間の同期遅延は、アクティビティデータで30秒未満です。他のタイプ — 睡眠、栄養、検査結果 — では、バッテリーを節約するために最大15分間隔でスケジュールに従って同期が行われます。
HKHealthStoreは、すべての操作が実行される中央のシングルトンです。saveObjectによる保存、executeによる読み取り、deleteObjectによる削除などです。各操作は非同期であり、クロージャを通じて結果を返すため、適切なエラー処理が必要です。
クエリはいくつかのタイプに分類されます:HKSampleQueryは条件に基づいてレコードを取得するため、HKStatisticsQueryは集計データ(合計、平均、最小、最大)のため、HKObserverQueryはリアルタイムの変更を追跡するためです。定期的なバックグラウンド更新には、HKHeartbeatSeriesQueryが使用されます。
let type = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let now = Date()
let start = Calendar.current
.date(
byAdding: .day,
value: -7,
to: now
)
let predicate = HKQuery
.predicateForSamples(
withStart: start,
end: now,
options: .strictStartDate
)
let query = HKSampleQuery(
sampleType: type,
predicate: predicate,
limit: 100
) { _, samples, _ in
for sample in samples as [HKQuantitySample] {
print(sample.quantity)
}
}
healthStore.execute(query)
HealthKitの統合は、XcodeでHealthKit機能を有効にし、プロジェクトにentitlementを追加することから始まります。その後、アプリケーションはrequestAuthorization呼び出しを通じて特定のデータタイプへのアクセス許可を要求します。重要:HealthKitはシミュレータでは利用できず、iOSを搭載した物理デバイスが必要です。
統合プロセスには3つの段階があります:データタイプの定義、許可の要求、読み取りおよび書き込み操作の実行。各段階は非同期であり、エラーを処理する必要があります — ユーザーはトグル付きのシステムダイアログで任意のデータタイプへのアクセスを拒否できます。
Appleの調査によると、HealthKit統合を備えたアプリケーションは、ユーザーエンゲージメントが40%向上します。成功の鍵は、許可要求の説明で、アプリが特定の健康データを必要とする理由を説明することです。
許可要求は初回起動時に1回行われます。アプリケーションは、読み取り用と書き込み用の2つのタイプセットを指定します。ユーザーは各データタイプのトグルが付いたシステムダイアログを表示し、不要なカテゴリを拒否して選択的にアクセスを許可できます。
let typesToWrite: Set = [
HKQuantityType
.quantityType(
forIdentifier: .dietaryEnergyConsumed
)
]
let typesToRead: Set = [
HKQuantityType
.quantityType(
forIdentifier: .stepCount
)
]
healthStore.requestAuthorization(
toShare: typesToWrite,
read: typesToRead
) { success, error in
if success {
print("認証を取得しました")
}
}
HealthKitは、ハードウェア暗号化、アプリケーションのサンドボックス化、きめ細かな権限を含む多層セキュリティモデルを実装しています。すべての健康データはデバイス上で暗号化されて保存され、ユーザーの個別の同意なしにiCloudに送信されることはありません(同意は一度要求されます)。
重要な機能はIntentメカニズムです。アプリケーションはデータへの継続的なバックグラウンドアクセスを持ちません。各読み取りまたは書き込み要求はオペレーティングシステムによって検証され、ユーザーはアプリを再インストールすることなく、設定 — プライバシー — 健康からいつでも許可を取り消すことができます。
AppleはApp Store Review GuidelinesでHealthKitの使用を厳しく規制しています。アプリケーションは、明示的な同意なしにHealthKitデータを第三者に転送したり、広告やターゲティングに使用したり、宣言された機能に必要な期間を超えて保存したりすることはできません。
HealthKitにはいくつかの制限があります:デバイス上の最大データベースサイズは1 GB、1回のクエリのレコード数制限は1000、同一データタイプ間の最小間隔は1秒です。フレームワークはバックグラウンド更新も制限します — 1日あたり60回以上のHKObserverQueryトリガーは許可されません。
これらの制限はパフォーマンスによって相殺されます:1000レコードの読み取りは平均50〜100ミリ秒、1レコードの書き込みは10ミリ秒未満です。大量のデータの場合は、個別のレコードを取得する代わりに、事前集計付きのHKStatisticsCollectionQueryを使用することをお勧めします。HealthKitはクエリを非同期に処理するため、アプリケーションはHKHealthStoreからのデータを待機している間もブロックされません。
よくある質問
HealthKitは、iPhone、iPad、iPod touchを含むiOS 8以降のすべてのデバイスでサポートされています。Apple WatchはペアリングされたiPhoneを通じて自動的にデータを送信します。サードパーティ製デバイス — フィットネスバンド、体重計、血圧計 — は、対応するアプリケーションがあればHealthKit APIを通じてデータを書き込めます。
はい。ヘルスケアアプリでは、“健康データのエクスポート”機能を使用して、すべてのデータをXML形式でエクスポートできます。開発者はHKSampleQueryを通じて許可されたタイプをプログラムで読み取り、独自の形式にエクスポートできます。明示的なユーザーの同意なしに、健康データをサードパーティのサーバーに転送することはできません。
ユーザーはヘルスケアアプリまたはデータを記録したソースアプリケーションを通じてデータを削除できます。削除後、データは復元できません — HealthKitにはゴミ箱はありません。削除操作は元に戻せないため、アプリケーションはdeleteObjectを実行する前に確認を求めることをお勧めします。
HealthKitはユーザーの健康データの保存と共有のために設計されていますが、ResearchKitは医学研究を実施するためのフレームワークです。ResearchKitはHealthKitをデータソースの1つとして使用しますが、インフォームドコンセント、アンケート、研究データ収集のためのアクティブタスクのモジュールを追加します。
はい。HealthKitを使用するアプリケーションは、App Store Review Guidelinesのセクション5.1.1 — 医療および健康データに準拠する必要があります。アプリケーション内でのデータ使用の明示的な説明、プライバシーポリシー、データの広告使用の禁止、ネットワーク送信時の暗号化が必要です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。