mcpField
F
fit-ride-studio

fit-ride-studio

github.com/op7418データ・データベース14990 回インストール11 週間前に更新
リポジトリ

fit-ride-studio について

サイクリング、ランニング、ハイキングの FIT・KML トラックをローカルで分析し、根拠に基づくレポートを作成するスキルです。ローカルの Ride Relief レポートページも準備でき、エクスポートは依頼があった場合に限ります。

主な機能

  1. 01FIT と KML のトラックをローカルで分析
  2. 02単独または複数アクティビティをレポート
  3. 03重複候補を除外し無効ファイルを報告
  4. 04利用可能な指標とデータ範囲を要約
  5. 05ローカルの Ride Relief レポートページを準備
  6. 06依頼に応じて画像や動画をエクスポート

活用シーン

  1. 01サイクリング、ランニング、ハイキングの記録確認
  2. 02複数の有効なトラックファイルをまとめて分析
  3. 03センサーの記録範囲と活動指標を確認
  4. 04共有用のアクティビティ画像や動画を作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/op7418/guizang-sports-skill --skill fit-ride-studio

インストール後、Claude Code で/fit-ride-studioを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
.gitignore
package.json
package-lock.json
README.md
index.html
vite.config.js
agents/
openai.yaml
docs/media/
.gitkeep
public/
README.txt
sample-route.json
skill-analysis.json
references/
ui-report-contract.md
location-enrichment.md
report-contract.md
export-workflow.md
samples/
demo.kml
scripts/
analyze-fit.mjs
check-install.mjs
check-report-runtime.mjs
check-export-config.mjs
prepare-report.mjs
src/
export-composer.js
data.js
export-config.js
main.js
route-scene.js
photos.js
styles.css

詳細

FIT & KML アクティビティスタジオ

ローカルのサイクリング、ランニング、ハイキングのトラックを、根拠に基づくレポートとローカルで楽しめるビジュアル体験に変換します。次の手順に従ってください。

  1. FIT/KML ファイルが提供されていない場合はファイルを依頼します。デモを希望された場合は、同梱の合成データを使用します。
  2. インストール状況を確認し、不足しているロック済みの依存関係を自動でインストールして、有効なすべてのファイルを分析します。
  3. 結果を提示し、非公開のランタイムファイルをステージングして、ローカルのブラウザーにアクセスできる場合は同梱の Ride Relief レポートページを開きます。

ユーザーが共有可能な画像、アニメーション、または動画を求めた場合に限り、エクスポート作成画面に進みます。Ride Relief はこの Skill に同梱されているウェブアプリであり、別途インストールする製品ではありません。

ワークフロー

1. トラックファイルを取得する
  • ユーザーが明示的にデモを求めた場合は、<skill-root>/samples/demo.kml を使用します。架空のデータであることを伝えてください。
  • それ以外の場合、読み取り可能な .fit または .kml が提供されていなければ、ユーザーの言語で添付ファイルまたはローカルパスを尋ねてください。中国語での例:「请把 .fit 或 .kml 拖进对话,或告诉我文件路径(例如 ~/Downloads/ride.fit);可以一次给多个。」
  • 不足している入力を依頼した後はそこで停止してください。アクティビティデータを捏造したり、プロジェクトの設定をユーザーに求めたりしないでください。
  • 少なくとも1つのファイルにアクセスできる場合は、すぐに処理を進めてください。有効なファイル数から、単一モードと集計モードを判断します。
  • ディレクトリはユーザーが対象として指定した場合に限り受け付け、直下にある FIT/KML ファイルのみを展開します。
  • トラックはローカルで処理してください。正確な GPS トラックをアップロードしたり、座標を応答に含めたりしないでください。
  • 1つのファイルが破損していても、別のトラックが有効であればバッチ処理を続行してください。スキップしたベース名を報告します。
  • 開始時刻、距離、所要時間から重複の可能性を判定します。重複は合計から除外し、該当するものを示します。
2. 準備状況を確認して分析する

<skill-root> を、この SKILL.md が含まれるディレクトリとして解決します。そのディレクトリから実行してください。

node scripts/check-install.mjs

1行のステータスを、次のように処理してください。

  • OK — 続行します。
  • NEED_INSTALL — npm ci を実行し、確認を再実行してから続行します。ロックファイルを使用し、npm install に置き換えないでください。
  • UNSUPPORTED_NODE — 報告された Node の要件を説明し、アプリを実行する前に停止します。
  • ERROR — 不足または破損している Skill ファイルを報告し、続行する前に Skill を再インストールまたは更新します。

npm ci は内部的な準備として扱い、通常のユーザーステップにはしないでください。サンドボックスによってネットワークアクセスがブロックされている場合は、環境で承認を利用できるときにネットワークの許可を求めてください。許可を利用できない場合は、ユーザーに <skill-root> から npm ci を一度実行するよう伝えてください。Skill ディレクトリが読み取り専用の場合は、書き込み可能なインストール先またはチェックアウトが必要であると説明してください。インストールを繰り返したり、成功したと主張したりしないでください。

