Google Health API を使用して睡眠エクスペリエンスを開発する

Google Health API は、ユーザーの睡眠パターン(睡眠時間、睡眠の質、休息中の生理学的指標など)を追跡するデータ型を提供します。これらの指標は、アプリがリカバリー、睡眠衛生、長期的な健康状態の傾向に関する分析情報を提供するために役立ちます。

心拍変動(HRV)、血中酸素ウェルネス(SpO2)、呼吸数などの生理学的指標は、身体が安定した休息状態にある睡眠中に記録されます。これにより、API は、日中のストレス要因、身体活動、環境条件の変化の影響を受けずに、ユーザーの自律神経系と呼吸器系の健康状態のベースラインを把握できます。

これらのデータ型の違いを理解して、アプリケーションに適した指標を判断します。

サポートされるデータタイプ

API は、睡眠の測定に次のデータ型をサポートしています。

表: Google Health API の睡眠データ型
データ型 利用可能な
オペレーション
スコープ
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-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
毎日の睡眠時の体温の推移
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
レコードタイプ: 毎日

対応デバイス

list、reconcile .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: oxygen-saturation
filter parameter: oxygen_saturation
レコードタイプ: サンプル

対応デバイス

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: sleep
filter parameter: sleep
レコードタイプ: セッション

対応デバイス

list、get、reconcile、create、update、batchDelete .sleep.readonly
.sleep.writeonly

睡眠セッションと短時間の覚醒

