(自分の)ヘルスケアとGrafana

こんにちは。この記事は[フューチャー Advent Calendar 2024](https://qiita.com/advent-calendar/2024/future)の5日目の記事です。昨日は[@bigface00](https://qiita.com/bigface00)さんの[BigQuery環境を守る！アクセス制御ことはじめ](https://qiita.com/bigface00/items/63021eec7d270e511847)でした。

年末、寒くなってくると家から全然出る気力がなくなってきますが、リモートワークが中心になっているからかもしれないと思っている最近です。
このままでは運動不足が加速してしまうので、何かしら運動をしようと思って、最近はジムに筋トレへ行ったり、ランニングをしたり、意図的に動くようにしています。
そんな時、私が役立ててるのはいろんなヘルスケアアプリで記録をすることです。例えば、ランニングした時の経路だったり、実際の心拍などを細かに記録してくれます。
その記録によって、振り返るきっかけを作るためには可視化が必要であると考えました。
そんな時、Grafanaを使えばいけるのでは？というのが今回の記事です。

今回利用するGrafanaはローカルに立てたコンテナで検証を進めます。

## 取得するデータソース

私自身、いくつかのスマホアプリで行動管理や日々のヘルスケアを管理しています。書き上げてみるだけで以下のアプリがありました。

- Strava
- Apple ヘルスケア
- Google Map
- Omron Connect

これらのうち、簡単にデータソースとして取得できそうなのはStravaとGoogle Mapですが、運動の記録という観点で今回は可視化してみようと思うので、Stravaから取得してみることにします。

## データソースに登録する

まずは、Grafanaのデータソースとして登録することから始めます。
ログイン後、サイドバーにある[Connections] > [Add new connection]へ遷移すると、Grafanaで可視化するさまざまなデータソースを選択することができます。そして、今回利用するStravaをデータソースとします。

![スクリーンショット 2024-12-04 21.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/167bbde2-8dba-739a-e60d-d04dde140bc6.png)

データソースとして追加し、設定画面までいくと、StravaのClient IDとClient Secretを入力する画面になります。他のデータソースにおいても、取得するためのシークレットを入力する画面になります。

![スクリーンショット 2024-12-04 21.56.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/75a2b312-2302-de62-34e0-f3b36d7dba82.png)

Grafanaに入力する必要のある各パラメータはStravaの https://www.strava.com/settings/api より取得することができるので、アカウントのある方はぜひAPIを利用してみてください。

シークレットを入力して、[Connect with Strava]のボタンを押すことでデータ提供の可否を問われ、OKにすることで認証が通ります。

登録を終えるとデータソース一覧に出てきます。

![スクリーンショット 2024-12-04 22.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/30041e10-99eb-a99e-88f4-0bbf921f3704.png)

## ダッシュボードを作る

ダッシュボードを作りましょう。前項のデータソースの画面で[Build a dashboard]のボタンがあるので、押下することでダッシュボードの作成画面に移れますが、今回はちょっとした一つのアクティビティを可視化してみたいので、[Add visualization]で何を可視化するか選択します。
進んでいくと、以下のような画面に進みます。

![スクリーンショット 2024-12-04 22.19.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/4f5ada2e-4af6-039e-c917-f3da4cfd343b.png)

QueryをActivities、Activity typeをRunで選択しました。その他FormatやStatについてはデフォルト値を使って、表示間隔だけ直近90日として日毎のランニングの距離を可視化できるようにしました。

![スクリーンショット 2024-12-05 15.00.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/7c1698a9-5f82-b7b7-437b-1dc4c7233454.png)

走った距離という一つのパラメータを可視化することができました。ただ、Stravaでは他に心拍数やGPSをベースとして「どこを走ったか」もデータとしては持っているのでせっかくなら可視化したいなと思いました。

## ダッシュボードのテンプレートを使う

ダッシュボード作りは、目的、用途によってさまざまな形があり、それに正解がないという話をよく聞きます。ゆえにどこまででも時間をかけることができてしまうものでもありますが、ある程度作り込んだものからスタートするだけで参考になります。
そんなとき、Grafanaは公開されたダッシュボード( https://grafana.com/grafana/dashboards/ )があったり、データソースそれぞれのテンプレートがあります。今回はStravaのテンプレートを活用していきます。

サイドバーのData sourcesからStravaのデータソースを選択し、Dashboardsタブを押下するといくつか、ダッシュボードのテンプレートが出てきます。

![スクリーンショット 2024-12-05 15.26.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/0025f58f-4360-c783-1689-ec2530f49f9c.png)

このうち、Strava Activity Overviewを使って可視化しました。
直近出場したマラソン大会のイベントを利用すると以下のような形で、イベントで取得できた各データを可視化することができました。

![スクリーンショット 2024-12-05 15.33.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382465/99393160-354b-0067-4901-d03b5a4a856d.png)

1kmごとのペースや先ほど可視化したかったGeomapベースの可視化、他にも獲得標高や心拍についてそのイベントで取得できた全ての情報を出すことができました。

## まとめ

今回は自分のヘルスケアデータを使ってGrafanaで可視化することができました。
ダッシュボードの構築は答えがないだけに、テンプレートなども用意されている点ではGrafanaをもっと使い込んでいきたいなと思いました。

## 過去記事
[Prometheus/Grafanaを使ってみる](https://future-architect.github.io/articles/20240417b/)