「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は入社2年目になるキャリア入社の社員です。センシング技術やワイヤレス技術が進化を遂げ、IoT・ヘルスケアの分野で、ウェアラブルデバイスが普及し、Apple社のApple Watch、Google社のFitbit、Samsung社のGalaxy Watch、Xiaomi社のMi Watch、Huawei社のWatch Fitなど様々なウェアラブルデバイスがグローバルに展開されています。2020年第1四半期の世界のウェアラブルデバイス出荷台数は、前年同期比29.7%増の7,258万台※1であったようです。
今回Fitbitを活用したセンシングソリューションに携わる機会がありましたので、Fitbitにより取得できるデータやそのデータを取得するApplication Programming Interface(API)、データへのアクセスを安全にやり取りするための仕組みに関してご紹介させて頂きます。
※1 IDC Japan「Worldwide Quarterly Wearable Device Tracker 2020Q1」調べ
Fitbitはウェアラブルデバイスで、腕につけることで、歩数、エネルギー消費、心拍数、睡眠時間等の健康データを収集することができ、スマートフォンのアプリケーションにて活動や運動、食事、水分補給、心電図などの情報を管理することができます。
図1. Fitbitデバイスとスマートフォンアプリケーション
Fitbitのアプリケーション開発用に公開されているAPIは、下表のとおり4つのAPIがあります。
表1. Fitbit API一覧
No. | API名 | 内容 | 備考 |
---|---|---|---|
1 | Device API | Fitbitデバイス上でのセンサー情報等を取得可能 | Fitbit OS用 |
2 | Settings API | ユーザ又はアプリケーション毎の設定が可能 | ― |
3 | Companion API | Fitbitへのアクセスが可能 | iOS/Android用 |
4 | Web API | Fitbitのユーザデータへのアクセスが可能 | ― |
Fitbitが収集したバイタルデータなどの情報を取得するには、スマートフォンとFitbitデバイスと接続し、Companion APIを使用する方法とFitbitの公式サーバと接続しWeb APIを使用する方法があります。APIの使用イメージを下図に示します。
図2. API使用イメージ
APIの中でもWeb APIを使用すると下記表の様な情報の取得・更新が可能で、現在の最新のデータやヒストリカルトレンドを取得することができます。Fitbitで取り扱うデータは、個人情報を多分に含むためセキュリティを考慮した実装が必要となります。Fitbitでは、権限の認可(Authorization)を行うためのオープンスタンダード(RFC※2)であるOAuth2.0※3を採用しています。
※2 RFCはRequest for Commentsの略称で、IETF(Internet Engineering Task Force)による技術仕様の公開形式
※3 RFCにて2012年にRFC6749、RFC6750として発行
表2. Web API種別一覧
No. | Web API種別 | 内容 |
---|---|---|
1 | Activity | 活動量に関する情報の取得・更新が可能 |
2 | Body and Weight | 体組織に関する情報の取得・更新が可能 |
3 | Devices | 保有デバイスに関する情報の取得・更新が可能 |
4 | Food and Water | 飲食に関する情報の取得・更新が可能 |
5 | Friends | Fitbitコミュニティの友人情報の取得・更新が可能 |
6 | Heart Rate | 心拍数情報の取得・更新が可能 |
7 | Sleep | 睡眠情報の取得・更新が可能 |
8 | Subscriptions | 活動量、食事、睡眠等の通知情報の取得・更新が可能 |
9 | User | ユーザ情報の取得・更新が可能 |
従来のサーバとクライアント認証(Authentication)では、サーバで認証することにより、サーバ上のデータを要求していました。サードパーティのサービスが他のサーバのデータへアクセスする際は、サードパーティのサービスにIDとパスワードを登録することが必要でした。
OAuth2.0では、サーバはサードパーティのサービスに対して機能を制限できない問題点を解決するため、IDとパスワードをサードパーティのサービスに登録せず情報を取得できるようにし、許可した機能のみサードパーティのサービスに利用できるようになります。
システムは、リソースオーナー(エンドユーザ)が、認可サーバにアクセスし、アプリケーション(OAuth Client)がリソースサーバにAPIアクセスしデータを取得する形になり、下記図・表の様なイメージになります。
表3. システム構成
No. | 構成要素 | 内容 |
---|---|---|
1 | リソースオーナー | 操作を実行する人 |
2 | クライアント | リソースサーバにアクセスするサービスまたはアプリケーション |
3 | 認可サーバ | アクセストークンの発行・トークンの検証をするサーバ |
4 | リソースサーバ | リソースに対するリクエストを受付け、レスポンスを返すサーバ |
図3. システムイメージ
OAuth2.0では認可処理のやり取りを認可処理フローとして定義されいます。RFC6749よりプロトコルフローを抜粋し、最も基本的な認可処理である認可コード付与(Authorization Code Grant)および認証を継続的に実施するトークン更新(Refresh Token)を解説します。
表4. 認可処理一覧
No. | 認可処理種別 | 備考 |
---|---|---|
1 | 認可コード付与 Authorization Code Grant |
RFC 6749 ※4 |
2 | 認可コード横取り攻撃対策を用いた認可コード付与 Authorization Code Grant Flow with PKCE |
RFC 7636 ※5 |
3 | 暗黙的認可 Implicit Grant Flow |
RFC 6749 ※4 |
4 | トークン更新 Refresh Token |
RFC 6749 ※4 |
5 | トークン無効化 Revoking Token |
RFC 6749 ※4 |
※4 RFC6749 The OAuth 2.0 Authorization Framework
※5 RFC7636 Proof Key for Code Exchange by OAuth Public Clients
図4. OAuth2.0認可処理フロー
認可コード付与は、クライアントが認可フローを必要とした際に、リソースオーナーへリソースのアクセス許可をもらうために認可要求し、認可画面を表示します。認可画面を通してリソースオーナーは認可サーバへクライアントが自身のリソースにアクセスする許可し、認可付与を返します。クライアントにリソースをアクセスする許可の要求を受けた認可サーバは、アクセストークンを返します。
図5. 認可コード付与処理フロー
トークン更新は、アクセストークンの期限が切れリソースへのアクセスエラーが発生した際に、クライアントが認可サーバへリフレッシュトークンを発行し、認可サーバは、新しいアクセストークンとリフレッシュトークンを返します。
図6. トークン更新処理フロー
パソコン上で動作するアプリケーション(クライアント)にて、Fitbit公式サーバより取得したデータを解析し画面に表示したり、異常を検出し通知することが可能です。心拍数情報を取得する場合は、Fitbit公式サーバへ下記Resource URLにアクセスしデータを取得します。このとき、取得するデータの日付やデータ間隔、開始・終了時刻のパラメータを指定することが可能です。
[Resource URL]表5. 指定パラメータ一覧
No. | パラメータ | 内容 |
---|---|---|
1 | date | 日付をフォーマットyyyy-MM-ddまたはtodayで指定します。 |
2 | detail-level | データの間隔を1secまたは1minで指定します。 |
3 | start-time | 開始時刻をフォーマットHH:mmで指定します。 |
4 | end-time | 終了時刻をフォーマットHH:mmで指定します。 |
FitbitのWeb APIにてFitbit公式サーバより心拍数情報を取得した際のデータをJSONビジュアライザで表示した画面を示します。1分毎の心拍数データの例です。
図7. WebAPI取得データ例
FitbitのWeb APIにてFitbit公式サーバより心拍数情報を取得した際のデータを解析しグラフにて表示した画面を示します。アプリケーションは、このようにFitbitから取得したデータを活用することが可能です。
図8. 心拍数データ例
ウェアラブルデバイスを活用したIoTシステムとして、Fitbitにより取得できるデータやそのデータを取得するAPI、データへのアクセスを安全にやり取りするための仕組みに関してご紹介させて頂きました。今後もIoT技術の発展により、ウェアラブルデバイスが普及し、ヘルスケアなどの分野において成長が見込まれています。今回は、Fitbitを用いた通信技術をご紹介させて頂きましたが、他のウェアラブルデバイスを活用したIoTシステムに関しても機会があればご紹介させて頂きたいと思います。
(H.M.)
関連ページへのリンク
関連するソフテックだより