私は普段fitbitを使用しているのですが、標準アプリでは、過去から現在まで長期的な変化がみにくい仕様になっています。
例えば、週ごと、月ごと、年ごとにはグラフ化されるのですが、直近半年のdailyの傾向などはみることができません。
運動、睡眠の習慣は、数ヶ月かけて少しずつ改善(悪化)していくものですので、中長期のdailyの変化はモニタリングできているといいなと思っていました。

そこで、fitbitAPIを使用し、私の、私(と生成AI)による、私のためのダッシュボードを作成することにしました。
ちょうど、Grok3のDeep Searchが無料で使用できるということもあり、そちらを中心に使っていきます。
アイデア探索
さっそく、Grok3のDeep Searchを使って、ダッシュボードツールの全体構想を考えてもらいます。
質問
fitbitapiを使って、自分のみが使用するモニタリングツールを作成したいです。
できるだけシンプルに、実現するためのアーキテクト案をいくつか教えてください。
回答

**直接回答**
**主なポイント:**
- Fitbit APIを使って個人用のモニタリングツールを作成するには、Streamlitやevidence.dev、ReactなどのフロントエンドとSQLiteのような簡単なデータベースを組み合わせるのが良い。
- 最も簡単な方法は、データ取得を別スクリプトで処理し、Streamlitでデータを表示するアーキテクチャ。
**Fitbit APIの概要:**
Fitbit APIは、Fitbitデバイスからステップ数、心拍数、睡眠データなどの健康情報を取得できるウェブAPIです。OAuth2認証が必要です。
**推奨アーキテクチャ(オプション2):**
- **データ取得スクリプト:** PythonスクリプトでOAuth2認証を行い、Fitbit APIからデータを取得し、SQLiteデータベースに保存。
- **Streamlitアプリ:** SQLiteデータベースに接続し、データを視覚化して表示。
- この方法はセキュリティが高く、管理が簡単で、個人利用に最適。
**驚くべき詳細:** Streamlitはデータサイエンス向けのツールですが、Fitbit APIと簡単に統合でき、モニタリングツールを迅速に構築可能([Fitbit API with Streamlit](https://medium.com/@ioannisprokopiou/a-hands-on-guide-to-fitbit-api-mongodb-and-streamlit-553e8cdd6ccd)参照)。
**実装のステップ:**
1. Fitbitデベロッパーポータル([Fitbit Developer](https://dev.fitbit.com/))でアプリを登録し、クライアントIDとシークレットを取得。
2. PythonスクリプトでOAuth2フロー(認証コードグラント)を処理し、アクセストークンを取得。
3. アクセストークンを使ってFitbit APIからデータを取得し、SQLiteに保存。
4. Streamlitアプリを作成し、データベースからデータを取得してチャートや表で表示。
**必要なツール:**
- Python、Streamlit、SQLite、python-fitbitライブラリ([python-fitbit](https://github.com/orcasgit/python-fitbit))。
---
**詳細な調査ノート**
Fitbit APIを使用して個人用のモニタリングツールを作成する際、できるだけシンプルなアーキテクチャを検討する必要があります。ユーザーはフロントエンドとしてevidence.dev、Streamlit、またはReactを検討しており、データを保存するための簡単なデータベースも必要としています。以下では、考えられるアーキテクチャ案を詳細に調査し、推奨事項を導出します。
**Fitbit APIの概要と認証**
Fitbit APIは、Fitbitトラッカーやスマートウォッチ、Ariaスケールから収集されたユーザーデータ(ステップ数、心拍数、睡眠データなど)にアクセスするためのウェブAPIを提供します([Fitbit Web API](https://dev.fitbit.com/build/reference/web-api/))。認証にはOAuth2が使用され、Authorization Code Grant Flow with PKCEが推奨されています([Fitbit OAuth2 Tutorial](https://dev.fitbit.com/build/reference/web-api/troubleshooting-guide/oauth2-tutorial/))。これは、クライアントサイドアプリでもセキュリティを確保するための方法で、アクセストークンとリフレッシュトークンを取得し、トークンの有効期限が切れた場合にリフレッシュトークンで更新します。
個人利用の場合、アプリケーションタイプを「Personal」に設定することで、開発者の自身のデータにアクセスし、詳細なイントラデイデータ(1秒や1分単位の心拍数など)を取得できます([Fitbit GitHub Example](https://github.com/yukikitayama/fitbit))。
**データ取得と保存**
データを取得するには、まずFitbitデベロッパーポータル([Fitbit Developer](https://dev.fitbit.com/))でアプリを登録し、クライアントIDとシークレットを取得する必要があります。OAuth2フローでは、ユーザーをFitbitの認証ページにリダイレクトし、許可を得た後、認証コードを交換してアクセストークンを取得します。このプロセスはPythonライブラリ「python-fitbit」([python-fitbit](https://github.com/orcasgit/python-fitbit))を使用して簡略化できます。
取得可能なデータには、アクティビティ(ステップ数、距離、カロリー)、心拍数、睡眠パターン、重量(Fitbitスケール使用時)などが含まれます([Fitbit API Endpoints](https://dev.fitbit.com/build/reference/web-api/activity/))。これらのデータを定期的に取得し、保存するため、SQLiteのような軽量なデータベースが適しています。SQLiteは管理が不要で、個人利用に最適です([SQLite Uses](https://www.sqlite.org/whentouse.html))。
データ取得の頻度は、リアルタイムか定期的なスケジュール(例:毎日や毎時)かを検討する必要があります。個人利用では、手動でトリガーするスクリプトや、cronジョブなどで自動化することも可能です。
**フロントエンドの選択**
ユーザーはevidence.dev、Streamlit、Reactをフロントエンドとして検討しています。それぞれの特性を以下にまとめます。
- **evidence.dev:** これはSQLとマークダウンでデータ製品を構築するためのオープンソースフレームワークで、BIツールのコード駆動型代替として設計されています([Evidence Docs](https://docs.evidence.dev/))。SQLiteデータベースに接続可能で、静的サイトとしてデプロイできます([Evidence Data Sources](https://docs.evidence.dev/core-concepts/data-sources/))。データ視覚化に適しており、SQLの知識があれば有効ですが、学習曲線があるかもしれません。
- **Streamlit:** Pythonベースのデータサイエンスアプリ構築ツールで、インタラクティブなウェブアプリを迅速に作成できます。Fitbit APIとの統合例もあり、MongoDBやSQLiteと組み合わせた実装が報告されています([Fitbit API with Streamlit](https://medium.com/@ioannisprokopiou/a-hands-on-guide-to-fitbit-api-mongodb-and-streamlit-553e8cdd6ccd))。視覚化ライブラリ(Matplotlib、Plotlyなど)が内蔵されており、データベース接続も簡単です。
- **React:** JavaScriptライブラリで、モダンなウェブアプリ構築に適していますが、バックエンドAPIが必要で、個人利用ではやや複雑になる可能性があります。セキュリティやスケーラビリティを重視する場合に有効ですが、セットアップが他のオプションより手間取るかもしれません。
**アーキテクチャ案の検討**
以下の4つのアーキテクチャ案を検討しました:
| **アーキテクチャ名** | **説明** | **メリット** | **デメリット** |
| --- | --- | --- | --- |
| 統合Streamlitアプリ | StreamlitでOAuth2認証、データ取得、表示を一括処理、SQLiteに保存 | 一体化で管理簡単 | トークン管理のセキュリティリスク |
| 別スクリプト+Streamlit | Pythonスクリプトでデータ取得、SQLite保存、Streamlitで表示 | セキュリティ高、モジュール性あり | コンポーネントが2つに分かれる |
| evidence.dev+別スクリプト | Pythonスクリプトでデータ取得、SQLite保存、evidence.devで表示 | データ製品向け、視覚化オプション豊富 | evidence.devの学習コスト |
| Reactフロント+バックエンドAPI | Node.jsバックエンドでデータ取得、Reactで表示 | モダンなアプリ体験、スケーラブル | セットアップ複雑、個人利用では過剰 |
個人利用でシンプルさを重視する場合、**別スクリプト+Streamlit**(オプション2)が最適です。このアーキテクチャでは、データ取得スクリプトがOAuth2認証を行い、Fitbit APIからデータを取得し、SQLiteに保存します。Streamlitアプリはデータベースに接続し、視覚化して表示します。これにより、セキュリティが向上し、管理が容易になります。
**実装詳細**
**ステップ1: Fitbitアプリ登録**
- [Fitbit Developer](https://dev.fitbit.com/)でアプリを作成し、クライアントIDとシークレットを取得。
**ステップ2: OAuth2フロー実装**
- Pythonスクリプトで「python-fitbit」ライブラリ([python-fitbit](https://github.com/orcasgit/python-fitbit))を使用し、Authorization Code Grant Flow with PKCEを実装。
- ユーザーをFitbit認証ページにリダイレクトし、アクセストークンとリフレッシュトークンを取得。
- トークンは安全に保存(例:環境変数や設定ファイル)。
**ステップ3: データ取得と保存**
- アクセストークンを使ってFitbit APIからデータを取得(例:日次ステップ数、心拍数、睡眠データ)。
- SQLiteデータベースにデータを保存。スキーマ例:
- daily_activity: date, steps, distance, calories
- heart_rate: timestamp, heart_rate_value
- sleep: date, duration, stages
- トークンの有効期限が切れた場合、リフレッシュトークンで更新。
**ステップ4: Streamlitアプリ作成**
- Streamlitアプリを作成し、SQLiteに接続。
- データベースからデータをクエリし、Streamlitのチャート(例:Plotly、Matplotlib)で視覚化。
- 例: 日次ステップ数の折れ線グラフや、睡眠時間の棒グラフ。
このアーキテクチャは、データ取得を別スクリプトで処理することで、セキュリティを確保し、Streamlitで視覚化することで使いやすさを向上させます。必要に応じて、データ取得スクリプトをcronジョブなどで定期実行することも可能です。
**他のオプションの考慮**
- **evidence.dev:** SQLite接続が可能で、SQLとマークダウンでデータ製品を構築できますが、Fitbit APIからのデータ取得スクリプトは別途必要です。視覚化オプションは豊富ですが、SQLの知識が必要です([Evidence Data Sources](https://docs.evidence.dev/core-concepts/data-sources/))。
- **React:** バックエンドAPI(例:FlaskやNode.js)が必要で、個人利用ではセットアップが複雑。モダンなUIを求める場合に適していますが、今回は簡易性を優先。
**結論**
個人利用でシンプルさを重視する場合、**別スクリプト+Streamlit**(オプション2)が最も適しています。Fitbit APIの統合例([Fitbit API with Streamlit](https://medium.com/@ioannisprokopiou/a-hands-on-guide-to-fitbit-api-mongodb-and-streamlit-553e8cdd6ccd))もあり、python-fitbitライブラリ([python-fitbit](https://github.com/orcasgit/python-fitbit))を使用することで実装が容易です。SQLiteは管理が不要で、データ保存に最適です。
---
**主要引用**
- [Fitbit Web API Reference](https://dev.fitbit.com/build/reference/web-api/)
- [Fitbit OAuth2 Tutorial](https://dev.fitbit.com/build/reference/web-api/troubleshooting-guide/oauth2-tutorial/)
- [Fitbit Developer Portal](https://dev.fitbit.com/)
- [python-fitbit GitHub](https://github.com/orcasgit/python-fitbit)
- [Evidence Documentation](https://docs.evidence.dev/)
- [Evidence Data Sources](https://docs.evidence.dev/core-concepts/data-sources/)
- [Fitbit API with Streamlit](https://medium.com/@ioannisprokopiou/a-hands-on-guide-to-fitbit-api-mongodb-and-streamlit-553e8cdd6ccd)
- [SQLite Appropriate Uses](https://www.sqlite.org/whentouse.html)
いくつかのソースを検索し、候補を探ってくれました!(詳細な回答は、トグルで折りたたみにしています。)
個人的には、Reactをつかってみたい気持ちはありましたが、ここは大人しくおすすめに従い、Streamlit + 別スクリプトでのデータ収集」のアーキテクトを選択します。
データの収集方法を決める。
次に、裏側のデータ収集の方法を教えてもらいます。
質問
データをサーバレスに収集する方法をおしえて
回答

なるほど、ここは一般的なサーバレスサービスが候補にあがっています。今回は、使い慣れた慣れたAWSを選択することにします。
続いて、さらに具体的な方法をききます。
質問
lambdaで、データを蓄積する方法をおしえて
回答

当初は、SQL Liteが候補にありましたが、何度かやり取りするうちに、LambdaでS3に蓄積する方法おすすめしてもらいました。
たしかにこれなら、データレイクとしてデータを蓄積しておけるので、将来的に様々なインターフェースに柔軟に対応できそうです。
事前準備
構成がなんとく決まったので、とりあえず以下は事前に準備しておきます。
- AWSアカウントの作成
- FitbitAPIの認証情報取得
あとは実装あるのみ
その後、何度かやりとりした結果、以下の構成で進めることにしました。各コンポーネントは、生成AIに8割程度は実装してもらっています。
(ディスカッションでは、私の意見を尊重しつつ、提案もしてくれる、なんとも優秀なメンバーと働いている気分でした)
- Streamlit
- Lambda
- FItbitAPIを使用し、毎日データをS3へアップロードする。
- Secreat Maneger
- FItbitAPIの認証情報を保管
- リフレッシュトークンは、Lambdaによって更新される。
- S3
- Athena
- S3のデータを外部テーブルとして、Streamlitから読み込ませる。
- Terraform
- AWSの構成を管理する。
- IAMロールの作成をはじめ、すべてのインフラ環境を作成してもらう。

成果物をgithubにあげ、READMEも書いてもらいます。
以下は私のwebアプリのgithubです。ここにアクセスし、READMEを書いてください。
内容は、アーキテクト全体についてと、使用している技術についてです。
https://github.com/koy0208/fitbit-streamlit
完成したREADME
こんなコメントもつけてくれています。

ついに完成!!

こちらが完成形です。これぐらいシンプルに、中長期的な傾向が一目でわかるのがほしかったんです!
まさにイメージ通り
モニタリングの指標は、睡眠時間、歩数、低強度運動時間、中強度運動時間の4つにしぼり、直近1週間の平均値と、任意の期間の推移を表示しています。
毎日更新され、過去から現在までの傾向を30日移動平均とともにみることができるので、
睡眠、運動習慣がどのように変化するかモニタリングすることができます。
まとめ
構想から、最終アウトプットの完成までは、(合間にちょこちょこ作業して、)およそ2〜3日程度だったかと思います。
作りたいもののイメージさえあれば、形のあるものができる良い時代になりましたね!
次は、Clineとかをつかってみたいものです。
最後に、Grok3より
読者の皆様へ
このブログ記事をご覧いただき、ありがとうございます!
紹介されている、Fitbitのデータを活用したダッシュボード構築の方法は、健康管理やデータ分析に役立つ実践的な内容が詰まっています。StreamlitやAWS S3を使った丁寧な解説は、初心者から上級者まで幅広く参考になるはずです。
私もこの記事の執筆を少しばかりサポートできたことを嬉しく思います。データ分析や可視化は、技術的な知識だけでなく、試行錯誤を重ねることでどんどん素晴らしいものに仕上がっていきます。ぜひこの記事を参考に、Fitbitのデータを活用して、自分だけのオリジナルダッシュボードを作ってみてください!
もし、構築の途中で疑問や困ったことが出てきたら、気軽に質問してください。皆様のデータ分析の旅が楽しく、実り多いものになることを心から願っています!
成果物はこちら
github.com