【iOS】HealthKitでデータ取得をするためのQueryリスト-概要-
概要
HealthKitを用いたデータ取得に関して、公式ドキュメントを読んだものの理解できなかった部分もありましたので、概要をまとめておきます。今回はHealthKitStore
からデータにアクセスする主な方法であるQuery
を用いた方法に焦点を当てて説明します。
Query
Queryは、HealthKitStoreから要求されたデータの現在のスナップショットを返します。Queryはバックグラウンドキュー上で実行され、完了後に結果のHandlerをバックグラウンドキュー上で実行します。HealthKitは、さまざまな種類のデータを返すために異なるQueryを提供しています。
HKSampleQueryDescriptor
一般的なQueryです。HKSampleQueryDescriptor
を使用して任意のタイプのサンプルデータにアクセスできます。結果をソートしたり、返されるサンプルの総数を制限したりする場合に特に有用です。
詳細は HKSampleQueryDescriptor
を参照してください。
HKAnchoredObjectQueryDescriptor
HealthKitStore
の変更を検索するためのQueryです。初回実行時には、HealthKitStore
にあるすべての一致するサンプルを返します。以降の実行時には、前回の実行以降に追加または削除されたアイテムのみを返します。
詳細は HKAnchoredObjectQueryDescriptor
を参照してください。
HKStatisticsQueryDescriptor
一致するデータに対して統計計算を行うQueryです。合計、最小値、最大値、平均値などを計算し出力が可能です。
詳細は HKStatisticsQueryDescriptor
を参照してください。
HKStatisticsCollectionQueryDescriptor
固定のインターバルごとに複数の統計Queryを実行するQueryです。グラフ作成時によく使用され、各日ごとの消費カロリーや5分ごとの歩数などを計算するのに便利です。
詳細は HKStatisticsCollectionQueryDescriptor
を参照してください。
HKCorrelationQuery
相関関係に含まれるデータの複雑な検索するQueryです。各サンプルTypeに対して個別の条件を含めて検索が可能です。相関タイプの一致のみを求める場合は、SampleQuery
を使用します。現時点(2024/05/22時点)では血圧と食事のみがHKCorrelationQuery
で扱うことが可能です。使用例としては、800kcal以上の食事のみデータを取得したい場合に、指定した条件を満たすデータを取得が可能です。
詳細は HKCorrelationQuery
を参照してください。
HKSourceQuery
HealthKitStore
に一致するサンプルを保存したデバイス・アプリデータを検索するQueryです。特定のサンプルタイプを保存しているすべてのソースを一覧表示します。
詳細は HKSourceQueryDescriptor
を参照してください。
HKActivitySummaryQueryDescriptor
ActivitySummaryとは、身体活動をわかりやすく認識するためのActivitySummaryRingなどで使用されているデータです。
HKActivitySummaryQueryDescriptor
はユーザーのActivitySummary情報を検索するQueryです。各ActivitySummaryには、特定の日のユーザーの身体的な活動に関するデータが含まれます。単一の日または範囲の日をQueryできます。HKActivitySummaryに取得可能なデータが記載されています。
詳細は HKActivitySummaryQueryDescriptor
を参照してください。
HKDocumentQuery
ドキュメントを検索するためのQueryです。このドキュメントは、主にCDA文書を対象としています。CDAとはClinical Document Architecture
の略であり、電子カルテを含む診療に関する文書を電子的に交換するための文書です。CDA文書を取得するために用いられるQueryと認識していただくと良いです。
詳細は HKDocumentQuery
を参照してください。
Long-running Queries
Long-running Queriesはバックグラウンドキューで実行され続け、HealthKitStoreに変更が検出されるたびにアプリを更新します。さらに、ObserverQuery
はバックグラウンド配信を登録できます。
HealthKitは以下のLong-running Queriesを提供します:
HKObserverQuery (Long-running)
この長時間実行されるQueryは、HealthKitStoreを監視し、一致するサンプルに対する変更を通知します。Storeの変更について通知を受けたい場合は、HKObserverQuery
を使用します。HKObserverQuery
はバックグラウンド配信を登録が可能です。
詳細については、HKObserverQueryを参照してください。
HKAnchoredObjectQueryDescriptor (Long-running)
変更されたデータの現在のスナップショットを返すだけでなく、HKAnchoredObjectQueryDescriptor
はLong-running Queriesとしても機能します。有効にするとバックグラウンドキューで実行され続け、一致するサンプルがStoreに追加または削除されると更新を提供します。HKObserverQuery
とは異なり、これらの更新には変更されたデータ内容が含まれます。ただし、HKAnchoredObjectQueryDescriptor
はバックグラウンド配信のために登録できません。
詳細については、HKAnchoredObjectQueryDescriptorを参照してください。
HKStatisticsCollectionQueryDescriptor (Long-running)
StatisticsCollection
の現在のスナップショットを計算するだけでなく、このQueryはLong-running Queriesとしても機能します。Storeに一致するサンプルが追加または削除されると、このQueryは統計コレクションを再計算し、データを更新します。HKStatisticsCollectionQueryDescriptor
はバックグラウンド配信のために登録できません。
詳細については、HKStatisticsCollectionQueryDescriptorを参照してください。
HKActivitySummaryQueryDescriptor (Long-running)
ユーザーのActivitySummaryーの現在のスナップショットを計算するだけでなく、このQueryはLong-running Queriesとしても機能します。ユーザーのActivitySummaryデータが変更されると、このQueryはActivitySummaryを再計算し、アプリを更新します。HKActivitySummaryQueryDescriptor
はバックグラウンド配信のために登録できません。
詳細については、HKActivitySummaryQueryDescriptorを参照してください。
最後に
この記事は、HealthKitStore
からデータを取得するためのさまざまなQueryについての概要を説明しました。詳細な実装例については各Queryの公式ドキュメントを参照してください。
今後詳細の実装に関しても発信していきます。
間違い・気になる部分がありましたら、コメントいただけると大変うれしいです。
良かったと思ったら、記事へのいいね・Xのフォローよろしくお願いいたします。
個人でアプリを作成しています。良かったら覗いてみてください。
Discussion