Strava MCPを使って自分のレースとトレーニングを分析させてみてトレーニング計画を作ってみた

結論から言うと、AIは「失点の所在」を数字で言い当ててきた#

結論から書きます。Strava の生データを Claude Code に繋いで、横浜往復のトレーニングライドと2025年の小松鉄人レースを分析させてみたところ、「私が来季どこで時間を取り戻せるのか」が約21分ぶんの内訳として数字で出てきました

しかも、その大半は脚力アップではなく「取りこぼしの回収」でした。一番大きな失点はバイクのパンク(約6分半)で、これは練習ゼロで取り返せる時間です。

正直に言うと、自分のレースは自分が一番わかっているつもりでした。でも、生データと公式リザルトと自分のブログを突き合わせてもらったら、思い込みを一つ訂正させられました。その過程がおもしろかったので、AIに何をどう分析させたのか、順番に残しておきます。

使ったもの: Claude Code + Strava MCP#

今回の主役は Strava MCP です。分析を担当させたのは Claude Code(モデルは Opus 4.8)で、MCP(Model Context Protocol)は AI から外部サービスのデータを呼び出すための仕組みです。これを Claude Code に繋ぐと、私の Strava アクティビティを AI が直接読めるようになります。

実は、有志が作った野良の MCP サーバーは以前から存在していました。ただ、Strava 公式の MCP が登場したのは今回が初めてです。公式が出たことで、認証まわりやデータの取り回しが一気に素直になりました。

とはいえ、正直に書くと、私の環境で実際に使えるようになるまで1週間ほど四苦八苦しました。。。認証の通し方やトークンの設定でつまずき、何度もやり直しました。一度繋がってしまえば快適なので、これから試す方はそのつもりで臨むとよいと思います。

接続を確認したところ、使えた主なツールはこんな顔ぶれでした。

ツール取れるもの
アクティビティ一覧距離・時間・速度・心拍(日付範囲指定)
単一アクティビティ詳細心拍・パワー・ラップ・セグメント・PR
時系列ストリームGPS・心拍・パワー・ケイデンス・標高の秒単位データ
ゾーン情報心拍/パワーゾーン、FTP、ランペースゾーン
ギア情報バイク・シューズの累計距離

ポイントは、AI が「アクティビティを探す → 詳細を取る → 比較する」を自分で組み立ててくれるところです。私は「4月と5月で西麻布から横浜まで3回ライドしたので分析して」と日本語で頼むだけでした。

検証1: 同じコースの3本を横並びにすると「調子の波」が見える#

まず手始めに、私がベンチマークにしている西麻布↔山下公園の往復ライド(片道約30km、国道15号メイン)を3本投げました。

  • 4/29 60.9km
  • 5/6 61.7km(みなとみらい観光あり)
  • 5/9 60.9km

全体サマリーがこちらです。FTP 225W を基準に見ています。

指標4/295/65/9
移動時間2:06:382:07:522:05:04(最速)
平均速度(移動)28.8 km/h29.0 km/h29.2 km/h
平均パワー176.8 W186.6 W179.3 W
1時間ベストパワー173 W180 W158 W
平均心拍136135(最低)138
セグメントPR476146

ここで AI が気を利かせたのは、**「3本すべてに出てくる同一区間だけで揃えて比較した」**点でした。コンディションも信号待ちも違う日同士を、生の平均値で比べても公平ではありません。そこで復路の主要区間(国道15号、横浜→品川 21.4km)でラップを揃えると、こうなりました。

  • 4/29: 50:12 / 150 W / 140 bpm
  • 5/6: 47:44 / 190 W / 142 bpm ← 最速・最高出力
  • 5/9: 49:48 / 174 W / 137 bpm

結論は「5/6 がぶっちぎりで調子が良かった」。心拍は3本で一番低いのに、パワーは一番高い。つまり同じ心拍でいちばん速く走れていた日です。メモを見たら、この日は「サドルを10mm上げた」直後でした。フィット変更がハマった回だったわけです。

同一区間(復路R15 21.4km)で揃えた3本の平均パワー。5/6が最低心拍なのに最高出力だったとわかる

逆に5/9は移動時間こそ最速ですが、前半に突っ込んで後半失速するネガティブな配分で、メモには「フロントの細かい振動が多すぎて辛い」。快適性の問題で出し切れなかった可能性が高い、と。

ここまでで一つ実感したのは、AI に分析させると「同一条件で比べる」という当たり前を勝手にやってくれることです。私が手でやると、つい平均速度だけ見て満足してしまいます。