睡眠セッション(Sleep)は、夜間の睡眠や昼寝など、個別の睡眠イベントを表します。睡眠ステージの重複しない詳細な内訳と、短時間覚醒と呼ばれる短い覚醒移行間隔が含まれます。

  • 睡眠セッション(Sleep: 主な休息の連続したタイムラインを分割する個別の睡眠イベント(LIGHTDEEPREMAWAKE のステージ間隔)を表します。
  • 短い目覚め(shortAwakenings: 休息中に発生する短い目覚め。標準の AWAKE ステージ間隔(重複しない連続した睡眠ステージの推移を分割)とは異なり、短時間の覚醒は、周囲の睡眠ステージと重複する可能性のある個別のセグメントです。睡眠の主なステージ構造を損なうことなく、睡眠中の落ち着きのなさや微小な覚醒を詳細に把握できます。

{
  "name": "sleeps/12345",
  "startTime": "2026-04-20T22:30:00Z",
  "endTime": "2026-04-21T06:30:00Z",
  "sleepType": "STAGES",
  "sleepStages": [
    {
      "startTime": "2026-04-20T22:30:00Z",
      "endTime": "2026-04-20T23:45:00Z",
      "type": "LIGHT"
    },
    {
      "startTime": "2026-04-20T23:45:00Z",
      "endTime": "2026-04-21T01:15:00Z",
      "type": "DEEP"
    }
  ],
  "shortAwakenings": [
    {
      "startTime": "2026-04-20T23:10:00Z",
      "endTime": "2026-04-20T23:11:30Z",
      "type": "AWAKE"
    }
  ]
}

睡眠セッションを作成する

睡眠セッション エントリを作成するには、sleep データポイント エンドポイントに POST リクエストを送信します。レスポンスには、data-point-id を含む name フィールドが含まれます。このフィールドは、更新(パッチ)リクエストまたは削除リクエストで使用できます。

リクエスト

POST https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "sleep": {
    "interval": {
      "startTime": "2026-06-07T22:00:00Z",
      "startUtcOffset": "-14400s",
      "endTime": "2026-06-08T06:00:00Z",
      "endUtcOffset": "-14400s"
    },
    "type": "STAGES",
    "stages": [
      {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T22:30:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-07T22:30:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-07T23:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "DEEP"
      },
      {
        "startTime": "2026-06-07T23:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T02:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T02:45:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      },
      {
        "startTime": "2026-06-08T02:45:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T05:15:00Z",
        "endUtcOffset": "-14400s",
        "type": "LIGHT"
      },
      {
        "startTime": "2026-06-08T05:15:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s",
        "type": "REM"
      }
    ]
  }
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/sleep/dataPoints/data-point-id",
    "sleep": {
      "interval": {
        "startTime": "2026-06-07T22:00:00Z",
        "startUtcOffset": "-14400s",
        "endTime": "2026-06-08T06:00:00Z",
        "endUtcOffset": "-14400s"
      },
      "type": "STAGES",
      "stages": [
        {
          "startTime": "2026-06-07T22:00:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T22:30:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-07T22:30:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-07T23:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "DEEP"
        },
        {
          "startTime": "2026-06-07T23:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T02:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T02:45:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        },
        {
          "startTime": "2026-06-08T02:45:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T05:15:00Z",
          "endUtcOffset": "-14400s",
          "type": "LIGHT"
        },
        {
          "startTime": "2026-06-08T05:15:00Z",
          "startUtcOffset": "-14400s",
          "endTime": "2026-06-08T06:00:00Z",
          "endUtcOffset": "-14400s",
          "type": "REM"
        }
      ]
    }
  }
}

毎日の睡眠時体温の変動

毎日の睡眠時体温の変動は、睡眠中のユーザーの皮膚温の変動を基準値と比較して測定します。このデータは通常、主な睡眠セッションの後に 1 日 1 回報告されます。

呼吸数

呼吸数は、1 分あたりの呼吸回数を測定します。睡眠中は、睡眠の質と潜在的な妨害要因をモニタリングするための重要な指標となります。この API は、呼吸数のサンプル(respiratory-rate)、1 日の概要(daily-respiratory-rate)、セッション レベルの睡眠の概要(respiratory-rate-sleep-summary)をサポートしています。

心拍変動(HRV)

心拍変動は、各心拍間の時間間隔の変動を測定します。自律神経系の状態を示す重要な指標です。睡眠中の HRV が高い場合は、一般的に回復とエナジースコアが高いことを示し、HRV が低い場合は、ストレスやオーバートレーニングを示している可能性があります。この API は、HRV のサンプル(heart-rate-variability)と 1 日の概要(daily-heart-rate-variability)をサポートしています。

血中酸素ウェルネス

SpO2 は、血液中の総ヘモグロビンに対する酸素飽和ヘモグロビンの割合を表します。睡眠中の血中酸素ウェルネスをモニタリングすることは、呼吸の乱れを検出し、ユーザーが夜間に十分な酸素レベルを維持できるようにするために不可欠です。この API は、血中酸素ウェルネスのサンプル(oxygen-saturation)と 1 日の概要(daily-oxygen-saturation)をサポートしています。

睡眠の質と回復を総合的に把握

各指標はそれぞれ特定の分析情報を提供しますが、相互に深く関連しており、全体としてユーザーのリカバリー状況を包括的に把握できます。睡眠ステージ(浅い睡眠、深い睡眠、レム睡眠)は休息の構造的な基盤を提供し、HRV や SpO2 などの生理学的マーカーは、体がその休息にどのように身体的に反応しているかを示します。たとえば、質の高い睡眠セッションで深い睡眠が最適に取れている場合、HRV が高くなることが多く、自律神経系の効果的な回復を示しています。

これらのデータと呼吸数や睡眠時の体温の推定値を組み合わせることで、アプリは睡眠を妨げる可能性のある要因を特定できます。呼吸数の急激な増加や睡眠時の体温の変動は、ユーザーが回復段階に費やした時間が短かった理由を説明するのに役立ちます。これらのデータタイプを同時に分析することで、睡眠衛生と長期的な健康指標の傾向を包括的に評価できます。

ガイドライン

アプリに睡眠指標を統合する際は、次のガイドラインに沿ってください。

  • セッションの詳細: ユーザーの睡眠ステージ(浅い睡眠、深い睡眠、レム睡眠、覚醒)と短時間の覚醒を表示するには、sleep データ型をクエリします。
  • 生理学的モニタリング: 高度な健康状態のモニタリングでは、睡眠セッションのデータと、respiratory-rate-sleep-summarydaily-sleep-temperature-derivationsdaily-heart-rate-variabilitydaily-oxygen-saturation などの生理学的指標やリカバリー指標を組み合わせます。
  • 調整: reconcile オペレーションを使用して、異なるデバイス(ウェアラブルやマットレス センサーなど)から重複する睡眠ログが 1 つの「メイン」睡眠記録に統合されるようにします。

深い睡眠の合計時間を計算する

特定の夜にユーザーが回復的な深い睡眠段階で過ごした合計時間を計算するには:

  1. 指定された期間の sleep データ型をクエリします。
  2. ステージのリストを反復処理し、stageTypeDEEP である間隔を特定します。
  3. 各深い睡眠の間隔の継続時間(終了時間 - 開始時間)を計算し、それらを合計します。

この合計が、そのセッションの深い睡眠の合計時間になります。