Google Health API を使用して栄養と水分摂取量に関するエクスペリエンスを開発する

Google Health API には、ユーザーの栄養と水分摂取を追跡するためのデータ型が用意されています。これらのタイプを使用すると、食事の記録、食品データベースからの食品の参照、栄養素の量の追跡、水分摂取量の記録を行うことができます。

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

表: Google Health API の栄養データタイプ
データ型 使用可能な
オペレーション
スコープ
食べ物
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: hydration-log
filter parameter: hydration_log
Record type(レコードタイプ): Session(セッション)
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete .nutrition.readonly
.nutrition.writeonly
栄養摂取量の記録
dataType: nutrition-log
filter parameter: nutrition_log
Record type(レコードタイプ): Session(セッション)

対応デバイス

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

栄養摂取量の記録

栄養ログは、ユーザーが記録した食品を表します。食品の種類に応じて、栄養ログを作成する方法は 2 つあります。

  1. 特定された食品: food フィールドを、既存の Food リソースを参照するように設定します。nutrients、energy、energyFromFat、totalCarbohydrate、totalFat、foodDisplayName フィールドは、参照される食品から自動的に入力されます。こちらをおすすめします。

  2. 匿名の食品: foodDisplayName フィールドを手動で設定し、nutrients、energy、energyFromFat、totalCarbohydrate、totalFat の値を指定します。匿名の食品から作成された栄養ログは、作成後に編集できません。

匿名の食品を含む栄養ログを作成する

栄養ログエントリを作成するには、nutrition-log dataPoints エンドポイントに POST リクエストを送信します。

リクエスト

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

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T18:00:00Z",
      "endTime": "2026-06-16T18:30:00Z"
    },
    "foodDisplayName": "Grilled Chicken Breast",
    "mealType": "DINNER",
    "energy": {
      "kcal": 165
    },
    "totalCarbohydrate": {
      "grams": 0
    },
    "totalFat": {
      "grams": 3.6
    },
    "nutrients": [
      {
        "nutrient": "PROTEIN",
        "quantity": {
          "grams": 31
        }
      },
      {
        "nutrient": "SODIUM",
        "quantity": {
          "grams": 0.074
        }
      }
    ],
    "serving": {
      "amount": 1.0
    }
  }
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T18:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T18:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 165
      },
      "totalCarbohydrate": {
        "grams": 0
      },
      "totalFat": {
        "grams": 3.6
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 31
          },
          "nutrient": "PROTEIN"
        },
        {
          "quantity": {
            "grams": 0.074
          },
          "nutrient": "SODIUM"
        }
      ],
      "mealType": "DINNER",
      "serving": {
        "amount": 1
      },
      "foodDisplayName": "Grilled Chicken Breast"
    }
  }
}

特定された食品を含む栄養ログを作成する

食品データベースから食品を記録するには、food フィールドを Food リソースを参照するように設定します。API は栄養に関するフィールドに自動的に入力します。

リクエスト

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

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T12:00:00Z",
      "endTime": "2026-06-16T12:30:00Z"
    },
    "food": "users/me/dataTypes/food/dataPoints/food-id",
    "mealType": "LUNCH",
    "serving": {
      "amount": 1.0,
      "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
    }
  }
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 95
      },
      "energyFromFat": {
        "kcal": 3
      },
      "totalCarbohydrate": {
        "grams": 25
      },
      "totalFat": {
        "grams": 0.3
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 4.4,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "DIETARY_FIBER"
        },
        {
          "quantity": {
            "grams": 19,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "SUGAR"
        },
        {
          "quantity": {
            "grams": 0.5,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "PROTEIN"
        }
      ],
      "mealType": "LUNCH",
      "serving": {
        "amount": 1,
        "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
      },
      "food": "users/user-id/dataTypes/food/dataPoints/food-id",
      "foodDisplayName": "Apple"
    }
  }
}

栄養摂取量の記録を削除する

1 つ以上の栄養摂取ログエントリを削除するには、削除するエントリのリソース名を指定して、batchDelete メソッドに POST リクエストを送信します。

リクエスト:

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

{
  "names": [
    "users/me/dataTypes/nutrition-log/dataPoints/data-point-id"
  ]
}

栄養摂取量の記録フィールド

フィールドと説明の一覧については、NutritionLog をご覧ください。

エネルギー量

エネルギー測定値を表します。単位はキロカロリー(kcal)です。詳しくは、EnergyQuantity をご覧ください。

{
  "kcal": 165
}

重量

体重測定値を表します(単位はグラム)。詳細については、WeightQuantity をご覧ください:

{
  "grams": 27.3
}

栄養素の量

特定の栄養素とその測定量を表します。詳しくは、NutrientQuantity をご覧ください。

{
  "nutrient": "PROTEIN",
  "quantity": {
    "grams": 31
  }
}

栄養素の値

サポートされている栄養素タイプの完全なリストについては、Nutrient をご覧ください。

サービス提供

栄養ログエントリの 1 回分の情報を表します。詳しくは、Serving をご覧ください。

