1. はじめに
OAuth 2.0 Playground は、コードを記述せずに Google OAuth 2.0 フローをテストできるウェブベースのツールです。この Codelab では、Google Cloud プロジェクトを設定し、認証情報を取得し、OAuth 2.0 Playground で認可フローを開始して、Google Health API エンドポイントの 1 つに最初の呼び出しを行う方法について説明します。
学習内容
- Google Cloud コンソールでクライアント ID を設定する方法。
- OAuth 2.0 Playground を使用して、Google OAuth 2.0 認可フローを実行し、アクセス トークンと更新トークンを取得する方法。
- OAuth 2.0 Playground を使用して Google Health API エンドポイントを呼び出す方法。
必要なもの
- Google アカウント
- Fitbit モバイルアプリ
- OAuth 2.0 Playground
Fitbit モバイルアプリを設定する手順は次のとおりです。
- Apple App Store または Google Play ストアで Fitbit モバイルアプリを検索してダウンロードします。
- アプリアイコンを選択します。
- [Google でログイン] をクリックします。
- Google アカウントを選択し、[続行] ボタンを押します。
2. Google Cloud プロジェクトを設定する
Google Cloud コンソールを使用して、クライアント ID を作成し、Google Health API の使用を有効にします。
- Google Cloud コンソールにログインします。
- 新しいプロジェクトを作成する手順は次のとおりです。
- プロジェクト選択ツールで [プロジェクトを選択] をクリックします。
- 右上にある [新しいプロジェクト] を選択します。
- プロジェクト名 を入力します。
- ロケーション を入力します(例: 「組織なし」)。
- [作成] ボタンをクリックします。
- プロジェクトを選択します。
Google Health API を有効にする
- 左上のメニュー アイコン
をクリックします。 - [API とサービス] > [ライブラリ] を選択します。
- 「Google Health API」を検索して有効にします。
OAuth 認証情報を設定する
Google Cloud コンソールにログインしていない場合は、Google Cloud コンソールに移動します。
- 左上のメニュー アイコン
をクリックします。 - [API とサービス] > [認証情報] を選択します。
- 中央上部で、[+ 認証情報を作成] > [OAuth クライアント ID] を選択します。
- [同意画面を構成] ボタンをクリックします。「Google Auth Platform はまだ構成されていません」というメッセージが表示されたら、[スタートガイド] ボタンをクリックします。
- セクション 1:
- [App name] を入力します。
- [User support email] を入力します。
- [次へ] ボタンをクリックします。
- セクション 2:
- [外部] を選択します。
- [次へ] ボタンをクリックします。
- セクション 3:
- [Contact Information] フィールドにメールアドレスを入力します。
- [次へ] ボタンをクリックします。
- セクション 4:
- チェックボックスをオンにして、Google の API サービス ユーザーデータに関するポリシー に同意します。
- [作成] ボタンをクリックします。
- [API とサービス] > [認証情報] に移動し、[+ 認証情報を作成] > [OAuth クライアント ID] を選択します。
- アプリケーションの種類として [ウェブ アプリケーション] を選択します。
- クライアント ID の名前 を入力します。
- [承認済みの JavaScript 生成元] は空のままにします。
- [承認済みのリダイレクト URI] で、[+ URI を追加] をクリックして次の URI を追加します:
https://www.google.comhttps://developers.google.com/oauthplayground
- [作成] ボタンをクリックします。
- Google コンソールに、クライアント ID が作成されたことを示すメッセージが表示されます。[Download JSON] リンクをクリックしてクライアント ID とクライアント シークレットをダウンロードするか、値を書き留めます。後でクライアントのシークレットを復元することはできません。
- [OK] をクリックします。[OAuth 2.0 クライアント ID] ページに戻ります。
- クライアント ID がプロジェクトに追加されます。クライアント ID の URL をクリックすると、詳細が表示されます。
テストユーザーを追加する
- 左側のペインで [オーディエンス] を選択します。[公開ステータス] が [**テスト中**] に設定され、[ユーザーの種類] が [**外部**] に設定されていることを確認します。
- [テストユーザー] セクションで、[+ ユーザーを追加] ボタンをクリックします。データを取得するユーザーのメールアドレスを入力します。
- [保存] ボタンをクリックします。
クライアント ID にスコープを追加する
- 左側のペインで [データアクセス] を選択します。
- [スコープを追加または削除] ボタンをクリックします。
- [API] 列で「Google Health API」を検索します。この Codelab では、スコープ
.../auth/googlehealth.activity_and_fitness.readonlyを使用します。 - スコープを選択したら、[更新] ボタンを押して [データアクセス] ページに戻ります。
- [保存] ボタンをクリックします。
これでクライアント ID の設定が完了しました。
3. Fitbit モバイルアプリにデータを追加する
Fitbit を初めて使用する場合は、Fitbit アカウントにクエリを実行するデータがない可能性があります。エンドポイントの 1 つからクエリを実行できる運動ログを手動で追加します。運動を手動で記録する手順は次のとおりです。
- デバイスで Fitbit モバイルアプリを開きます。必要に応じて Fitbit アカウントにログインします。
- 画面の右下にある + ボタンをタップします。
- [手動で記録] セクションで [アクティビティ] をタップします。
- 運動の種類 [ウォーキング] を検索して選択します。
- 今日の開始時間 を入力します。
- 期間を 15 分 に変更します。
- 距離は 1.0 マイル のままにします。
- [追加] をタップします。
- 画面を長押しして下にスライドし、モバイルアプリを Fitbit サーバーと同期します。指を離すと、モバイルアプリが同期されます。
- [アクティビティ] セクションに、手動で記録したウォーキングのエントリが表示されます。

