🩺

【iOS】HealthKitでデータ取得をするためのQueryリスト-概要-

2024/05/23に公開

概要

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のフォローよろしくお願いいたします。

https://sites.google.com/view/muranakar

個人でアプリを作成しています。良かったら覗いてみてください。

Discussion