{
  "amount": 1.5
}

食事の種類の値

サポートされている食事タイプの完全なリストについては、MealType をご覧ください。

食べ物

Food は、食品データベース内の食品アイテムを表す読み取り専用のデータ型です。list オペレーションと get オペレーションを使用して、利用可能な食品を閲覧し、その栄養情報を取得します。

食品を一覧表示する

食品を一覧表示するには、food dataPoints エンドポイントに GET リクエストを送信します。

GET https://health.googleapis.com/v4/users/me/dataTypes/food/dataPoints
Authorization: Bearer access-token
Accept: application/json

食品の測定単位

食品測定単位は、食品の提供に使用される測定単位(「カップ」、「大さじ」、「個」など)を表す読み取り専用のデータ型です。

使用可能な測定単位を一覧表示する

使用可能な測定単位を一覧表示するには:

GET https://health.googleapis.com/v4/users/me/dataTypes/food-measurement-unit/dataPoints
Authorization: Bearer access-token
Accept: application/json

水分摂取量の記録

水分摂取量の記録は、ユーザーが記録した水分摂取量を表します。食品データベースを参照して栄養素やエネルギーの摂取量を測定する食品とは異なり、水分補給のエントリは、特定の時間間隔で摂取された液体の特定の量を追跡します。

水分摂取量の記録を作成する

水分補給ログエントリを作成するには、hydration-log dataPoints エンドポイントに POST リクエストを送信します。すべての体積量は、API 形式でミリリットルに変換されます。

リクエスト

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

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T14:00:00Z",
      "endTime": "2026-06-16T14:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500,
      "userProvidedUnit": "FLUID_OUNCE_US"
    }
  }
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T14:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T14:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500,
        "userProvidedUnit": "FLUID_OUNCE_US"
      }
    }
  }
}

水分摂取量の記録を更新する

水分補給ログエントリを更新するには、データポイントの ID を指定して PATCH リクエストを hydration-log dataPoints エンドポイントに送信します。

リクエスト

PATCH https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints/data-point-id
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T10:00:00Z",
      "endTime": "2026-06-16T10:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500
    }
  }
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T10:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T10:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500
      }
    }
  }
}

水分摂取量の記録を削除する

1 つ以上の水分補給ログエントリを削除するには、batchDelete メソッドに POST リクエストを送信します。

リクエスト

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

{
  "names": [
    "users/me/dataTypes/hydration-log/dataPoints/data-point-id"
  ]
}

レスポンス

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.BatchDeleteDataPointsResponse",
    "dataPoints": [
      {
        "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
        "dataSource": {
          "recordingMethod": "UNKNOWN",
          "application": {
            "googleWebClientId": "google-web-client-id"
          },
          "platform": "GOOGLE_WEB_API"
        },
        "hydrationLog": {
          "interval": {
            "startTime": "2026-06-16T14:00:00Z",
            "startUtcOffset": "0s",
            "endTime": "2026-06-16T14:00:01Z",
            "endUtcOffset": "0s",
            "civilStartTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14
              }
            },
            "civilEndTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14,
                "seconds": 1
              }
            }
          },
          "amountConsumed": {
            "milliliters": 500,
            "userProvidedUnit": "FLUID_OUNCE_US"
          }
        }
      }
    ]
  }
}

水分摂取量の記録のフィールド

フィールドと説明の一覧については、HydrationLog をご覧ください。

ボリューム数

ミリリットル単位で測定された体積測定値を表します。詳細については、VolumeQuantity をご覧ください:

{
  "milliliters": 250,
  "userProvidedUnit": "MILLILITER"
}

体積単位の値

サポートされているボリューム単位の完全なリストについては、VolumeUnit をご覧ください。一般的な値には、MILLILITER、LITER、CUP_US、FLUID_OUNCE_US があります。

ガイドライン

  • 可能な場合は、特定された食品を使用します。API は栄養フィールドに自動的に入力するため、エラーが減り、食品データベースとの整合性が確保されます。
  • 匿名の食品から作成された栄養ログは、作成後に更新できません。匿名の食事記録を修正する必要がある場合は、削除して新しい記録を作成します。
  • 匿名の食品栄養ログとは異なり、水分補給ログエントリは完全に変更可能で、作成後に PATCH リクエストを使用して更新できます。
  • nutrients 配列内のすべての栄養素の量は、測定単位としてグラムを使用します。
  • energy フィールドと energyFromFat フィールドでは、測定単位としてキロカロリー(kcal)を使用します。
  • API は、すべての水分摂取量をミリリットルに変換して保存します。VolumeQuantity のオプションの userProvidedUnit フィールドは、クライアントサイドのユーザー向け表示にのみ使用されます。
  • 個々の hydration-log データポイントへの直接 HTTP DELETE リクエストは 404 Not Found を返します。これらのリソース エントリを削除するには、batchDelete メソッドを使用します。
  • 水分補給ログでは、startTime と endTime で水分を摂取した期間を表す短い間隔を使用します。