Stravaデータとジムの写真をコーディングエージェントでトレーニングレポートに変換
著者はStravaのワークアウトデータとジムのホワイトボード写真を、Claude Codeをビジョンレイヤーとして活用して組み合わせ、半年間の振り返りインフォグラフィックを作成しました。データ取得、画像処理、JSON説明の生成、ポスター作成までのパイプライン全体を示し、AIが個人のフィットネスデータ統合に役立つ実例を紹介しています。
今年に入ってから、私のワークアウトとランニングの習慣は順調で、半年間の振り返りインフォグラフィックを作りたいと思いました。ただそれだけの素朴な動機ですが、実現までの過程には興味深い技術的チャレンジがありました。この記事はチュートリアルというより、Stravaとコーディングエージェントを使って思い通りのものができた経緯を手短に紹介します。
最終的なインフォグラフィックは満足のいくものでしたが、面白いのはStravaの数字だけではこのストーリーを完全に語れない点です。
データ、ジムの写真、そしてパイプライン
私はSamsung Fit 3でワークアウトを記録し、Stravaアプリでランニングを管理しています。フィットネストラッカーのデータは定期的にStravaと同期され、Stravaはアクティビティタイプ(ワークアウト/ランニング)、距離、時間、標高、日付などの基本メタデータを持っています。
しかし重要なのは、私のジムセッションの多くは投稿に添付した写真で構成されていることです。それらはジムのホワイトボードに書かれたその日のトレーニングメニューを撮影したもので、実際のセッション構成(動作、重点部位、ストレングスデイ、モビリティデイ、またはその中間の違い)が写っています。Stravaは「ワークアウトをした」ことしか認識しないため、写真データを活用する必要がありました。プロジェクトの一部は、画像抽出と解析の小さなパイプラインになりました。核となるアイデアは、Stravaの構造化データと、普段何気なく投稿に添付していた画像のコンテキストを組み合わせることです。
Stravaアクティビティ+写真を取得 → ローカルキャッシュ → エージェントがジムボード写真を読み取り処理 → JSON形式の説明 → HTMLインフォグラフィック → PNGポスター
上記のパイプラインはいくつかの簡単なPythonスクリプトで構成されています。写真が既にダウンロードされていれば該当スクリプトはスキップ、画像が既に処理済みなら再処理しない、抽出結果がおかしければ該当JSONファイルを削除して再生成する、というリジューム可能な設計です。
コーディングエージェントで視覚タスクを処理
Claude Codeの画像読み取り機能が便利なビジョンレイヤーとして機能しました。スクリプトはStravaの写真をダウンロードし、まだJSONが関連付けられていない画像をリストアップします。該当するジムボード写真ごとに、エージェントがワークアウトを説明する小さなJSONファイルを作成します。例:
{ "type": "workout", "exercises": [ { "name": "Goblet squat", "sets": 4, "reps": "8-10", "weight": "24kg", "muscle_groups": ["legs"] } ], "notes": "optional" }
個人プロジェクトとしては、このエージェント介入型のワークフローは迅速かつ簡単でした。JSON説明が生成されればその画像は処理済みと見なされ、視覚ステップが中断可能で修正も容易です。
ちょっとした分類で大きな効果
Stravaのアクティビティラベルは完全には統一されていませんでした。ストレングスセッションが「weight training」だったり、単に「workout」だったり、モビリティセッションも「workout」と表示されることがありました。そこでコードは、Stravaのアクティビティタイプ、アクティビティタイトル、抽出した写真データを組み合わせて、ストレングス、モビリティ、ランニング、スイミング、ヨガなどを判別します。これで複雑な分類プロジェクトにすることなく、正確なポスターを作成できました。
Strava MCPを試す
最近リリースされたStrava MCPサーバーを試してみましたが、アクティビティメタデータだけが必要なら便利かもしれませんが、写真の取得ができないためこのプロジェクトには不向きでした。
まとめ
これはAIが、以前なら時間がなくてできなかったことを実現させてくれた良い例です。コードはこちらにあります:[analyticalmonk/strava-reporting](https://github.com/analyticalmonk/strava-reporting)。おそらく最も簡単な活用法はリポジトリをクローンし、READMEをコーディングエージェントで読ませ、設定を更新し、自分のStravaデータに合わせてレポートを整形してもらうことです。
私にとっての出力はインフォグラフィックでしたが、皆さんにとっては年間ランニングレビュー、サイクリングサマリー、レース準備ログ、あるいはもっと見栄えの良い個人フィットネスレポートになるかもしれません。
次はローカルモデルでパーソナライズされたフィットネスエージェントを構築したいと考えています。もしこのプロジェクトを発展させたり、フィットネス/健康関連のエージェントワークフローをお持ちでしたら、ぜひ教えてください!
草稿を読んでくれたAnkitaに感謝します。