検証2: 2025年小松鉄人を「3つの情報源」で突き合わせる#

次が本命です。2025年の小松鉄人レースを分析させました。このレースはバイク20km → 登山8km → バイク30km → ラン20kmという変則デュアスロンで、累計の獲得標高は約1,100mあります。

最初は Strava の生データだけを渡しました。すると4区間それぞれの出力や心拍を綺麗にまとめてくれたのですが、ラン区間についてこう書いてきました。

ラン: 平均心拍150・最大163で、登山では177まで上げているので心拍に余白あり。余力を残してゴールした可能性。

これ、実は間違いでした。そしてその間違いを正したのが、情報源を足したことです。

私は AI に、公式リザルト(AI Triathlon Result で見られます)と、自分で書いたレースブログの2つを追加で読ませました。3つの情報源が揃った瞬間、分析が一段深くなりました。

Strava生データ・公式リザルト・自分のブログの3つをAIに突き合わせると、生データだけの誤読が訂正される図

公式リザルトで「順位が動いた場所」が見えた#

公式記録は総合29位/102人、年代別(40-44)7位/17人。区間順位を時系列で並べると、レースの物語が一目瞭然でした。

区間タイム区間順位
バイク① 20km39:1015位 🟢
登山 8km56:5321位
バイク② 30km53:2350位 🔴
ラン 20km1:43:3639位

「バイク①で15位 → 登山で踏ん張って一時13位 → バイク②で50位に転落 → ランも取り返せず総合29位」。登山までは表彰台ペースだったのに、バイク②とランの2区間で確実に取りこぼした構図がくっきり出ました。

区間順位の推移グラフ。バイク②のパンクで50位まで転落し、ランも脚攣りで取り返せなかったことがわかる

ブログを読ませたら、AIが自分の分析を訂正した#

そして一番おもしろかったのがここです。ランの「余力を残した」という最初の読みを、AI 自身がこう訂正してきました。

⚠️ 前回の分析を訂正します。ブログで真相が判明しました。3km地点の山田峠で歩き始め、内転筋が攣りかけて10人に抜かれていました。平均心拍が150と低く見えたのは「省エネ」ではなく、歩きが平均を引き下げていたのが正解です。

その通りです。生データだけだと「心拍に余裕がある=余力を残した」と読めてしまう。でも実際は脚が攣って断続的に止まっていたから心拍が上がりきらなかった。数字は同じでも、意味は正反対でした。

このとき思ったのは、生データはあくまで結果でしかなく、「なぜそうなったか」は本人の記憶や文脈がないと埋まらない、ということです。ブログを書いておいてよかった、と心から思いました。

検証3: 分析から「2026年の優勝プラン」を引いてもらう#

弱点が数字で出たので、そのまま「年代別で優勝したい。トレーニングプランを作ってほしい」と頼みました。週6時間・平日は朝夜の短時間・山は週末のみ、という私の制約を伝えたうえで出てきたのが、この「伸びしろテーブル」です。

区間2025実績現実的な目標短縮取り戻し方
バイク①39:10(15位)維持〜38:30-0:30強み。崩さない
登山56:53(21位)〜52:00-5:00下り技術
バイク②53:23(50位)〜46:30-7:00パンク撲滅(練習不要)
ラン1:43:36(39位)〜1:33:00-10:00攣り対策+ラン耐久
合計4:13:02〜3:52約-21分

約21分の伸びしろの内訳。ラン-10分・バイク②-7分・登山-5分で、大半が取りこぼしの回収

21分のうち最大の7分が「パンク対策=練習ゼロ」というのが衝撃でした。投資対効果で並べると、優先順位はこうなります。

  1. 機材リスク撲滅(最優先) — チューブレス化、シーラント更新、タイヤ交換の自宅リハーサル。これだけで-6〜7分。
  2. ランの耐久&攣り対策 — トレイルで脚を使ったあとに20km走り切る神経筋がまだ未対応。補強筋トレ+ブリック+レース当日の補給(カフェインを忘れない仕組み化)で-10分。
  3. トレイルの下り技術 — 登りで稼いだ分を下りで返している。下り特化で-5分。

そして「週6時間・平日は朝夜の短時間・山は週末のみ」という制約に合わせて、平日=質の高い短時間、週末=土曜トレイル+日曜ブリックという型を提案してくれました。要点は「土台はある。あとは後半の維持とフィット、そして機材を詰める段階」ということです。