決定論的アナライザーを実行します。

node scripts/analyze-fit.mjs --format json <fit-or-kml-path> [more-track-paths...]

すぐに読めるローカルレポートで十分な場合は --format markdown を使用します。一致するアクティビティが別々のものだとユーザーが確認した場合に限り、--keep-duplicates を使用します。フィールドの解釈、重み付けルールの確認、またはレポートの動作変更を行う場合は、references/report-contract.md を参照してください。

3. 結果を提示する

依存関係やパーサーの詳細ではなく、まず結果を示します。

1件のアクティビティについて、次の内容を提示します。

  1. 地形やルートについての簡潔な評価と、最も重要な所見。
  2. 利用可能な場合は距離と累積標高上昇量。記録で確認できる場合に限り、所要時間、速度/ペース、カロリー、一時停止も示します。
  3. スポーツに適した記録メトリクス:サイクリングでは速度/ケイデンス、ランニングではペース/歩数ケイデンス、ハイキングでは標高/累積標高上昇量。加えて、記録がある場合は心拍数、パワー、気温、勾配も示します。
  4. データ品質のカバレッジ。特にケイデンス、心拍数、パワー、勾配を確認します。
  5. 影響の大きい順に、具体的な提案を2~8件示します。

複数のアクティビティについて、次の内容を提示します。

  1. 全体の合計と期間。
  2. スポーツとソース形式を含む、アクティビティごとの表。
  3. 最長、累積標高上昇量が最大、最速のアクティビティ。ただし、時間データがあり、比較可能なアクティビティ同士に限ります。
  4. 最も古い記録から最新の記録への変化。体力が向上した証拠ではなく、所見として示します。
  5. センサーの一貫性、重複、スキップしたファイル。
  6. 全体的な提案と、特に重要な個別アクティビティの例外。

データの欠落とゼロを区別します。センサーが利用できなかった場合、ゼロとはせず、「未記録」または「カバレッジ不足」と示します。ユーザーが必要な閾値を提供し、分析を明示的に依頼しない限り、FTP、パワーゾーン、心拍ゾーン、VO₂max、トレーニング負荷、回復状態、医学的な結論を推測してはいけません。

次のルールを適用します。

  • 全体の平均速度は、総移動距離を総移動時間で割って算出します。
  • ジオメトリのみのKMLから、所要時間、速度、ペース、一時停止、写真の撮影時刻との照合を推測してはいけません。
  • 宣言されたスポーツ、距離、累積標高上昇量、累積標高下降量には、KMLのドキュメントメタデータを優先します。最長のLineStringまたはgx:Trackを使用し、ソースのベース名を保持します。
  • ケイデンス、心拍数、パワー、気温は、有効なサンプル数で重み付けします。
  • カロリーはデバイスによる推定値、気温は外気温またはデバイス温度として扱います。
  • 勾配のカバレッジが十分な場合は、距離で重み付けした勾配区分、平滑化した代表勾配P99、連続する登坂区間を最大3件報告します。デバイスの最大値には「未加工」と明記します。
  • 暑さや水分補給に関する提案は、記録された移動時間に合わせます。
  • ルートの大部分が非公開にされている場合は、共有前に警告し、最初と最後の300~500mを非表示にすることを推奨します。

根拠に基づく詳細分析を2~6項目選びます。空の項目や推測にすぎない項目は省きます。

場所を考慮したアドバイスによって結果が大きく改善する場合は、references/location-enrichment.mdを読みます。曖昧な公共の場所名を確認し、座標ではなく確認済みの名称で検索します。現在の状況を扱う場合は、時刻を明記します。過去のアクティビティを、現在そのルートが通行可能である証拠として扱ってはいけません。

4. レポートページを準備して開く

分析が正常に完了したら自動で試みますが、環境に応じて対応してください。

  1. references/ui-report-contract.md を読みます。
  2. モデルが作成したレポート契約を、書き込み可能な一時 JSON ファイルに保存します。ユーザーごとの分析を public/skill-analysis.json に保存しないでください。
  3. 一括処理の場合は、ユーザーが指定したアクティビティを選択します。それ以外の場合は、重複していないアクティビティのうち最長のものを代表ルートとして使用し、テキストでの回答は集計した内容にします。
  4. 選択したトラックと分析を、OS のプライベートな一時ディレクトリに準備します。
