😺

Nuxt.jsでWebアプリケーション開発メモ26

に公開

概要

「最新のトレーニング」ダッシュボードガジェットの機能実装。

プロンプト26

# 命令26
- `最新のトレーニング`ダッシュボードの機能実装
# 命令26-1
    - `pages/top.vue`の`最新のトレーニング`ダッシュボードは現状モックですが、バックエンドからデータを取得して表示するようにしてください。
    - バックエンドのREST APIは実装済みのはずです。
        - `training/records/`REST APIを`latest=true`パラメータを指定して呼び出せば行けるはずです。(`date_from`と`date_to`パラメータは指定なし。)

不具合

  • 筋トレーの消費カロリー計算が明らかにおかしい。「インクラインベンチプレス 100回 (90.00kg)」で2Kcalとなっている。
    • 消費カロリー計算を設計させたChatGPTに確認したところ、代謝補正係数が計算に加味されていなとのことで、カロリー計算のドキュメントを再作成させた。
    • このドキュメントを改めてClaudeCodeに読み込ませた。

追加命令

  • api_trainingexercise(トレーニング種別マスタ)に代謝補正係数列を追加してください。
  • 追加した代謝補正係数に筋トレメニューごとの値をfixtureを作成して投入してください。
  • カロリー計算を新しい設計書通り、代謝補正係数を加味した計算にしてください。

カロリー計算ドキュメント(ChatGPT作成)

calorie_counting.md

筋トレにおける消費カロリー計算の概要

1. 計算式

1レップあたりの消費エネルギー(kcal)は以下で近似できる:

[
E_{rep} = \frac{m \times g \times h}{4184} \times c
]

  • (m):扱う重量(kg)
  • (g):重力加速度(9.8 m/s²)
  • (h):バーベルやダンベルの移動距離(m)
  • 4184:1 kcal = 4184 J
  • (c):代謝補正係数(3〜10程度、種目によって異なる)

総仕事量はレップ数・セット数を掛けて求める:

[
E_{total} = E_{rep} \times \text{reps} \times \text{sets}
]


2. 代謝補正係数(c)について

定義

  • 力学的な仕事(mgh)と実際の代謝消費の差を補正するための係数。

なぜ必要か

  • 筋肉の収縮効率は20〜25%程度しかない
  • エキセントリック動作(下ろす動作)でもATPを消費
  • バランス保持や体幹の安定化による余分な消費
  • 熱として失われる分もある

種目ごとの目安

種目分類 主な種目例 c の目安
アイソレーション(マシン系) レッグエクステンション、チェストフライ、プリーチャーカールなど 3〜5
フリーウエイトのプレス・ロウ ベンチプレス、ショルダープレス、バーベルロウなど 5〜7
下半身コンパウンド スクワット、ランジ、ブルガリアンスクワットなど 6〜8
全身爆発系 デッドリフト、クリーン、スナッチ、ジャークなど 8〜10+

3. 種目ごとの 1レップ有効移動距離(h の目安)

プレス系

  • ベンチプレス(フラット) … 0.35〜0.50 m
  • インクラインベンチプレス … 0.30〜0.45 m
  • デクラインベンチプレス … 0.30〜0.40 m
  • ダンベルベンチプレス … 0.35〜0.50 m
  • オーバーヘッドプレス(バーベル) … 0.40〜0.60 m
  • ダンベルショルダープレス … 0.45〜0.65 m

プル系(背中)

  • バーベルローイング … 0.25〜0.40 m
  • ダンベルローイング(片手) … 0.30〜0.45 m
  • 懸垂(チンアップ/プルアップ) … 0.35〜0.60 m
  • ラットプルダウン … 0.35〜0.60 m
  • シーテッドロー(ケーブル) … 0.25〜0.40 m

スクワット・下半身

  • バーベルスクワット(フル) … 0.70〜1.00 m
  • バーベルスクワット(パラレル) … 0.50〜0.70 m
  • フロントスクワット … 0.60〜0.90 m
  • ブルガリアンスクワット … 0.50〜0.80 m
  • ランジ(前進) … 0.50〜0.80 m
  • レッグプレス … 0.40〜0.70 m
  • カーフレイズ(立ち) … 0.15〜0.25 m
  • カーフレイズ(座り) … 0.10〜0.20 m

デッドリフト系

  • コンベンショナルデッドリフト … 0.45〜0.60 m
  • スモウデッドリフト … 0.35〜0.50 m
  • ルーマニアンデッドリフト … 0.40〜0.60 m
  • ハーフデッドリフト(ラックプル) … 0.20〜0.35 m

アーム系

  • バーベルカール … 0.25〜0.35 m
  • ダンベルカール(交互) … 0.25〜0.40 m
  • ハンマーカール … 0.25〜0.35 m
  • ケーブルプレスダウン(トライセプス) … 0.25〜0.35 m
  • フレンチプレス(EZバー) … 0.30〜0.45 m
  • ダンベルキックバック … 0.20〜0.30 m

胸・肩補助種目

  • ダンベルフライ(フラット) … 0.40〜0.55 m
  • インクラインダンベルフライ … 0.35〜0.50 m
  • ケーブルクロスオーバー … 0.40〜0.55 m
  • サイドレイズ(ダンベル) … 0.20〜0.30 m
  • フロントレイズ … 0.20〜0.30 m
  • リアレイズ … 0.20〜0.30 m

画面

ソース差分

バックエンド

https://github.com/tkure/prototype-backend/commit/c9900a92bc97638f94b22e261c21d81f0676098c

フロントエンド

https://github.com/tkure/prototype-frontend/commit/4a18a348e3740fe6d75ce769390211103adbe559


→ Nuxt.jsでWebアプリケーション開発メモ27

Discussion