1. はじめに
Visual Studio Code(VS Code)と Huachao Mao の Rest Client 拡張機能を使用すると、Google OAuth 同意フローと Google Health API をテストできます。この Codelab では、Rest Client 拡張機能を設定する方法、認可フローを開始する方法、Google Health API エンドポイントの 1 つに最初の呼び出しを行う方法について説明します。その後、REST クライアントのドキュメントと Fitbit のドキュメントを読んで、HTTP プロジェクトの他のエンドポイントを構築できます。
VS Code と Rest Client を使用しない場合は、curl コマンドで API 呼び出しを行うことができます。
学習内容
- Rest クライアント拡張機能を使用して VS Code を設定する方法。
- Google Cloud コンソールでクライアント ID を設定する方法。
- Google OAuth 2.0 認証フローを完了してアクセス トークンと更新トークンを取得する方法。
- Rest クライアントを使用して Google Health API エンドポイントを呼び出す方法。
必要なもの
- Fitbit モバイルアプリ
- Visual Studio Code
- Huacho Mao による Rest Client 拡張機能。
Fitbit モバイルアプリを設定するには:
- Apple App Store または Google Play ストアで Fitbit モバイルアプリを検索してダウンロードします。
- アプリアイコンを選択します。
- [Google でログイン] をクリックします。
- Google アカウントを選択して、[続行] ボタンを押します。
Visual Studio ツールをインストールするには:
- VS Code をダウンロードします。通常、ダウンロードには実行可能ファイルが含まれています。
- VS Code を起動します。
- Huachao Mao の Rest Client 拡張機能をインストールします。
- IDE の左側にある拡張機能アイコン
をクリックします。 - Huachao Mao の REST クライアントを検索し、[インストール] を押します。
- IDE の左側にある拡張機能アイコン
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] を入力します。
- [ユーザー サポートのメール] を入力します。
- [次へ] ボタンをクリックします。
- セクション 2:
- [外部] を選択します。
- [次へ] ボタンをクリックします。
- セクション 3:
- [連絡先情報] フィールドにメールアドレスを入力します。
- [次へ] ボタンをクリックします。
- セクション 4:
- チェックボックスをオンにして、Google の API サービスのユーザーデータに関するポリシーに同意します。
- [作成] ボタンをクリックします。
- [指標] セクションで、[OAuth クライアントを作成] ボタンを押します。
- アプリケーションの種類として [ウェブ アプリケーション] を選択します。
- クライアント ID の名前を入力します。
- [承認済みの JavaScript 生成元] は空のままにします。
- [承認済みのリダイレクト URI] で、[+ URI を追加] ボタンを押します。リダイレクト URI に「https://www.google.com」と入力します。
- [作成] ボタンをクリックします。
- Google コンソールに、クライアント ID が作成されたことを示すメッセージが表示されます。[JSON をダウンロード] リンクをクリックしてクライアント ID とクライアント シークレットをダウンロードするか、値を書き留めます。クライアント シークレットは後で復元できません。
- [OK] をクリックします。[OAuth 2.0 クライアント ID] ページに戻ります。
- クライアント ID がプロジェクトに追加されます。クライアント ID の URL をクリックすると、詳細が表示されます。
テストユーザーを追加する
- 左側のペインで [オーディエンス] を選択します。[公開ステータス] が [テスト中] に、[ユーザーの種類] が [外部] に設定されていることを確認します。
- [テストユーザー] セクションで、[+ ユーザーを追加] ボタンをクリックします。データを取得するユーザーのメールアドレスを入力します。
- [保存] ボタンをクリックします。
クライアント ID にスコープを追加する
- 左側のペインで [データアクセス] を選択します。
- [スコープを追加または削除] ボタンをクリックします。
- [API] 列で「Google Health API」を検索します。この Codelab では、スコープ
.../auth/googlehealth.activity_and_fitness.readonlyを使用します。 - スコープを選択したら、[更新] ボタンを押して [データアクセス] ページに戻ります。
- [保存] ボタンをクリックします。
クライアント ID の設定が完了しました。
3. 認可フローを作成する
- マシンで VS Code アプリを開きます。
- ウェルカム画面で [開く] を選択します。
- このプロジェクトを作成するフォルダを選択し、[開く] を押します。次のような画面が表示され、エクスプローラにフォルダ名またはプロジェクト名が表示されます。

