IRON STREAK - 筋トレ継続トラッカー Duolingoのような「継続」の仕組みを筋トレに応用したWebアプリです。 Flask-Loginによるメールアドレス/パスワードでのアカウント登録・ログインに対応し、 複数人がそれぞれ自分のデータ(プロフィール・部位・種目・記録)を管理できます。
主な機能 アカウント登録/ログイン: メールアドレス+パスワードで登録。登録と同時にニックネーム・性別・ 身長・体重・目標体重を入力し、そのままホーム画面に入れます 曜日 & 部位スケジュール: トレーニングする曜日を決め、曜日ごとに鍛える部位を複数選択できる カスタムメニュー: 各部位の種目は自由に追加・編集・削除できる ストリーク(継続日数): 設定した曜日だけを対象に継続をカウント。休養日は挟んでも途切れない 今日のメニュー自動提案: 前回の達成度から重量・回数を自動で調整(プログレッシブオーバーロード) 朝/夜の体重記録: 1日2回、体重を記録できる 成長グラフ: 体重推移(朝・夜)、種目ごとの重量/回数/秒数の推移をグラフ表示 トレーニング記録: 過去に行ったトレーニングを日付ごとに一覧表示 ホーム画面にプロフィール表示: ニックネーム・身長・体重・目標体重をひと目で確認できます 画面構成 登録 (/register): メール・パスワード・ニックネーム・性別・身長・体重・目標体重を入力 ログイン (/login): メール・パスワードでログイン ホーム: ストリーク表示、プロフィール概要、今日の体重記録、今日のメニュー 成長グラフ: 体重や各種目の推移をグラフで確認 トレーニング記録: 過去の記録を日付ごとに振り返る 設定: プロフィール編集、部位の管理、曜日&部位のスケジュール、部位ごとのメニュー編集 セットアップ(VSCode) このフォルダをVSCodeで開く ターミナルで仮想環境を作成(推奨) python -m venv venv
venv\Scripts\activate
source venv/bin/activate 依存パッケージをインストール pip install -r requirements.txt アプリを起動 python app.py ブラウザで http://127.0.0.1:5000 を開く 初回は自動的に /login にリダイレクトされます 「新規登録」からアカウントを作成すると、そのままホーム画面に入ります 起動時に kintore.db (SQLite)が自動生成されます。アカウントを登録すると、そのユーザー専用の 部位(胸/背中/脚/肩/腕/腹)・代表的な種目・月水金のスケジュール例が自動で用意されますが、 「設定」タブからすべて自由に変更できます。
以前のバージョン(ログイン機能なし)から更新する場合 旧バージョンの kintore.db は新しいスキーマと互換性がありません。アプリを起動すると 自動的に kintore_old_<タイムスタンプ>.db としてリネーム保存され、新しい空のDBが作られます。 以前のデータを参照したい場合は、そのバックアップファイルを別途SQLiteツールで開いてください。
ファイル構成 kintore_app/ ├── app.py # Flaskルーティング(認証 & APIエンドポイント) ├── database.py # DBスキーマ・マイグレーション・初期データのシード ├── logic.py # 曜日ベースのストリーク計算・メニュー提案ロジック(ユーザーごと) ├── requirements.txt ├── templates/ │ ├── index.html # SPA本体(ホーム/成長グラフ/記録/設定の4タブ) │ ├── register.html # 新規登録ページ │ └── login.html # ログインページ └── static/ ├── css/style.css # デザイン(ジム/鉄をテーマにしたトークン、認証ページ含む) └── js/app.js # フロント側ロジック(fetch, Chart.js描画, タブ制御) データモデルのポイント users: メール・パスワードハッシュ・ニックネーム・性別・身長・体重・目標体重を保持 body_parts / exercises / schedule_days / schedule_parts / daily_log / workout_records / weight_log: すべて user_id を持ち、ユーザーごとにデータが分離されます パスワードは werkzeug.security でハッシュ化して保存(平文保存はしていません) セッション管理は Flask-Login の標準的なCookieセッションを使用 セキュリティに関する注意 app.py の app.secret_key は開発用の仮の値です。実際に公開・共有する場合は、 ランダムな値に変更し、環境変数などから読み込むようにしてください。 本番運用する場合は python app.py の開発サーバーではなく、gunicorn等のWSGIサーバーの利用と、 HTTPS化を推奨します。 今後拡張しやすいポイント logic.py の suggest_value() を編集すれば重量提案アルゴリズムを変更可能 パスワードリセットやメール確認機能を追加したい場合は、usersテーブルに トークン用のカラムを追加し、/register・/loginと同様の形でルートを増やせます