Google Health API のデータ型

次の表に、データタイプの完全なリストを示します。各列は、Google Health API での各タイプの表現と、各タイプが使用可能なスコープを理解するのに役立ちます。

データ型のフィールド

Google Health API のデータ型テーブルには、各データ型の表現と要件を理解するのに役立ついくつかのフィールド列が含まれています。これらの列は次のとおりです。

表: Google Health API のデータタイプ フィールドの説明
フィールド 説明
dataType エンドポイント URL で使用される、ハイフンで区切られた識別子(例: active-minutes)。
filter パラメータ 1 日のロールアップ リクエストとロールアップ リクエストの dataType フィルタ パラメータの値として使用される、アンダースコアで区切られた識別子(例: active_minutes)。
レコードタイプ

記録されたデータの構造と形式を示します。内部的には、これはデータポイントのリソース表現と一致します。使用できる値は次のとおりです。

  • Interval(一定期間に記録された測定値を表します。)
  • Sample(瞬時測定値を表します)。
  • Daily(日単位で集計または記録された測定値を表します)。
  • Session(ワークアウトや心電図(ECG)セッションなど、連続した記録ブロックを表します)。
  • Food(食品または栄養関連のデータ エンティティを表します)。
使用可能なオペレーション データ型でサポートされている API メソッド(list、create、rollUp など)を一覧表示します。
スコープ データ型にアクセスするために必要な OAuth スコープ。
Webhook のサポート 新しいデータが同期されたときに、ウェブフックを使用してリアルタイム通知をサポートするデータタイプであることを示します。
真のゼロのサポート データ型が明示的なゼロ値の記録をサポートしていることを示します。これにより、アクティブなゼロ値(アクティブな時間(分)がゼロなど)と、欠落しているデータまたは記録されていないデータを区別できます。
ストレージの解像度 データポイントが保存される最小の記録間隔またはサンプリング間隔(steps の場合は 1 分など)。ロールアップの場合、これは、サブインターバル データのアーティファクトなしで均等に分散された集計を保証するために推奨される最小の windowSize を表します。
対応デバイス このデータタイプを記録して Google Health API に同期できる実機の展開可能なリスト(Fitbit アプリを使用)。

表: Google Health API のデータタイプ
データ型 使用可能な
オペレーション
スコープ
アクティブ エネルギー消費量
dataType: active-energy-burned
filter parameter: active_energy_burned
レコードタイプ: Interval
ストレージの解像度: 1 分
list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
アクティブな時間(分)
dataType: active-minutes
filter parameter: active_minutes
レコードタイプ: Interval
ストレージの解像度: 1 分

対応デバイス

  • Fitbit Air
  • Fitbit Alta
  • Fitbit Alta HR
  • Fitbit Blaze
  • Fitbit Charge 2
  • Fitbit Charge 3
  • Fitbit Flex 2
  • Fitbit Inspire
  • Fitbit Inspire HR
  • Google Pixel Watch 4
list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
アクティブ ゾーン時間
dataType: active-zone-minutes
filter parameter: active_zone_minutes
レコードタイプ: Interval
ストレージの解像度: 1 分

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
アクティビティ レベル
dataType: activity-level
filter parameter: activity_level
レコードタイプ: Interval
list、reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitude
dataType: altitude
filter parameter: altitude
レコードタイプ: Interval
ストレージの解像度: 1 分
list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
血糖値
dataType: blood-glucose
filter parameter: blood_glucose
レコードタイプ: サンプル
list、get、reconcile、rollup、dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
体脂肪
dataType: body-fat
filter parameter: body_fat
レコードタイプ: サンプル

対応デバイス

list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
心拍ゾーン内のカロリー
dataType: calories-in-heart-rate-zone
filter parameter: calories_in_heart_rate_zone
レコードタイプ: Interval
ストレージの解像度: 1 分
rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
深部体温
dataType: core-body-temperature
filter parameter: core_body_temperature
レコードタイプ: サンプル
list、get、reconcile、rollup、dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の心拍変動
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
レコードタイプ: 毎日

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の心拍ゾーン
dataType: daily-heart-rate-zones
filter parameter: daily_heart_rate_zones
レコードタイプ: 毎日
list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の血中酸素ウェルネス
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
レコードタイプ: 毎日

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の呼吸数
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
レコードタイプ: 毎日

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の安静時の心拍数
dataType: daily-resting-heart-rate
filter parameter: daily_resting_heart_rate
レコードタイプ: 毎日

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
睡眠時の体温の 1 日の変動
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
レコードタイプ: 毎日

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
1 日の最大酸素摂取量
dataType: daily-vo2-max
filter parameter: daily_vo2_max
レコードタイプ: 日単位