4. OAuth 2.0 Playground で認可する
OAuth 2.0 Playground に移動します。
Google Health API では、Playground で独自の OAuth 認証情報を使用する必要があります。
- 右上の OAuth 2.0 Configuration 歯車アイコンをクリックします。
- [Use your own OAuth credentials] をオンにします。
- Google Cloud プロジェクトの設定時に取得した OAuth クライアント ID と OAuth クライアント シークレット を入力します。
Playground インターフェースは、次の 3 つの主なステップに分かれています。
- API を選択して認可する
- 認証コードをトークンと交換する
- API にリクエストを送信する
API を選択して認可する
ここでは、リクエストする API スコープを選択します。
- [Step 1] で、API のリストから [Google Health API v4] を見つけて展開します。
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonlyを選択します。必要なスコープがリストに表示されない場合は、[Input your own scopes] フィールドに手動で入力できます。- [Authorize APIs] をクリックします。
- リクエストが Google の OAuth 2.0 認可エンドポイントに送信され、選択したスコープがリクエストに含まれ、Google アカウントの同意画面にリダイレクトされます。
- [Google Cloud プロジェクトを設定する] セクションで設定したテストユーザー アカウントでログインします(まだログインしていない場合)。
- リクエストされた権限を確認し、[続行] をクリックしてアクセス権を付与します。
同意すると、Google は Playground にリダイレクトし、次のステップで使用される認証コード をツールに提供します。
右側の [Request / Response] パネルに、完全な HTTP リダイレクト フローが表示されます。
最初の認可リクエストからのレスポンスは、302 Found リダイレクトです。
HTTP/1.1 302 Found
Location: https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=your_client_id&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgooglehealth.activity_and_fitness.readonly&access_type=offline
その結果、Playground にリダイレクトされたリクエストには認証コードが含まれます。
GET /oauthplayground/?iss=https://accounts.google.com&code=authorization_code&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly HTTP/1.1
Host: developers.google.com
認証コードは、GET リクエスト URL の code= と &scope の間の authorization_code で表される英数字の値です。この例では、値は 4/0AbPOj... のようになります。
認証コードをトークンと交換する
このステップでは、コードが API リクエストを行うためのトークンと交換されます。
[API を選択して認可する] を完了すると、Playground によって認証コード フィールドに自動的に入力されます。トークンと交換するには:
- ステップ 2 で [Exchange authorization code for tokens] ボタンをクリックします。
- 右側の [Request/Response] パネルに access_token と refresh_token が表示されます。
次のようなレスポンスが表示されます。
{
"access_token": "ya29.a0AFH6S....",
"refresh_token_expires_in": 604799,
"expires_in": 3599,
"token_type": "Bearer",
"scope": "https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly",
"refresh_token": "1/og..."
}
更新トークンについて
認可コードを交換すると、レスポンスには access_token に加えて refresh_token が含まれる場合があります。access_token の有効期間は短く(通常は 1 時間)です。access_token の有効期限が切れた場合は、ユーザーに再度ログインまたは同意を求めることなく、refresh_token を使用して新しい access_token を取得する必要があります。これは、認可リクエストに access_type=offline を含めたためです。
レスポンスで refresh_token を受け取らない場合は、このアプリとスコープに対する同意をすでに付与している可能性があります。通常、更新トークンは、ユーザーがアプリに初めて同意した場合、または後続の認可でも同意画面を強制的に表示するために prompt=consent が認可 URL に追加された場合にのみ発行されます。
refresh_token の有効期間は長いですが、6 か月間使用しない場合、ユーザーがアプリへのアクセスを取り消した場合、またはその他の理由で有効期限が切れたり、無効になったりすることがあります。refresh_token は、後で使用できるように安全に保管する必要があります。
5. API にリクエストを送信する
アクセス トークンを使用して、Google Health API にリクエストを送信できるようになりました。Playground のステップ 3 で、Request URI 、HTTP Method 、ヘッダー、リクエスト ボディを指定して HTTP リクエストを構成します。
- [HTTP Method] を [GET] に設定します。
- [リクエスト URI] を
https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPointsに設定します。 - [Send the request] をクリックします。
レスポンスは次のようになります。
{
"dataPoints": [
{
"name": "users/2515055256096816351/dataTypes/exercise/dataPoints/8896720705097069096",
"dataSource": {
"recordingMethod": "MANUAL",
"platform": "FITBIT"
},
"exercise": {
"interval": {
"startTime": "2026-02-23T13:10:00Z",
"startUtcOffset": "-18000s",
"endTime": "2026-02-23T13:25:00Z",
"endUtcOffset": "-18000s"
},
"exerciseType": "WALKING",
"metricsSummary": {
"caloriesKcal": 16,
"distanceMillimiters": 1609344,
"steps": "2038",
"averagePaceSecondsPerMeter": 0.55923407301360051,
"activeZoneMinutes": "0"
},
"exerciseMetadata": {},
"displayName": "Walk",
"activeDuration": "900s",
"exerciseEvents": [
{
"eventTime": "2026-02-23T13:10:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "START"
},
{
"eventTime": "2026-02-23T13:25:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "STOP"
}
],
"updateTime": "2026-02-24T01:19:22.450466Z"
}
},
{
"name": "users/2515055256096816351/dataTypes/exercise/dataPoints/5870930690409355408",
"dataSource": {
"recordingMethod": "MANUAL",
"platform": "FITBIT"
},
"exercise": {
"interval": {
"startTime": "2026-02-23T06:00:00Z",
"startUtcOffset": "-18000s",
"endTime": "2026-02-23T06:15:00Z",
"endUtcOffset": "-18000s"
},
"exerciseType": "WALKING",
"metricsSummary": {
"caloriesKcal": 17,
"distanceMillimiters": 1609344,
"steps": "2038",
"averagePaceSecondsPerMeter": 0.55923407301360051,
"averageHeartRateBeatsPerMinute": "81",
"activeZoneMinutes": "0",
"heartRateZoneDurations": {
"lightTime": "900s"
}
},
"exerciseMetadata": {},
"displayName": "Walk",
"activeDuration": "900s",
"exerciseEvents": [
{
"eventTime": "2026-02-23T06:00:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "START"
},
{
"eventTime": "2026-02-23T06:15:00Z",
"eventUtcOffset": "-18000s",
"exerciseEventType": "STOP"
}
],
"updateTime": "2026-02-23T08:29:39.480437Z"
}
}
],
"nextPageToken": ""
}
多くのエンドポイントでは、フィルタリングやページネーション用のクエリ パラメータがサポートされています。たとえば、特定の期間内の運動を一覧表示するには、フィルタ パラメータを含めるようにリクエスト URI を変更します。
https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints?filter=exercise.interval.civil_start_time >= "2026-02-22T00:00:00"
もう一度 [Send the request] をクリックすると、フィルタされた結果が表示されます。
6. 完了
お疲れさまでした
基本的な Codelab を完了し、OAuth2 Playground を使用して OAuth 2.0 認可をテストし、Google Health API エンドポイントを呼び出す方法を学習しました。
Google Health API エコシステムと統合するアプリの構築をお楽しみください。詳細については、リファレンス ドキュメントで他の Google Health API エンドポイントを確認し、ウェブサーバー アプリケーション向けの Google OAuth 2.0 についてご確認ください。