なぜ作ったのか
私は普段エンジニアをしていて、趣味で水泳をやっています。ただの一選手というより、チーム内で練習メニューを作る立場でもあります。指導哲学、対象選手、大会までの週数、参加者の疲労度、施設のコース長(LCM = 長水路 / SCM = 短水路)、当日のレーン数と時間… メニューを組むときに考えるべきことは山ほどあります。
これを毎週真面目にやっていたら、練習前に 30 分〜1 時間はメニュー作りに消える。おまけに「先週と被ってないか」「もっとフォーム重視の日にすればよかった」と後から気付いて直す。ふと思うわけです。これ、なんか仕組み化できそうじゃない?
ちなみに私、本業はAzure のネットワーク エンジニアで、AI エンジニアではありません。それでも弊社では、ジャンルを問わず AI を使いこなすスキルは必要になってきていて、実際に仕事でも自分の業務を AI 化するだけでなく、AI 化した業務パターンを他の人にも配れる形に整えて広げる、そういう立場でもあります。そんな日常の延長で趣味の水泳メニュー作成を AI 化してみたら、当然のように「これは自分だけのものにする話じゃないな」となりました。
「メニュー作成」自体は定型的な組み立てが多いので、そこは AI に任せてしまって、自分はコーチとしての判断に集中したい。そう考えて GitHub Copilot の Skill 機能を使って、自分の中にあるメニュー作成のナレッジをそのまま反映できる AI アシスタントを組みました。使い倒したらメニュー作成の時間が実質ゼロになった上に、生まれた時間を自分自身のトレーニングやもう一つの趣味である亀の飼育 🐢 にまで回せるようになったので、同じような立場のコーチ・メニュー担当者にも配れる形にまとめました。それが spagent です。
コンセプトはシンプルで、「あなたの分身を作る」。
- 自身の過去の経験に基づくも良し
- 一般公開されているコーチングナレッジに頼るのも良し
- 選手を育成するためのプランに合わせたメニュー作りでも良し
- 参加者全体に本日のテーマを理解してもらうメニュー作りでも良し
どんな分身を作るかは、あなた次第です。
何ができるのか
spagent が実装している主要機能を並べます。
1. 指導プロファイル(対象 × 時間軸 × 年間計画テンプレート)
「月曜マスターズ」「水曜ジュニア」のように指導対象ごとに全く別のトレーニングモデルを持てます。対象哲学(Masters / Junior / Elite / Triathlon)× 時間軸(Matveyev / Block / Undulating / Reverse)× 年間計画テンプレート(Single Peak / Four Peaks / Junior Annual …)を 1 セットで管理し、当日はグループを選ぶだけで自動適用。
2. 過去メニュー & ドリルの取り込みと傾向学習
Excel / PDF / 画像 で保管している過去メニューやドリル資料をそのまま食わせられます。分身は取り込んだメニューから:
- Zone 配分の傾向(EN2 中心? SP1 多め?)
- 頻出手法(Threshold / Descending / USRPT …)
- あなた独自のメニュー骨格(Kick/Pull を独立させる流儀、Drill 単独ブロックなし、総距離帯など)
- 想定対象選手層
を推論し、それを軸にメニューを組みます。頻出パターンで既存手法に該当しないものは「あなただけの独自メソッド」として登録もできます。
3. 長期計画に基づく手法推奨
その日の Method(Threshold / HIIT / Broken Swim …)を「なぜそれか」の根拠付きで提示します。
Phase B 強化期 6 週目 → Threshold + Descending を推奨
根拠: 週次テーマ「有酸素能力の底上げ + ペース感覚」、Zone EN2:40% と整合
4. 選手のコンディション・技術課題・AI 適応学習
怪我や疲労、技術課題(例: High Elbow Catch の進捗)を選手ごとに継続追跡。過去タイム + RPE(主観的運動強度、1〜10 段階)から AI が「A さんは高強度セットに強い」「B さんは午前より午後の方が伸びる」といった適応傾向を推論し、次回メニューに反映します。
「気付いていたけど覚えていられなかった」を、代わりに覚えていてくれる係です。
5. 練習環境の変動と大人数対応
「今日は SCM が使えなくて LCM に変更」「時間 15 分短縮」「レーン 3 → 2」といった当日の変動を毎回確認。参加人数がコース定員を超えたら群 A / 群 B の交代制を自動提案し、待機側の過ごし方(完全休憩 / ストレッチ / 軽ドリル / 陸トレ / 別の軽セット)まで対話で決めます。
6. 個別選手ごとの設定タイム自動算出
各選手の PB(自己ベスト)と直近の練習タイムから現在ペースを推定し、Phase × Zone × Method の目標 % を掛けて選手個別の設定タイムを出します。怪我・体調で補正もかかります。
7. 記録・振り返り
練習後は撮影メモの画像を AI が読み取り → タイム認識 → 全件サマリー承認後に保存。予定メニューとの差分(本数カット等)も検知して feedback.md に記録。実施ベースで索引化され、次回以降の「類似メニュー検索」で活きます。
8. 個人情報 (PII) 保護
- 選手登録時にフルネーム / 電話 / メール / 住所を検出したら警告 → 匿名化案を提示
- 画像に含まれる個人情報の自動検知(顔・名札・Exif(写真に埋め込まれる撮影情報)の GPS 位置情報 など)
-
data/sessions/plans/knowledge/custom/は最初から.gitignoreで除外 - コーチが選手や保護者から書面同意を取るためのテンプレートも同梱
コーチが「共有できる情報」と「守るべき情報」を分けて扱えるように設計しています。
どう動くか
GitHub Copilot の Skill として配布します。GitHub Copilot が使える環境(VS Code、Copilot CLI など)で、Skill をロードして対話するだけで動きます。
以下は、月曜マスターズの練習メニューを 1 本作る対話のイメージです(抜粋):
Skill: 今日は 2026-08-11(月)。予定を確認しました。
- コース: SCM
- 時間: 20:00-21:30
⚠️ 変更がなければ、そのまま進めます
コーチ: SCM が使えなくて LCM、時間は 20:15 開始で 75 分
Skill: 更新しました: LCM / 75 分
本日使うグループを選んでください
① monday-masters-advanced
② wednesday-junior-u15
コーチ: ①
Skill: monday-masters プロファイル適用。所属選手は ally, ben, carol, dave。
参加者を選んでください
コーチ: 全員 + eve, frank, gina, hana の 8 名
Skill: ⚠️ 参加 8 名 / 2 レーン × 定員 3 名 = 6 名まで。
群 A / 群 B の交代制を推奨します
コーチ: 上級 4 / 中級 4 で分割、待機は軽 Kick で
Skill: 参加者の状態:
- ally: 右肩痛、Fly 回避推奨
- ben: 前回 RPE(主観的運動強度)平均 8.5、疲労蓄積
- carol: High Elbow Catch 進行中
...
Skill: 本日の推奨手法(長期計画に基づく)
- Phase B 強化期 6 週目 → Threshold + Descending
根拠: 週次テーマ「有酸素の底上げ」、Zone EN2:40% と整合
[Base] ① Threshold ② Descending ③ Broken Swim ...
[Custom] ⑧ Threshold 200 Blocks(あなたの過去頻出パターン)
コーチ: ①⑧
Skill: 骨格を設計(あなたの骨格パターン「Kick/Pull 独立型」に沿う)
W-up 500 → Kick 300 → Pull 300 → Main 4×(200T+50R)×2 → C-down 300
設定タイム(PB(自己ベスト)と直近タイムから算出)
- ally 200Fr T 2'40 (Fly 除外)
- ben 2'55 (疲労考慮で軽め)
- carol 2'50
...
Cycle は上級 3'30 / 中級 3'45 を提案
こんな 5 分の対話で、これまで 30 分〜1 時間かけていたメニュー作成が終わります。しかも「長期計画との整合」「選手個別のコンディション」「過去メニューとの被り回避」まで、こちらが気にせずとも押さえてくれる。
フィードバック募集
現在 GitHub 公開に向けて実装中です。
- 「こんな機能があると嬉しい」
- 「自分の指導スタイルは spagent の想定と違う」
- 「個人情報保護についてこの観点は?」
などなど、コーチ・エンジニア問わずコメントいただけると嬉しいです。特に、水泳以外の競技コーチにも「同じ悩みがある」という声があれば、汎用化の参考にさせてください。
次回は「導入方法」から書きます。
(GitHub リポジトリは公開次第、記事末尾にリンクを追加します)