- メインメニューから、[File] -> [New Text file] を選択します。
- ファイルを保存して名前を付けます。メインメニューから、[File -> Save As -> Codelab.http] を選択します。これで、ファイルがプロジェクトに配置されます。ファイルの拡張子は .http または .rest にする必要があります。この Codelab では、.http を使用します。
このプロジェクトでは、複数の値を複数回使用します。これらの値は次のとおりです。
| Google コンソールのクライアント ID 値。 |
| Google コンソールから取得したクライアントのシークレット値。 |
| 認証コードを処理するアプリ内のエンドポイント。この Codelab では、https://www.google.com を使用します。 |
| 同意フローが完了したときにユーザーに対して作成されるアクセス トークン。 |
| 同意フローが完了したときにユーザーに対して作成された更新トークン。 |
このプロジェクトで使用する変数を定義する次のコードを追加します。これらは Codelab.http ファイルの先頭に配置する必要があります。client_id と secret の値を入力します。
### File Variables for the Codelab
@client_id =
@secret =
@redirect_uri = https://www.google.com
@accessToken={{user.response.body.access_token}}
@refreshToken={{user.response.body.refresh_token}}
同意フローを開始するために使用される認証 URL が、アクセスするデータの各ユーザーに送信されます。認可 URL を作成するには、Google OAuth エンドポイントを把握し、クエリ パラメータを使用して、クライアント ID、アクセスするスコープ、ユーザーがスコープに同意したときにリダイレクトする場所を指定する必要があります。Google 認証文字列の作成に関する詳細なドキュメントについては、ドキュメントをご覧ください。
Google の OAuth 2.0 エンドポイントは https://accounts.google.com/o/oauth2/v2/auth にあります。このエンドポイントには HTTPS 経由でのみアクセスできます。プレーン HTTP 接続は拒否されます。
Google 認証サーバーは、ウェブサーバー アプリケーションが認証フローをカスタマイズするための多くのクエリ文字列パラメータをサポートしています。必須のクエリ パラメータとして、client_id、redirect_uri、response_type、scope を使用します。ドキュメントには、すべてのクエリ パラメータとその説明が記載されています。
クエリ パラメータの値は次のとおりです。
| Google コンソールのクライアント ID の値 |
| 認証コードを処理するアプリ内のエンドポイント。この Codelab では、https://www.google.com を使用します。 |
|
|
| スコープは、Google コンソールから https://www.googleapis.com の後にスコープ名が続く構文で取得されます。例: https://www.googleapis.com/auth/googlehealth.activity_and_fitness。 |
変数の後に、以下のように承認 URL を記述します。プロジェクトの先頭で定義されたパラメータは、認証文字列では使用できません。そのため、client_id と redirect_uri の値を含める必要があります。文字列 client-id をクライアント ID に置き換えます。
### Google Health API Rest Client Example
### Authorization String
https://accounts.google.com/o/oauth2/v2/auth?client_id=client-id&redirect_uri=https://www.google.com&response_type=code&access_type=offline&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
ユーザーが同意すると、Google は認可コードを提供します。この認可コードは、Google のトークン エンドポイントを呼び出すことでアクセス トークンと交換できます。認証文字列の下の Codelab.http に、トークン エンドポイントを呼び出すための次の定義を追加します。次のステップで、authorization-code を認証コードに置き換えます。
### AUTHORIZATION ENDPOINTS
######################################################################
# @name user
POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
code=authorization-code&client_id={{clientId}}&client_secret={{secret}}&redirect_uri={{redirect_uri}}&grant_type=authorization_code
@name user は、アクセスしているデータの現在のユーザーを参照します。
4. アカウントを承認してトークンを取得する
次に、認可フローを実行して認可トークンを取得します。
Codelab.http の認可文字列は、Google のブラウザベースの同意フローを開始するために使用されます。Rest Client 拡張機能では、この URL の [Send Request] リンクが表示されることがあります。この特定の URL には [Send Request] を使用しないでください。代わりに、コピーしてブラウザに貼り付けるか、VS Code で Ctrl+クリック(Windows/Linux)または Cmd+クリック(Mac)を使用して、デフォルトのブラウザで開きます。
https://accounts.google.com/o/oauth2/v2/auth?client_id=client-id&redirect_uri=https://www.google.com&response_type=code&access_type=offline&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
- Google アカウントへのログインを求められます。テストユーザーを追加するセクションで設定したテストユーザー アカウントのいずれかを使用してログインする必要があります。
- アプリが確認されていないことを示すメッセージが表示されることがあります。これは、アプリが公開されていないためです。[続行] を押します。