対応デバイス

list、reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
距離
dataType: distance
filter parameter: distance
レコードタイプ: Interval
ストレージの解像度: 1 分

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
心電図
dataType: electrocardiogram
filter parameter: electrocardiogram
レコードタイプ: セッション

対応デバイス

list .ecg.readonly
エクササイズ
dataType: exercise
filter parameter: exercise
レコードタイプ: セッション

対応デバイス

list、get、reconcile、create、update、batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
階数
dataType: floors
filter parameter: floors
レコードタイプ: Interval
ストレージの解像度: 1 分
reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
食べ物
dataType: food
filter parameter: food
記録タイプ: 食事
list、get .nutrition.readonly
.nutrition.writeonly
食品の測定単位
dataType: food-measurement-unit
filter parameter: food_measurement_unit
記録タイプ: 食事

対応デバイス

list、get .nutrition.readonly
.nutrition.writeonly
心拍数
dataType: heart-rate
filter parameter: heart_rate
レコードタイプ: サンプル
ストレージの解像度: 1 秒

対応デバイス

list、reconcile、rollup、dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
心拍変動
dataType: heart-rate-variability
filter parameter: heart_rate_variability
レコードタイプ: サンプル

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
身長
dataType: height
filter parameter: height
レコードタイプ: サンプル
list、get、reconcile、create、update、batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
水分摂取量の記録
dataType: hydration-log
filter parameter: hydration_log
レコードタイプ: セッション
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .nutrition.readonly
.nutrition.writeonly
不整脈の通知
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
レコードタイプ: セッション
list .irn.readonly
月経期間
dataType: menstrual-period
filter parameter: menstrual_period
レコードタイプ: Interval
create、update、batchDelete .reproductive_health.writeonly
ムード
dataType: moods
filter parameter: moods
レコードタイプ: サンプル
create、update、batchDelete .mindfulness.writeonly
栄養摂取量の記録
dataType: nutrition-log
filter parameter: nutrition_log
レコードタイプ: セッション

対応デバイス

list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .nutrition.readonly
.nutrition.writeonly
排卵検査
dataType: ovulation-test
filter parameter: ovulation_test
レコードタイプ: サンプル
create、update、batchDelete .reproductive_health.writeonly
血中酸素
dataType: oxygen-saturation
filter parameter: oxygen_saturation
レコードタイプ: サンプル
ストレージの解像度: 1 分

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
呼吸数の睡眠のまとめ
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
レコードタイプ: サンプル

対応デバイス

list、reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
ランニング時の最大酸素摂取量
dataType: run-vo2-max
filter parameter: run_vo2_max
レコードタイプ: サンプル

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
座っている時間が長めの期間
dataType: sedentary-period
filter parameter: sedentary_period
レコードタイプ: Interval

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
皮膚温度センサー v4beta
dataType: skin-temperature-sensors
filter parameter: skin_temperature_sensors
レコードタイプ: サンプル

対応デバイス

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
睡眠
dataType: sleep
filter parameter: sleep
レコードタイプ: セッション

対応デバイス

list、get、reconcile、create、update、batchDelete .sleep.readonly
.sleep.writeonly
手順
dataType: steps
filter parameter: steps
レコードタイプ: Interval
ストレージの解像度: 1 分

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
プールの長さのデータ
dataType: swim-lengths-data
filter parameter: swim_lengths_data
レコードタイプ: Interval

対応デバイス

list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
症状
dataType: symptoms
filter parameter: symptoms
レコードタイプ: サンプル
create、update、batchDelete .logged_symptoms.writeonly
心拍ゾーン時間
dataType: time-in-heart-rate-zone
filter parameter: time_in_heart_rate_zone
レコードタイプ: Interval
ストレージの解像度: 1 分
list、reconcile、rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
総カロリー
dataType: total-calories
filter parameter: total_calories
レコードタイプ: Interval
ストレージの解像度: 1 分

対応デバイス

rollup、dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
最大酸素摂取量
dataType: vo2-max
filter parameter: vo2_max
レコードタイプ: サンプル

対応デバイス

list、reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
重量
dataType: weight
filter parameter: weight
レコードタイプ: サンプル

対応デバイス

list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly

クエリの制約