node scripts/prepare-report.mjs --track <selected-track> --analysis <temporary-report-json>
  1. 返された JSON オブジェクトを読み込みます。url と session を保持してください。URL は 24 時間後に期限切れとなり、古いファイルは次回の準備時に削除されます。リポジトリには何も保存されません。
  2. http://127.0.0.1:5174/ を取得し、返された HTML に <title>Route Relief と id="fit-input" の両方が含まれている場合に限り、このプロジェクトのものとして扱います。それ以外の場合は、<skill-root> から npm run dev を起動します。サーバーは strictPort を指定してポート 5174 を使用します。ポートが別のアプリケーションに使われている場合は、黙ってポートを切り替えず、競合を報告してください。
  3. 利用可能なブラウザー起動機能またはブラウザー自動化機能を使って、返された URL を開きます。URL によりトラックと分析が自動で読み込まれるため、ファイル入力の設定には頼らないでください。
  4. スクリーンショット/視覚機能がある場合は、読み込まれたソース、Fit Ride Studio Skill の分析バッジ、おすすめのレイアウト、および表示のはみ出しを確認します。視覚機能がない場合は、視覚的に確認したかのような説明はせず、開いたページをユーザーに確認してもらってください。

以下のフォールバックを誠実に適用してください。

  • エージェントが URL を開けてもページの操作を自動化できない場合は、URL を開いてください。レポートを表示するために、それ以上の操作は必要ありません。
  • ブラウザーツールがなく、ユーザーが同じマシンを使っている場合は、返された URL を伝え、手動で開くよう案内してください。
  • リモート環境またはクラウドコンテナーで、ユーザーのブラウザーからループバックアドレスにアクセスできない場合は、テキストレポートと一時分析 JSON を代わりに提供してください。ページを開いたと主張しないでください。
  • 書き込み可能な一時領域がすべてブロックされ、準備できない場合は、既存のファイル入力ワークフローに切り替え、簡潔な手順を案内してください。

Vite の起動に使ったターミナル/プロセスハンドルを記録します。完了前に、ローカルサーバーがまだ実行中かどうかと、その特定のプロセスを停止する方法(例:そのターミナルで Ctrl+C を押す)を伝えてください。広範囲にプロセスを終了するコマンドは使わないでください。可能であれば、ユーザーの作業が終わった後に、準備したレポートを削除してください。

node scripts/prepare-report.mjs --cleanup <session-id>

レポートページを開く許可は、エクスポートや 导出创作 への切り替えを許可するものではありません。

5. エクスポートのリクエストに対応する

エクスポート UI を操作する前に、references/export-workflow.md を読みます。

  • ユーザーが選択したアクティビティに従います。指定がない場合は、最新、最長、または最も登りの多いものなど、明確な優先基準を使用します。
  • ユーザーのメディアを優先します。組み込みの抽象的な背景を使う場合は、その旨を伝えます。
  • 既定では、縦横比 9:16、モーション用に H.264 MP4、アクティビティ全体のサマリーカード、ウォーターマーク有効、安全な配置とします。背景 1 枚のローテーションは 10 秒、ルート写真 1 枚あたりは 2.5 秒にします。
  • レンダリング前に、Chromium がネイティブの保存ダイアログを開く場合があり、その際はユーザー自身のクリックが必要になることを伝えます。それ以外の場合は、ブラウザーのダウンロードフォルダーが使用されます。
  • 視覚機能がある場合は、プレビューを確認します。ない場合は、境界が確認済みだと主張せず、高負荷のレンダリングを始める前にプレビューを確認するようユーザーに依頼します。
  • 静止画には PNG、アニメーション/動画には MP4 を選択します。
  • レンダリングが完了し、保存/ダウンロードが確認されるまでは、成功したと主張しないでください。

使いやすさのための既定値

  • レポートとウォーターマークではベース名を使い、絶対パスは省略します。
  • 欠損しているセンサーについては、データ品質セクションで一度だけ説明します。
  • コンポーザーを再度開くときは、現在のエクスポートレイアウトを維持します。
  • スポーツが混在している場合、「平均的なアクティビティ」という結論を 1 つにまとめないでください。
  • ユーザーファイルと生成したレポートをリポジトリに保存しないでください。実行時のコピーは OS の一時ディレクトリに置きます。npm パッケージは Skill ディレクトリに置き、アップデートで置き換えられる場合があります。

例

  • ファイルなしで「运动分析を一度してください。」→ 中国語で、ファイルをドラッグするかローカルパスを指定するよう依頼します。
  • 「デモを見せてください。」→ samples/demo.kml を使用し、合成データであることを伝えて分析し、アクセス可能になったらローカルレポートを開きます。
  • ユーザーが FIT ファイルを 1 つ提供する → 確認/インストールし、分析、提示、ステージングを行って、URL から読み込んだレポートを開きます。
  • 「この 8 回のライドをまとめて分析してください。」→ 有効な重複していないデータを分析し、別のライドが指定されていない限り、最長のライドを代表レポートとして開きます。
  • 「データを見るだけにして、エクスポートはまだしないでください。」→ 分析してレポートページを開きますが、エクスポート作成画面には進みません。
  • リモートエージェントからループバックにアクセスできない → テキストレポートと JSON を提供し、ローカルページを利用できない理由を説明します。開いたふりはしません。

コメント