検証4: そのまま「14週・日別プラン」まで書かせた#

ここまで来たら、と思って「14週間のデイリープランを作って」と頼みました。W1=6/15(月)スタート、レース=9/20(日)小松鉄人。出てきたのが下のプランです。さすがにここまで具体的だと、あとはこなすだけです。

まず強度の凡例から。

内容目標
Z2有酸素ベースバイク130–165W / ラン5:40–6:00
SSTスイートスポット200–215W
THR閾値バイク220–235W / ラン4:10–4:20
VO2最大酸素バイク250–265W / ラン3:55
Tempoテンポラン4:30–4:45
RPレースペースラン5:10–5:20
STR補強筋トレ内転筋・片脚・カーフ
MOBモビリティ+体幹20分

Phase 1|基礎+弱点導入(W1–4)#

週(時間・ねらい)
W1 6/15–21・約5h・セットアップ&テストMOBFTPテスト(20分全力)60’ランベースライン(20分Tempo)45’STR導入35’トレラン90’(登り+下り意識・タイヤをチューブレス化&交換リハ)ブリック バイク40’Z2→ラン15’
W2 6/22–28・約5.5hMOBSST 2×15’@205WTempo 25’@4:40STR40’トレラン105’(下り反復)ロング走70’(5:40漸進)
W3 6/29–7/5・約6hMOBSST 3×12’@210W坂ダッシュ8×75sSTR40’トレラン120’ブリック バイク50’→ラン20’@5:20
W4 7/6–12・約4h・回復週バイク易40’Z2ラン易30’STR軽30’トレラン75’(楽に技術)ブリック短 バイク30’+ラン15’

Phase 2|専門ビルド(W5–8)#

週(時間・ねらい)
W5 7/13–19・約6hMOBTHR 2×12’@222WランInt 5×3’@3:55STR40’トレラン120’(下り全開練)ブリック バイク60’SST→ラン20’@5:15
W6 7/20–26・約6.5h・本番栄養テスト開始MOBTHR 2×15’@225WTempo 30’@4:35STR40’トレラン135’ブリック バイク60’→ラン25’(ジェル・電解質・カフェインを実走で試す)
W7 7/27–8/2・約7h・ビルドのピークMOBVO2 5×4’@255WランThr 3×8’@4:15STR45’トレラン150’(最長)ブリック バイク70’→ラン25’
W8 8/3–9・約4.5h・回復週+再測定FTP再テスト(72kgで・PWR更新)ラン易30’STR軽30’トレラン80’(楽)ブリック短50’

Phase 3|ピーク&本番シミュレーション(W9–11)#

週(時間・ねらい)
W9 8/10–16・約7hMOBTHR 3×12’@228WランInt 6×3’@3:55STR45’トレラン150’(下り)ブリック バイク75’→ラン30’
W10 8/17–23・約7hMOBVO2 6×4’@258WランThr 4×8’@4:15STR45’トレラン150’ロングブリック バイク80’→ラン35’
W11 8/24–30・約7.5h・🎯ミニ本番シミュMOBTHR 2×15’@228W易ラン35’STR軽30’本番シミュ:バイク30’→トレイル30’→バイク30’→ラン40’を連続(下り全開・栄養フルリハ・乗り換え動作も確認)易ジョグ40’回復

Phase 4|シャープ&テーパー+レース(W12–14)#

週(時間・ねらい)
W12 8/31–9/6・約5.5h・量-25%/質維持MOBTHR 2×12’@225WRP走5km@5:15+jogSTR軽35’トレラン100’(中強度+下り)ブリック バイク50’→ラン20’@RP
W13 9/7–13・約4h・テーパー量-45%バイク刺激 3×3’@230W 45’ラン20’easy+4×100m流しSTRごく軽25’トレラン60’(楽+少し下り)ブリック短 バイク30’+ラン15’@RP
W14 9/14–20・レース週休/MOBバイク2×3’@レース感覚35’ラン20’easy+3×100m流し休(機材最終チェック・タイヤ目視・補給パッキング)軽ジョグ15’+流し・現地入りコース下見+15’刺激🏁 RACE・当日プロトコル実行

運用ルール#

