Garmin Connectから自分のデータを取得する~ランサムウェアへの超個人的抵抗~(その1)

# 私事からの導入で恐縮ですが
家族から禁煙外来を受診しろという圧がものすごく、先日あまり気乗りしないながらも受診したんですよ。受診の際、お医者さんから言われたのが、禁煙したいという目的がないとダメですよ的な話でした（当たり前）。
いや、禁煙したい・できたらいいなという漠然とした思いはあったんですが、どうやら私の場合はその思いが漠然としすぎていてダメなようで、もともと家族からの圧で嫌々受診したという背景もあり、これは自分なりのモチベーションを作ることが必要だな、と強く思ったのがこの記事を書くことになった背景です。

# モチベーションを作る
やっぱり20年以上たばこ吸ってるとですね、運動した時とかに心肺能力の衰えが結構深刻だったりするんですよね。個人的に禁煙できたらいいなぁという漠然とした思いはほぼこれが理由でした。
なので、この思いをより強いモチベーションに昇華すべく、活動量計なるものを購入してみました。妻にも承諾を得てしまったので退路を断つという意味もありますね。
単に心拍とかだけでなく、GPSのログとかも重要視してGarminの時計の安めのやつを購入しました。
これで禁煙前からログを取り、禁煙後しばらくたってからデータまとめて心肺機能の回復をみて、モチベーションの継続に役立てる計画です。

# Garmin Connect
Garminの何がいいかって、結構いろんなアクティビティに対応しているし、無料で使えるGarmin Connectの出来がいいんですよね。日々の情報はGarmin Connectのみでほぼ事足りているといっても過言ではないかと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/6425daba-2dd3-7184-4e22-b89c84aff6c4.png)

自分の軌跡と心拍数などをわかりやすく見ることができます。
（ほかのスマートウォッチでもできるのでしょうけど）

# やっぱりデータは手元で管理したい
そんなGarmin Connectですが、今年の夏ごろにはランサムウェアにやられたとかで、これまでのデータを見れなくなった！などの悲鳴に近い報告が各所で上がったのを覚えている方もいらっしゃるかもしれません。
結局この時の騒動はGarminが身代金？を払うことで無事データは復旧されたようですが、やはり自分のデータは自分で管理したいものです。
さらに、上述のとおりGarmin Connectは日々の情報を得るにはいいのですが、時系列の変化などを追うときにはやはりデータは手元（か、解析に適した入れ物）に入れて管理したいわけです。

# どうやってデータを取得するか？
ここでまず開発者なら「APIはないかな～」っていう発想になりますよね。
もちろんあります！
ちょっと前なら、Garmin Connect APIというものがあって、なにやら利用にあたっては$500とかしてたようなんですが、つい最近Garmin Health APIという無償版のAPIも公開されたようです。
https://developer.garmin.com/health-api/questions-and-answers-japanese/
そしたらこれを使うのが良さそう・・・なんですが、これも承認が必要なんですよね。
個人的な開発に使うにはちょっと二の足踏んじゃいます。

# Chrome拡張で作ってみる
幸いというかなんというか、アクティビティや日々の心拍データなどはGarmin Connectからダウンロードすることができます。
今回は、手始めとしてChrome拡張を使ってログイン済みのGarmin Connectから日々のヘルスケアデータを片っ端からとってくることを目指し、その下調べをしてみます。

# とりあえず取得できそうなデータを調べる
利用している機器による違いはありそうですが、Garmin Connectからダウンロード可能なのは、

- 日々の活動データ（いわゆる活動量計としての心拍数とか睡眠時間とか？のデータ）
- アクティビティ（ランニングとか、サイクリングとか特定のあらかじめプリセットされた運動をした際のデータ）

に大別されるようです。

【一日の概要（日ごとの活動データ）】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/ecec4a60-a667-8e92-e59b-248e19d59db1.png)

【アクティビティデータ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/735317e9-534d-861d-1487-8903a424947b.png)

それぞれ各ページからダウンロードのリンクを押下することができます。
URLは以下のようになっていました。
【日ごとの活動データ】

```
https://connect.garmin.com/modern/proxy/download-service/files/wellness/2020-12-03
```

【アクティビティデータ】

```
https://connect.garmin.com/modern/proxy/download-service/files/activity/5885014781
```

日ごとの活動データは日付がそのままパラメータになってるので簡単に取得できそうです。
対してアクティビティデータは、アクティビティのIDをあらかじめ知らないといけないのでやや面倒な感じです。

そしてダウンロード可能な形式ですが、
【日ごとの活動データ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/e059a49b-cf10-5530-f5a6-df1dfb6e832f.png)

【アクティビティデータ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/dda351e9-c21a-3183-f084-19ba967becae.png)

と、オリジナルというのは共通ですが、アクティビティデータは外の形式も選べるようです。
ここでオリジナルというのは.fit形式というGarminが押すバイナリファイルフォーマットということでした。.fit形式についてはいずれファイルフォーマットについてきちんと理解したいとは思いますが、とりあえずバイナリなので（そうと知らずに）エディタで開いてしまいましたが、そっ閉じしておきました。
アクティビティデータのTCXってのも自分的には初耳でしたが、こちらはエディタで開けばああなるほどと何となく理解できる（そうな）ものでした。
【TCXファイル】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/aec57ae8-8c17-5665-9a0f-6b6c304b67dc.png)
こってこてのXMLですね！

GPXについては一般的にGPS機器で昔からおなじみのファイル形式です。

ここで各ファイル形式についての推測なのですが、
fit形式は、GPSの位置情報付きであろうとなかろうと、経時的なデータの効率的な記録・転送に適した形式なのだろうと推測できます。
TCXも心拍数などを同時的に記録しているところから、おそらく似通ったファイルフォーマットなのでしょう（この辺りは後日ファイルフォーマットの解析を経て結論出します）。
そしてGPXは、互換性というか、位置情報のみのエクスポート用に用意されたファイル形式でしょう（違ってたらごめんなさい）。

したがって、今回の私の目的的には、
1. fit
2. TCX
いずれかの形式を取得するのが良さそうです。
できれば理解がしやすいTCXの方が・・・と思ったんですが、fit形式とTCX形式との間で丸め誤差のような事例の報告があったため、fit形式を採用することにしてみました。

（方針の決定ができたので、次回に続きます）

# おまけというか蛇足
Garminのスマートウォッチ、大変よくできてるな～と思うんですが、
充電コネクタが4ピンの独自規格なんですよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/471b9e8a-844f-9fa2-9036-74bb9f6e6d20.png)
なので充電ケーブルも独自のやつで、予備とか用意するの面倒だな。。。っておもったんですが、ふと気づくとこれに既視感があったんです。なにかなぁと思ったら、初期のetrexがやはり4ピンのシリアル端子だったのを思い出しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221091/15aad8a3-ada3-66c9-9208-09b8ca597c7f.png)
この4pinシリアル専用に作られた端子を専門に作って売る業者さんがいて、まとめて購入した記憶が・・・いくつかはまだ家のどこかに眠ってるはず・・・
と、どうでも良い昔話でした。