(機能拡張)リングフィットアドベンチャーの運動ログをほぼ自動的に収集・可視化する
3週間ほど前に書いた以下の記事ですが、最後に「これからやりたいこと」をいくつか挙げていました。
このうち、2つを実現することができましたので、それらを紹介するとともに、最近の運用状況について書きます。
機能拡張
1. GCP Secret Manager 対応
こちら、有り難いことに Pull Request をいただきました。これで全てのモジュールをGCPへ移行することができます、ありがとうございます。スマートな実装内容で大変勉強になりました。そして早速、次に紹介する機能で活用しました。
Get twitter configs from GCP SecretManager by kumanoryo · Pull Request #1 · tosh223/rfa · GitHub
2. Pixela で草を生やす
BigQuery へデータを登録したあとに、Pixela であらかじめ生成したグラフに草を生やすオプション機能を実装しました。curl で表現すると、以下に相当する処理です。
curl -X POST https://pixe.la/v1/users/[user]/graphs/[graph_id] -H 'X-USER-TOKEN:[token]' -d '{"date":"yyyymmdd","quantity":"1"}'
実装はこちらです。
rfa/pixela.go at main · tosh223/rfa · GitHub
user と graph_id, token は認証情報にあたりますので、Twitter認証キーと同様に、Secret Manager から読み取る仕様にしています。オプション機能としていますので、Secret Manager に認証キーを登録していない場合はスキップします。
Pixela グラフは、以下のように Notion へ埋め込んでダッシュボードと並べて表示しています。
基本的にリングフィットアドベンチャーは1日1回なので、色はもっと濃くなるように調整しよう...
運用してみての感想
個人的に心配していた Vision API ですが、想像以上に高い精度で読み取っているので驚いています。ただ、3日に1回くらいの頻度で、「これは間違っても仕方ないかな...」という読み取りミスがあるので、手作業で Replace するパターン*1を追加しています。*2
replaceStr2d := [][]string{ {"Om(", "0m("}, {"0(", "回("}, {"押しにみ", "押しこみ"}, {"スクワフット", "スクワット"}, {"- ", ""}, {" m", "m"}, {"Im(", "1m("}, }
また、目的として掲げていた「自己管理」「習慣化」ですが、いまのところ達成できているように思います。リングフィットアドベンチャーに限らず "運動" を意識する回数が明らかに増えましたし、運動ログが可視化されたことでトレーニングに偏りがあることに気づきました。*3
僕にしては長続きしているので、このまま運用を続けていこうと思います。
*1:https://github.com/tosh223/rfa/blob/7857e734c5900017678a0e3e29385280d5cbab1a/bq/csv.go#L55-L63
*2:この「最終的に人が判断する」というステップが存在する点は、MLOpsを検討する上での重要事項なのかなと
*3:肩こり解消を意識しているためか、腕や肩を動かすスキルの回数が目立っています。実際に効果を感じているので、これは続けていきたいです。一方で、腹筋・背筋を鍛えるスキルを避ける傾向にあるようです。理由はたぶんきついから