AI が最後に添えた注意書きが、いかにも私の弱点をわかっている内容でした。

  • 攣り兆候や強い疲労があれば、その日の高強度は短縮するか易日に差し替える。順序より「質の日を質で終える」ことを守る(内転筋リスクを優先)。
  • 火(バイク高強度)と水(ラン強度)は連日になるので、どちらかが重ければ入れ替え/間引きでよい。
  • テスト=W1・W8。栄養リハ=W6以降の週末すべて。下り技術=土曜トレイル毎回。

おまけ: プランを1枚のHTMLダッシュボードに書き出す#

ここまでの分析とプランを、そのまま「1枚の HTML ダッシュボードにまとめて」と Claude Code へ頼んでみました。すると、コードもデザインも私は一行も書いていないのに、こんなものを書き出してくれました。

Claude Codeが出力した小松鉄人2026トレーニングプランのHTMLダッシュボード。カウントダウン96日・レース当日9/20・目標FTP235Wなどが並ぶヒーロー部分

カウントダウン、目標FTP、勝負を分ける3点……と、見るだけで気分が上がる仕上がりです。14週ぶんを縦に並べると、フェーズごとに色分けされた全体像と「今どこにいるか」がひと目でわかります。

14週プラン全体のHTMLダッシュボード。フェーズごとに色分けされた週ごとのワークアウトが縦に並ぶ

テキストの表でも十分ですが、専用のUIに起こすと毎朝開く気になります。分析からプラン、見た目のいい成果物まで、対話だけで出てくるのは正直すごいと思いました。

ここまで具体的だと、もう言い訳ができません。あとは淡々と積むだけ……と言いたいところですが、実は今、それどころではありません。

検証5: 風邪で落ちた「いま」を、去年の同時期と比べる#

正直に書くと、この記事を書いている今、私は絶不調です。6月3日から風邪をひいてしまい、パフォーマンスは絶賛悪化中。プランはできたのに体が動きません。せっかくなので、この落ち込みが「どれくらいヤバいのか」を、去年の同じ時期と比べてもらいました。

「6月1日〜15日の同じ15日間で、去年と今年を比べて」と頼むと、こう出してきました。

指標2025年2026年(いま)
ランニング距離約80.5 km約9.0 km−89% 🔴
ランの負荷(Relative Effort 合計)約298約49−84%
実走バイク18kmライド+通勤ほぼゼロ(E-bikeに置換)🔴
質の高いセッション南部坂×10・14.3kmラン・10kmラン複数・テンポなし🔴
イージー走の平均ペース5:13〜5:33/km6:55〜7:04/km約25%遅い
6/3以降のラン継続12日間ゼロ🔴

数字だけ見ると真っ青ですが、AIの読みは冷静でした。「これは実力が落ちたのではなく、風邪でトレーニングが止まっているだけ」だと。

  • 去年の今頃は完全にビルド期。10kmランを何本も、坂ダッシュ(南部坂×10)、14.3kmラン、18kmライドと積めていました。
  • 今年は6/1〜6/2の短いラン(しかも7:00/kmと普段より遅い)を最後に、6/3以降はランも実走バイクもほぼ消失。残っているのはE-bike通勤と散歩だけです。アシスト自転車への置き換えは、体が省エネモードに入っているサインだと指摘されました。

なるほど、と思いました。落ち込みの正体は「実力低下」ではなく「活動そのものが12日間止まっている」こと。ベースの実力は、5月の横浜往復で186Wを出せていたデータ(前述)が証明済みです。

AIが添えた「焦るな」という結論#

ここでも分析だけで終わらず、こう整理してくれました。

  1. まず治す。これが最優先。 今は数字を取り戻す時期ではない。
  2. 14週プランは間に合う。 今日は本来W1にあたります。ただレースは9/20で、まだ約13.5週あります。最初の1〜2週を回復に充てても十分間に合うので、W1のFTPテストは今やらない
  3. 復帰は段階的に。 治ってから散歩+20〜30分のイージージョグで入り、心拍と主観で「楽に」を徹底する。復帰直後にペースが遅いのは当然なので、ペースは見ない。

健康面では、大事な注意ももらいました。発熱や咳・胸の重さなど「首から下」の症状がある間は、高強度をやらないこと(発熱中の追い込みは心筋炎のリスクがある)。鼻や喉だけの軽い症状なら散歩〜軽ジョグは可、という目安です。6/3から12日続いているので、長引いたり悪化したりするなら受診します。

復帰のタイミングは、毎朝の安静時心拍が客観指標になるそうです。普段より+5〜7拍以上高い間は、まだ回復途上。これは今朝から測り始めました。

おまけ: いまのPWRを聞いてみた#