API からデータポイント、ロールアップ、日次ロールアップをクエリする場合は、次の制約に注意してください。

  • フィルタ要件: total-calories などの読み取り専用の派生データ型では、間隔の開始時刻 (物理時間または市民時間を使用) を指定するフィルタが必要です。
  • クエリ範囲の上限: ロールアップと日次ロールアップの集計エンドポイントでは、データ型に基づいてクエリ範囲の上限が適用されます。
    • calories-in-heart-rate-zone、heart-rate、active-minutes、total-calories のクエリ範囲は最大 14 日間です。
    • 他のすべてのデータ型の場合、クエリの最大範囲は 90 日です。
  • ロールアップ ウィンドウ サイズ: rollUp エンドポイントを呼び出す場合、windowSize の期間は 1 秒("1s")以上にする必要があります。1 秒未満の期間は INVALID_ARGUMENT で拒否されます。また、サブインターバル間で不均等に分布しないように、データタイプの基盤となるストレージの解像度(steps や distance などの 1 分間隔のデータタイプの場合は "60s" など)以上の windowSize を選択します。詳細については、ロールアップ ウィンドウとストレージの解像度をご覧ください。

日次データ型とインターバル データ型

心拍変動(HRV)や酸素飽和度(SpO2)などの特定の生理学的指標について、Google Health API は 2 つの異なるデータ型(Daily バージョンと Interval バージョン)を提供します。この違いを理解することが、ユースケースに適した指標を選択する鍵となります。

  • 日単位: 1 日全体の事前集計された単一のサマリー。この方法は、処理を節約するために、大まかな傾向と日次ダッシュボードに使用します。

  • 間隔: 1 日を通して行われる、きめ細かい高解像度の測定。これは、1 日の変動をグラフ化する場合や、1 時間ごとの詳細な分析を行う場合に使用します。

データの可用性

ユーザーのデータの更新は、アクティビティ トラッカーを同期するか、Google Health アプリに新しいデータを手動で入力した後にのみ利用できます。Fitbit デバイスと Google Health アプリは、モバイル デバイスで Google Health アプリが開いていて、2 つのデバイスがアクティブなデータ接続を確立しており、Bluetooth の範囲内にある場合、15 分ごとに自動的に同期できます。ユーザーが MobileTrack を使用してアクティビティを記録している場合、アプリが開いている限り、MobileTrack は 1 時間ごとに同期されます。

過去のデータにクエリを実行する

Google Health API の主なメリットの一つは、ユーザーのパフォーマンスを追跡し、健康状態を長期にわたってモニタリングできることです。ユーザーのデータは、記録されている限り遡ってクエリできます。API では、アプリケーションが使用できる過去のデータ量に制限や制約はありません。

ただし、過去のデータのクエリは、標準のレート制限の対象となります。システムの安定性を管理し、過剰なペイロードを防ぐため、Google Health API はエンドポイント固有のページサイズで自動ページネーションを使用します。次の境界と動作に注意してください。

  • 自動ページ分け: 長期間のデータをクエリすると、API はそのエンドポイントのページサイズの上限までの結果の最初のページのみを nextPageToken とともに返します。後続のページをリクエストするには、nextPageToken を使用する必要があります。
  • 可変ページサイズ: 上限はエンドポイントとデータ型によって異なります。ほとんどのデータ型では、ページサイズの上限は 10,000 です。ただし、exercise や sleep などの特定のデータ型の場合、デフォルトと最大ページサイズは 25 に制限されます。たとえば、クライアントが過去 10 年間のすべての睡眠データをリクエストした場合でも、API は最初のページに 25 件の睡眠セッションのみを返します。
  • ロールアップ期間の制限: データ ロールアップと集計のエンドポイント(rollUp や dailyRollUp など)では、クエリの期間がデータ型に基づいて制限されます。
    • calories-in-heart-rate-zone、heart-rate、active-minutes、total-calories の最大範囲は 14 日間です。
    • 他のすべてのロールアップ データタイプでは、最大 90 日間の範囲。

アプリケーションに必要な過去のデータの量によっては、データセット全体を取得するために、ページを順番にページ分けする必要があります。アプリケーションのデータ同期プロセスを設計する際は、この点に注意してください。

最適なパフォーマンスを確保し、API エラーを回避するには、過去のデータをクエリする際に次のガイドラインに従ってください。

段階的なデータ同期(ホットロードとコールド スタートの読み込み)

  • 最初の「ホット」読み込み: プライマリ読み込みシーケンス中に、最新の 7 ~ 14 日間のデータのみを取得してレンダリングします。これにより、ユーザーは長時間実行されるクエリを待つことなく、すぐにデータを確認できます。
  • バックグラウンドの「コールド」読み込み: プライマリ UI がレンダリングされた後、古い過去のデータの取得を非同期の優先度の低いキューまたはバックグラウンド プロセスに委任します。

