次の表に、データ型の完全なリストを示します。各型の Google Health API での表現と、各型が利用可能なスコープを理解するのに役立つ複数の列があります。
データ型のフィールド
Google Health API のデータ型のテーブルには、各データ型の表現と要件を理解するのに役立つ複数のフィールド列が含まれています。これらの列は次のとおりです。
| フィールド | 説明 |
|---|---|
dataType |
エンドポイント URL で使用される、ハイフンで区切られた識別子(例: active-minutes)。 |
filter パラメータ |
日次ロールアップ リクエストとロールアップ リクエストの dataType フィルタ パラメータの値として使用される、アンダースコアで区切られた識別子(例: active_minutes)。 |
| レコードタイプ | 記録されたデータの構造と形式を示します。内部的には、これはデータポイントのリソース表現と一致します。使用できる値は次のとおりです。
|
| 使用可能なオペレーション | データ型でサポートされている API メソッド(list、create、rollUp など)を一覧表示します。 |
| スコープ | データ型にアクセスするために必要な OAuth スコープ。 |
| Webhook のサポート | 新しいデータが同期されたときに、データ型がウェブフックを使用したリアルタイム通知をサポートしていることを示します。 |
| True zeros のサポート | データ型が明示的なゼロ値の記録をサポートし、アクティブなゼロ値(アクティブな時間 0 分など)と欠落または未記録のデータを区別できることを示します。 |
| ストレージの解像度 | データポイントが保存される最小の記録またはサンプリング間隔(steps の場合は 1 分など)。ロールアップの場合、これは、サブインターバル データ アーティファクトなしで均等に分散された集計を確保するために推奨される最小の windowSize を表します。 |
| 対応デバイス | このデータ型を Google Health API に記録して同期できる物理デバイスの展開可能なリスト(Fitbit アプリを使用)。 |
| データ型 | 利用可能な オペレーション |
スコープ |
|---|---|---|
|
アクティブな消費カロリー
dataType:
active-energy-burnedfilter parameter: active_energy_burned
レコードタイプ: Interval
ストレージの解決: 1 分
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
アクティブな時間(分)
dataType:
active-minutesfilter parameter: active_minutes
レコードタイプ: Interval
ストレージの解決: 1 分
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
アクティブ ゾーン時間
dataType:
active-zone-minutesフィルタ パラメータ: active_zone_minutes
レコードタイプ: Interval
ストレージの解決: 1 分
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
アクティビティ レベル
|
リスト、調整 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
高度
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
血糖値
|
list、get、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
体脂肪率
dataType:
body-fatfilter 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-zonefilter parameter: calories_in_heart_rate_zone
レコードタイプ: Interval
ストレージの解決: 1 分
|
rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
深部体温
|
list、get、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の心拍変動
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の心拍ゾーン
dataType:
daily-heart-rate-zonesfilter parameter: daily_heart_rate_zones
レコードタイプ: 日単位
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の血中酸素レベル
dataType:
daily-oxygen-saturationfilter parameter: daily_oxygen_saturation
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の呼吸数
dataType:
daily-respiratory-ratefilter parameter: daily_respiratory_rate
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の安静時の心拍数
dataType:
daily-resting-heart-ratefilter parameter: daily_resting_heart_rate
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
毎日の睡眠時の体温の推移
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
1 日の最大酸素摂取量
dataType:
daily-vo2-maxfilter parameter: daily_vo2_max
レコードタイプ: 日単位
対応デバイス
|
リスト、調整 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
距離
dataType:
distancefilter parameter: distance
レコードタイプ: Interval
ストレージの解決: 1 分
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
心電図(ECG)
dataType:
electrocardiogramfilter parameter: electrocardiogram
レコードタイプ: セッション
対応デバイス
|
list | .ecg.readonly |
|
エクササイズ
dataType:
exercisefilter parameter: exercise
レコードタイプ: セッション
対応デバイス
|
list、get、reconcile、create、update、batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
階数
|
reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
食べ物
|
list、get | .nutrition.readonly.nutrition.writeonly |
|
食品の測定単位
dataType:
food-measurement-unitフィルタ パラメータ: food_measurement_unit
記録タイプ: 食事
対応デバイス
|
list、get | .nutrition.readonly.nutrition.writeonly |
|
心拍数
dataType:
heart-ratefilter parameter: heart_rate
レコードタイプ: サンプル
ストレージの解像度: 1 秒(1 秒)
対応デバイス
|
list、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
心拍変動
dataType:
heart-rate-variabilityフィルタ パラメータ: heart_rate_variability
レコードタイプ: サンプル
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
身長
|
list、get、reconcile、create、update、batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
水分摂取量の記録
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .nutrition.readonly.nutrition.writeonly |
|
不整脈の通知
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
レコードタイプ: セッション
|
list | .irn.readonly |
|
月経期間
|
create、update、batchDelete | .reproductive_health.writeonly |
|
ムード
|
create、update、batchDelete | .mindfulness.writeonly |
|
栄養摂取量の記録
dataType:
nutrition-logfilter parameter: nutrition_log
レコードタイプ: セッション
対応デバイス
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .nutrition.readonly.nutrition.writeonly |
|
排卵検査
|
create、update、batchDelete | .reproductive_health.writeonly |
|
血中酸素
dataType:
oxygen-saturationfilter parameter: oxygen_saturation
レコードタイプ: サンプル
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
呼吸数の睡眠のまとめ
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
レコードタイプ: サンプル
対応デバイス
|
リスト、調整 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
ランニング時の最大酸素摂取量
dataType:
run-vo2-maxfilter parameter: run_vo2_max
レコードタイプ: サンプル
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
座りがちな時間
dataType:
sedentary-periodfilter parameter: sedentary_period
レコードタイプ: Interval
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
睡眠
dataType:
sleepfilter parameter: sleep
レコードタイプ: セッション
対応デバイス
|
list、get、reconcile、create、update、batchDelete | .sleep.readonly.sleep.writeonly |
|
手順
dataType:
stepsfilter parameter: steps
レコードタイプ: Interval
ストレージの解決: 1 分
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
プールの長さのデータ
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
レコードタイプ: Interval
対応デバイス
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
現象
|
create、update、batchDelete | .logged_symptoms.writeonly |
|
心拍ゾーンの時間
dataType:
time-in-heart-rate-zonefilter parameter: time_in_heart_rate_zone
レコードタイプ: Interval
ストレージの解決: 1 分
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
総消費カロリー
dataType:
total-caloriesfilter parameter: total_calories
レコードタイプ: Interval
ストレージの解決: 1 分
対応デバイス
|
rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
最大酸素摂取量
dataType:
vo2-maxfilter parameter: vo2_max
レコードタイプ: サンプル
対応デバイス
|
リスト、調整 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
重み
dataType:
weightfilter parameter: weight
レコードタイプ: サンプル
対応デバイス
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
クエリの制約
API からデータポイント、ロールアップ、または 1 日のロールアップをクエリする場合は、次の制約に注意してください。
- フィルタの要件:
total-caloriesなどの読み取り専用の派生データ型では、間隔の開始時刻(物理時間または市民時間を使用)を指定するフィルタが必要です。 - クエリ範囲の制限: ロールアップと 1 日のロールアップ集計エンドポイントは、データ型に基づいてクエリ範囲の最大制限を適用します。
calories-in-heart-rate-zone、heart-rate、active-minutes、total-caloriesの最大クエリ範囲は 14 日間です。- 他のすべてのデータ型の場合、クエリの最大範囲は 90 日です。
- ロールアップ ウィンドウ サイズ:
rollUpエンドポイントを呼び出す場合、windowSizeの期間は 1 秒以上("1s")にする必要があります。1 秒未満の期間はINVALID_ARGUMENTで拒否されます。また、サブインターバル間の分布が不均一になるのを避けるため、データ型の基盤となるストレージの解像度以上のwindowSize(stepsやdistanceなどの 1 分間隔のデータ型の場合は"60s"など)を選択します。詳細については、ロールアップ ウィンドウ サイズと基盤となるストレージの解像度をご覧ください。
日単位のデータ型とインターバルのデータ型
心拍変動(HRV)や血中酸素飽和度(SpO2)などの特定の生理学的指標については、Google Health API は 2 つの異なるデータ型(日次バージョンとインターバルバージョン)を提供します。この違いを理解することは、ユースケースに適した指標を選択するうえで重要です。
日次: 1 日全体の事前集計された単一の概要。処理を節約するために、大まかな傾向や毎日のダッシュボードにはこれを使用します。
間隔: 1 日を通して取得される、きめ細かい高解像度の測定値。これは、日中の変動をグラフ化したり、1 時間ごとの詳細な分析を行うために使用します。
データの可用性
ユーザーのデータは、アクティビティ トラッカーを同期するか、Fitbit モバイルアプリまたはウェブアプリに新しいデータを手動で入力した後にのみ更新されます。Fitbit デバイスと Fitbit モバイルアプリは、モバイル デバイスで Fitbit アプリが開いていて、両者がアクティブなデータ接続を持ち、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 デバイスは、サードパーティのアプリやサービスと直接通信できません。これらのデバイスは、Fitbit モバイルアプリとのみ通信して同期するように設計されています。
デバイスは、Fitbit アプリが開いているときは 1 日を通して自動的にデータを同期します。また、Bluetooth が有効でアプリがバックグラウンドで実行されている場合は、15 分ごとにデータを同期します。この同期プロセスが完了すると、Google Health API を介してサードパーティ サービスでデータを利用できるようになります。
距離の基準
elevationGainMillimeters などの運動距離は、次の理由から標準単位としてミリメートルで測定されます。
- データの精度を維持する: ミリメートルを使用する最も重要な理由は、読み取って提供するデータの精度を維持するためです。ミリメートルなどの細かい単位を使用すると、測定値を高い精度で表すことができます。
- 標準化: ミリメートルは、Google のサービス全体で設計された標準化された単位です。この一貫性により、API のさまざまな部分を操作するデベロッパーに一貫したエクスペリエンスを提供できます。
- 幅広い測定システムのサポート: ミリメートルなどの基本単位を使用することで、デベロッパーは、メートル法、ヤード・ポンド法、その他の測定システムを使用しているかどうかにかかわらず、選択した他の単位に簡単に変換できます。
日照時間の変動
Health API による時間の処理では、ユーザーの時間を優先して、夏時間や旅行による 1 日の長さの変動を考慮します。すべてのデータポイントは、物理的な UTC タイムスタンプと、イベント発生時に有効だった UTC オフセットの両方とともに保存されます。これにより、システムは次のことができるようになります。
- イベントを正確な物理的な瞬間にマッピングします。
- 集計のために、時間をユーザーのローカル コンテキストに修正します。
夏時間
夏時間が終了すると、25 時間の暦日となり、その日付のロールアップには 25 時間分のデータが含まれます。「サマータイム」では、時間が標準時に戻るため、1 日が 23 時間になります。
旅行
タイムゾーンを移動すると、1 日の実際の長さがさらに大きく変動する可能性があります。
dailyRollUp エンドポイントを使用して、タイムゾーンの差異を調整します。ユーザーの現地時間に基づいてデータが記録されたカレンダーの日付に自動的に割り当てられるため、タイムゾーンの変更があっても、その日が効果的に「つなぎ合わされます」。