0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SHOHS Run Logを作った話

0
Posted at

🚀 【個人開発】感覚頼りの部活・ランニングを科学する!高校生がPHP×MySQL×Geminiで「Run Log」を作った話

みなさん、こんにちは。趣味でWeb開発をしている高校生です。

長距離走のシリアスランナーや陸上競技部の指導者のみなさん、日々の練習管理はどうしていますか?
「月間走行距離」ばかりを追い求めて、シンスプリントや疲労骨折などの故障を繰り返したり、指導者が選手のリアルな疲労度を把握しきれずにオーバートレーニング症候群にさせてしまったり……そんな**「気合いと根性だけの練習管理」**に限界を感じたことはないでしょうか。

「指導者が選手の疲労状況を把握できない」「練習メニューが毎回紙だから事前に共有されない」「感覚だけで走り続けるせいでケガをする」

そんな現場の課題をスポーツ科学とテクノロジーで解決したくて、個人でもチームでも使える次世代のトレーニングダッシュボード 「SHOHS Run Log(ランログ)」 を開発しました!

🔗 実際のサービスはこちら: SHOHS Run Log
🔗 紹介・詳細ページはこちら: Run Log 紹介ページ


💡 プロダクトの概要:「なんとなく」を科学する

image.png

Run Logは、単に「走った距離やタイムを記録するだけ」のアプリではありません。
主観的運動強度(RPE)や睡眠モニターなどのデータから、スポーツ科学で今最も信頼されているケガ予測指標 「ACWR(Acute:Chronic Workload Ratio)」 を自動計算し、最先端AIがその日のコンディションに合わせたメニューを提案するシステムです。

Webブラウザ版に加え、練習直後でもホーム画面からワンタップでスムーズに記録できるよう、**Android専用のネイティブアプリ(APK)**も自前でビルドして配布しています。


🛠️ 技術スタック

「高校生だし、既存のノーコードツールやFirebaseだけでサクッと……」ではなく、インフラの挙動やセキュリティ、データベース設計を深く学びたかったため、地道かつ堅牢なフルスクラッチ構成を選択しました。

レイヤー 採用技術
フロントエンド HTML5, CSS3, JavaScript (Vanilla JS)
バックエンド PHP (フルスクラッチ)
データベース MySQL
生成AI Google Gemini API (AIコーチ機能)
インフラ / セキュリティ 独自ドメイン, Cloudflare, 高度WAF, DNSパケットフィルタリング

スマートウォッチ(GarminやApple Watch)を持っていない学生でも、スマホから「数秒」で入力できるようにUI/UXの導線をJavaScriptで極限までシンプルに作り込みました。


📊 コア機能の実装と裏側のロジック

1. ケガ予測指標「ACWR」と「内的負荷」の自動計算

高価なスマートウォッチの機械的なデータよりも精度を上げるため、本アプリでは**「内的負荷」**をベースに計算しています。

$$\text{内的負荷} = \text{練習時間(分)} \times \text{RPE(主観的運動強度:1〜10のキツさ)}$$

同じ10kmのジョグでも、睡眠不足の日と絶好調の日では体へのダメージは全く異なります。この内的負荷を元に、以下のロジックをMySQLとPHPで回しています。

  • 急性負荷(Acute Load):直近7日間の内的負荷の平均
  • 慢性負荷(Chronic Load):過去28日間の内的負荷の平均

この比率(急性 / 慢性)であるACWRが「0.8〜1.3」のスイートスポット(安全圏)に収まっているかを自動分析し、1.5 を超えた瞬間にケガのリスクが倍増するため、ダッシュボード上に異常検知アラートを即座に表示させます。

2. Google Geminiを搭載した「AIコーチ機能」

日々の練習量、ACWRの数値、さらには「睡眠時間」や「起床時心拍」といったライフログの変動データを統合し、Gemini APIへプロンプトとして投入しています。

  • 月曜日:インターバル(高負荷)で急性負荷が跳ね上がる。
  • 火曜日:Geminiが「急性負荷の急増」を検知し、**「今日は60分の疲労抜きジョグ(アクティブレスト)にしましょう」**と論理的なアドバイスと共にメニューを自動生成。

これにより、選手個人のモチベーション維持と安全なピーキングを両立しています。

3. 指導者の負担を劇的に減らす「チーム管理機能」

「毎回紙のノートで集計して、翌日のメニューも当日までわからない」という部活動の課題を解決するため、指導者専用のダッシュボードを実装しました。
独自の「SHOHS アカウント」をベースに、選手に招待コードを渡すだけで紐付けが完了。
指導者は一画面で**「未入力者」「ACWR異常値(ケガの危険がある選手)」「ケガの報告」**をリアルタイムにリストで把握し、事前にカレンダーで1ヶ月分のメニューを一括共有できます。


🔒 鉄壁のインフラ&セキュリティ構成

個人開発、しかも体調や睡眠時間という超プライベートなデータを扱うため、インフラの防御力には一番こだわりました。**「SHOHS 二重防御システム」**として以下の対策を施しています。

  1. Cloudflareによるエッジプロテクション
    すべての外部通信をCloudflare経由にし、DDoS攻撃や不正アクセスをオリジンサーバーに到達する前に遮断。
  2. 最先端WAF&独自不正通信防御システム×2
    SQLインジェクションやXSS等の既知の脆弱性対策はもちろん、高度なパケットフィルタリングを行い、わずかな異常通信も見逃さない計四重の盾を構築しました。

🔗 詳しくはSHOHSがお客様のデータを守る仕組みをご覧ください


🤖 Androidアプリ(APK)の配信と安全性の証明

少しでも手軽に記録してもらうためにAndroid版を用意しましたが、Google Playストアの審査バイパスや迅速なアップデート配信のため、今回は**当サイトからの直接ダウンロード(サイドロード)**という形をとりました。

ここで課題になるのが、ユーザーが感じる**「野良アプリへの不安」**です。
これを解消するため、以下のセキュリティ検証結果を全面に公開する設計にしました。

  • Google PlayプロテクトMcAfee によるウイルススキャンクリア
  • VirusTotal のスキャン結果(マルウェア・不審コード100%安全判定)をリアルタイムに再検証できる検体アップロードの導線確保
  • 位置情報の権限取得は、コンディション判定(気象条件や高度情報の連動)のみに限定し、バックグラウンド追跡は一切しないロジックの明文化

image.png

「怪しいアプリではないこと」を技術的エビデンス(VirusTotal等)を提示して証明する重要性を、この開発を通して深く学びました。


💡 開発を通して得られた知見とまとめ

最初は「自分の周りの練習環境を良くしたい」という小さな思いつきでしたが、PHPでのフルスクラッチ開発、MySQLでの動的統計処理、スポーツ科学(ACWR)のアルゴリズム実装、そしてインフラ・セキュリティの構築まで、Webアプリケーション開発に必要な全レイヤーを泥臭く経験する最高のプロジェクトになりました。

「気合いと根性」のスポーツ現場を、テクノロジーの力でもっとスマートに、そしてケガで泣くランナーを一人でも減らせるよう、これからもアップデートを続けてしていきます!

「ここをこうしたらもっとパフォーマンスが上がる」「このスタックならこういう設計もおすすめ」といったエンジニアの先輩方からのアドバイスやマサカリがあれば、ぜひコメントで教えていただけますと嬉しいです!


© 2026 SHOHS Run Log.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?