ついでに「体重72kgで推定PWRは?」と聞いたら、FTP 225W ÷ 72kg = 約3.1 W/kg と即答でした。アマチュア中級の「しっかり踏める層」だそうです。

ただ AI が補足したのが的確で、小松鉄人はほぼ平坦〜緩斜面のバイク中心なので、PWRの絶対値より「その出力を複合疲労下でどれだけ長く維持できるか」が効く、と。実際バイク①は IF 0.89 で踏めていて、PWR はボトルネックではない。数字を出したうえで「でもそこは弱点じゃない」と言ってくれるあたりが、ただの計算機との違いだと感じました。

なお、この FTP は71kg時の測定値なので、起点を正確にするために72kgで測り直す価値がある、とも指摘されました。ごもっともです。

AIにトレーニング分析をさせて感じたこと#

良かった点と、限界の両方を正直に書いておきます。

良かった点

  • 「同一区間で揃えて比べる」「停止時間を移動時間から逆算する」といった面倒な前処理を、頼まなくても勝手にやる。
  • 区間順位を時系列に並べて「物語」にしてくれるので、どこで勝負が決まったかが直感的にわかる。
  • 強みと弱みを投資対効果順に並べてくれるので、限られた練習時間の配分を決めやすい。

限界・注意点

  • 生データだけだと誤読する。今回のラン区間がまさにそうで、文脈(自分のブログ)を足してようやく正しい解釈にたどり着きました。
  • センサー異常を見抜く必要がある。実際、5/9のライドは往路の心拍がきっかり145で張り付いていて、AI も「これはセンサー異常なので参考値」と注記していました。鵜呑みは禁物です。
  • 「優勝も射程内」のような前向きな評価は、励みにはなりますが、最後に判断するのは自分です。

要するに、AIは優秀な分析パートナーですが、文脈を与えるのは自分の仕事ということです。レースのたびにブログを残しておくのは、未来の自分(とAI)への一番のプレゼントだなと思いました。

ちなみに、こうしたレース結果のAI分析を誰でも使えるようにしたのが、私が作っているAI TRI+というサービスです。今回のように生ログを自分で繋がなくても、リザルトをアップロードするだけで弱点をあぶり出せます。

FAQ#

Q. Strava MCP の設定は難しいですか?

正直なところ、私の環境では繋がるまで1週間ほどかかりました。認証やトークンの設定でつまずいたのが原因です。ただ、一度繋がってしまえば、あとは日本語で「直近のライドを分析して」と頼むだけなので、最初の山さえ越えれば快適です。

Q. AIの分析は信用していいですか?

数字の集計や前処理は信用できます。ただし解釈は別です。今回のように生データだけだと正反対の結論になることもあるので、自分の記憶やレースメモと突き合わせるのを強くおすすめします。

Q. パワーメーターがないと意味がないですか?

いえ、心拍と速度とセグメントタイムだけでも「同一区間比較」はできます。パワーがあると精度が上がるという話で、必須ではありません。

Q. なぜブログまで読ませたのですか?

生データは「何が起きたか」は教えてくれますが「なぜ起きたか」は教えてくれません。脚が攣った、機材が壊れた、補給を忘れた——こうした文脈は本人の記録にしかないからです。

まとめ#

  • Strava MCP を Claude Code に繋ぐと、自然言語で自分のアクティビティを分析させられます。
  • 同一コースの3本比較では、AI が勝手に「同一区間で揃えて」調子の波を可視化してくれました。
  • 2025年小松鉄人を公式リザルト・Strava・自分のブログの3情報源で突き合わせると、失点が「バイクのパンク」と「ランの脚攣り」の2点に集中していると判明しました。
  • 生データだけだと「ランは余力を残した」と誤読されました。文脈を足して初めて正しい解釈にたどり着きます。
  • 来季の伸びしろは約21分。その大半は脚力ではなく「取りこぼしの回収」で、最大の7分は機材対策=練習ゼロで取り返せます。
  • 分析からそのまま、レース当日まで逆算した14週・日別トレーニングプラン(強度ターゲット付き)まで書かせられました。
  • 風邪で落ちた今の状態も去年の同時期と比べることで、「実力低下ではなく練習停止」と切り分けられました。まず治すのが最優先です。
  • AIは優秀な分析パートナーですが、文脈を与えるのは自分の仕事。レースごとにブログを残す価値を再認識しました。
この記事が役に立ったら
GitHub Sponsorsで応援できます

コメント