- 同意ページには、リクエストされているスコープが一覧表示されます。ユーザーは、このアプリと共有するスコープを選択できます。[続行] をクリックします。
リクエストされたスコープの共有に同意すると、指定した redirect_uri(この Codelab では https://www.google.com)にリダイレクトされます。Google は redirect_uri に認証コードなどのパラメータを追加します。ブラウザのアドレスバーの URL は次のようになります。
https://www.google.com/?code=4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
認証コードは、「code=」と「&scope」の間の英数字値です。上記の例では、値は次のようになります。
4/0Ab32j93oyGWqaXE112sP1IKmh3kV1fE4tcHIMXYJQYWgNEtAa_0-YsfkS9Ekj3Be89u3fw
本番環境のアプリでは、サーバーが URL パラメータからこの値を解析します。この Codelab では、ブラウザの URL から認証コードをコピーします。
この認証コードを access_token と refresh_token に交換します。Codelab.http で、POST /token リクエスト本文の authorization-code をコピーした認証コードに置き換えます。
POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
code=authorization-code&client_id={{client_id}}&client_secret={{secret}}&redirect_uri={{redirect_uri}}&grant_type=authorization_code
POST https://oauth2.googleapis.com/token のすぐ上にある [リクエストを送信] リンクをクリックします。
レスポンスは次のようになります。
{
"access_token": "ya29.a0ATi6K2uasci7FyyIClNLtQou6z...",
"expires_in": 3599,
"refresh_token": "1//05EuqYpEXjJCHCgYIA...",
"scope": "https://www.googleapis.com/auth/googlehealth.activity_and_fitness",
"token_type": "Bearer",
"refresh_token_expires_in": 604799
}
このレスポンスを受け取ると、Rest Client は Codelab.http の先頭で定義された @accessToken 変数と @refreshToken 変数に自動的に値を設定し、後続のリクエストで使用できるようにします。
更新トークンについて
認証コードを交換すると、レスポンスに 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. Fitbit モバイルアプリにデータを追加する
Fitbit を初めてご利用になる場合は、Fitbit アカウントにクエリを実行するデータがない可能性があります。エンドポイントの 1 つからクエリできるエクササイズ ログを手動で追加します。エクササイズを手動で記録する手順は次のとおりです。
- デバイスで Fitbit モバイルアプリを開きます。必要に応じて Fitbit アカウントにログインします。
- 画面の右下にある [+] ボタンをタップします。
- [手動で記録] セクションで [アクティビティ] をタップします。
- エクササイズのタイプ [ウォーキング] を検索して選択します。
- 今日の開始時間を入力します。
- 期間を 15 分に変更します。
- 距離は 1.0 マイルのままにします。
- [追加] をタップします。
- 画面を長押しして下にスライドし、モバイルアプリを Fitbit サーバーと同期します。指を離すと、モバイルアプリの同期が表示されます。
- [アクティビティ] セクションに、手動で記録したウォーキングのエントリが表示されます。

6. リストメソッドを使用してデータを取得する
list メソッドを呼び出すには、Codelab.http の /token エンドポイントの直下に次のコードを追加します。
### users.dataTypes.dataPoints
#####################################################
### LIST exercise
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer {{accessToken}}
Accept: application/json
このコードは list エンドポイントを呼び出し、ユーザーが Fitbit アカウントに記録した歩数を表示します。Fitbit Web API v1 の Activity Intraday エンドポイントと同様に、1 分ごとの歩数がレスポンスで返されます。
呼び出しを実行するには、GET エンドポイントの [リクエストを送信] リンクを押します。次のような応答が返されます。
{
"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": ""
}
多くのエンドポイントは、フィルタリングまたはページネーション用のクエリ パラメータをサポートしています。たとえば、エクササイズはフィルタ interval.civil_start_time をサポートしています。次のリクエストを Codelab.http に追加して、特定の期間内のエクササイズを一覧表示します。
### LIST exercise >= civil start time
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints?filter=exercise.interval.civil_start_time >= "2026-02-22T00:00:00"
Authorization: Bearer {{accessToken}}
Accept: application/json
7. 完了
お疲れさまでした
これで、基本的な Codelab は終了です。Visual Studio Code と Rest Client 拡張機能を使用して OAuth 2.0 認可をテストし、Google Health API エンドポイントを呼び出す方法を学びました。ここから、セクション List メソッドを使用してデータを取得するの冒頭で行ったように、追加のエンドポイントを追加できます。
Google Health API エコシステムと統合するアプリの開発をお楽しみください。詳細については、リファレンス ドキュメントで他の Google Health API エンドポイントを確認し、ウェブサーバー アプリケーション向けの Google OAuth 2.0 について詳細をご覧ください。