集計のためのクエリ チャンキング

  • ロールアップ エンドポイントと日次ロールアップ エンドポイントでは、最大期間制限(データタイプに応じて 14 日または 90 日)が適用されるため、大規模な過去の集計クエリを、これらの制限内のより小さな連続した間隔に分割する必要があります。
  • 同時実行数の上限を遵守し、UI の進行状況インジケーターを安定して維持するために、これらのサブクエリを安全にバッチ処理またはシーケンス処理します。

事前集計されたロールアップを活用する

事前集計されたサマリー エンドポイント(DailyRollUpDataPoints など)を使用するように、概要ダッシュボードとトレンドグラフを再構築します。これにより、バックエンドのコンピューティング オーバーヘッドとクライアントへのネットワーク転送時間が大幅に削減されます。

復元力のあるエラー処理(スマート再試行)

  • レート制限(429 Too Many Requests)とサーバー ゲートウェイ タイムアウト(504 Gateway Timeout)が発生した場合は、厳格な指数バックオフ処理を実装します。失敗した大きなペイロードをすぐに再試行しないでください。即時再試行は、バックエンドの輻輳を増幅させ、システムの劣化を悪化させます。

サードパーティのアクセス

Fitbit デバイスは、サードパーティのアプリやサービスと直接通信できません。これらのデバイスは、Google Health アプリとのみ通信して同期するように設計されています。

デバイスは、1 日を通して自動的にデータを同期します。Google Health アプリが開いているとき、または Bluetooth が有効でアプリがバックグラウンドで実行されている場合は 15 分ごとに同期されます。この同期プロセスが完了すると、サードパーティ サービスは Google Health API を介してデータを利用できるようになります。

データ品質と有効性のフィルタリング

Google Health API は、クライアントサイドでカスタムのノイズ フィルタリングを必要とせずに、信頼性の高い健康指標を提供するため、レスポンスを返す前にセンサー テレメトリーを検証し、無効な測定値を除外します。

  • 1 分単位の血中酸素飽和度(oxygen-saturation)の場合、API は検証済みの測定値のみを返し、腕の動き、手首の緩み、センサーの信頼度スコアが 50% 未満であるために無効とマークされた分を削除します。また、無効な測定値の前後 3 分間と、4 分未満の孤立した有効なストレッチも削除します。その結果、分単位のカバー範囲がまばらになり、ギャップが生じることがあります。詳細については、分単位の SpO2 フィルタリングとデータの有効性をご覧ください。

距離の基準

elevationGainMillimeters などのエクササイズの距離は、次の理由により、標準単位としてミリメートルで測定されます。

  1. データの精度を維持する: ミリメートルを使用する最も重要な理由は、読み取って提供するデータの精度を失わないようにするためです。ミリメートルなどの細かい単位を使用すると、測定値を高精度で表すことができます。
  2. 標準化: ミリメートルは、Google のサービス全体で標準化された単位です。この一貫性により、API のさまざまな部分を操作するデベロッパーに一貫したエクスペリエンスを提供できます。
  3. 幅広い測定システムのサポート: ミリメートルなどの基本単位を使用すると、デベロッパーは、メートル法、インペリアル法、その他の測定システムを使用しているかどうかにかかわらず、選択した他の単位に簡単に変換できます。

1 日の活動時間の変動

Health API による時間の処理では、夏時間や旅行による 1 日の長さの変化を考慮して、ユーザーの時間を優先します。すべてのデータポイントは、物理的な UTC タイムスタンプと、イベント時に有効な UTC オフセットの両方とともに保存されます。これにより、システムは次のことが可能になります。

  • イベントを正確な物理的瞬間にマッピングする。
  • 集計のために、ユーザーのローカル コンテキストに合わせて時間を修正します。

夏時間

夏時間が終了すると、1 日が 25 時間になり、その日のロールアップには 25 時間分のデータが含まれます。「春時間」では、時間が標準時間に戻る 23 時間の常用日になります。

旅行

タイムゾーンをまたいで移動すると、1 日の物理的な長さがさらに大きく変化する可能性があります。

dailyRollUp エンドポイントを使用して、タイムゾーンの違いを調整します。データは、ユーザーの現地時間に従って、記録された暦日に自動的に関連付けられます。これにより、タイムゾーンのシフトに関係なく、1 日を効果的に「つなぎ合わせる」ことができます。詳細と例については、集計データガイドの暦日をまたいで集計するをご覧ください。