ジムでの「記憶の断片化」にさようなら:VibeCodingを使ってAndroid向けトレーニングツールを自作しました
ジムでトレーニング中、一番怖いのはスクワット後の足の震えではなく、「……さっき何セット目だっけ?」という瞬間です。
ノイズキャンセリングヘッドホンで音楽に没入していると、休憩終了のアラームを聞き逃すことがよくあります。また、私が通っているジムのように、夜になると「人であふれかえる」環境では、機器が空いておらず急遽プランを変更しなければならず、トレーニングの進捗が台無しになることもあります。紙の記録は面倒ですし、既存のアプリは機能が冗長だったり、柔軟性に欠けていたりします。
エンジニアとして、こうした「不満点」を解消する最善の方法は、もちろん「自分で作る」ことです。そこで、ある晴れた日曜日に、私は VibeCoding と Codex を活用し、Android向けフィットネスアプリ「GymPlayer」を開発しました。

なぜこの「車輪の再発明」をしたのか?
開発当初、私は包括的な機能を追い求めたわけではなく、ジムで実際に起こり、私をイライラさせる細かい問題を解決しようとしました。
- 音楽とタイマーの「二重奏」:ほとんどの音楽アプリとタイマーアプリは、同時使用すると互いに干渉します。GymPlayer の核心的な目標の一つは、ユーザーが音楽を楽しみながらも、休憩終了の合図を逃さないようにすることです。
- 柔軟なトレーニングフロー:ジムは実験室ではありません。機器の空き状況により、トレーニング順序の変更を迫られることは日常茶飯事です。GymPlayer は、複数の機器を一度に選択し、その後のトレーニングで各機器の完了進捗を動的に管理できるようにしました。
- データサイクルの完結:重量やセット数といった基本情報から、トレーニング前の血圧や脈拍、そしてトレーニング後の体組成データ(体重、体脂肪率、筋肉量など)まで、これらは頭の中だけに残しておくとすぐに忘れてしまいます。GymPlayer はローカルの Room データベースと Firebase 同期を通じて、すべてをデジタル化します。
エンジニアによる「分解」:GymPlayer の核心
これは「週末プロジェクト」ですが、技術選定においてはエンジニアとしてのこだわりを捨てず、アーキテクチャの妥協はしませんでした。中核となる技術スタックは以下の通りです。
- UI/UX の核心:Kotlin と Jetpack Compose を使用して構築し、インターフェースの応答性の高さとコードのモダンさを両立させました。
- メディア制御:Media3/ExoPlayer と MediaSession を活用し、音楽再生だけでなく、Bluetoothヘッドセットの制御コマンドにも完全対応しました。さらに重要なのは、音楽再生中に休憩カウントダウンを重ねて通知できる機能を実現し、「アラームが聞こえない」という問題を完全に解決したことです。
- データの永続化とクラウド同期:Room を使用してローカルに保存することで、オフライン状態でもトレーニングデータを安全に確保します。また、Firebase Authentication で認証し、Cloud Firestore を活用してデバイス間でのトレーニング記録の同期を実現しました。
- 状態管理:DataStore を使用して設定データを処理し、軽量かつ型安全なストレージソリューションを確保しました。
開発者の視点:これは「秩序」を構築するプロセス
このアプリの開発で最もエキサイティングだったのは、機能を実現することだけでなく、「混沌を秩序に変える」というプロセスそのものでした。
開発ロジックの全容を通じて、ユーザーログイン、機器プロファイルの同期、トレーニング中のリアルタイムインタラクション、そして最終的な身体指標の記録に至るまでの、完全な開発ロジックのループを確認できます。
今後は以下の機能も追加する予定です。
- データ可視化:Firebase上の膨大なデータを活用し、重量や体組成の変化が一目でわかるトレンドグラフを生成します。
- スマートレコメンデーション:ジムの混雑状況に基づき、最適な機器の代替案を提案します。
- データ統合:CSVやスプレッドシートへのエクスポート/インポート機能をより便利にします。
エンジニアにとって、ツールとは能力を拡張するものです。GymPlayer は単なる記録アプリではなく、ジムにおける「司令塔」であり、複雑な記録や環境要因に気を取られることなく、トレーニングそのものに集中させてくれます。
もしあなたもジムの「細かい問題」に悩まされているAndroid開発者なら、自分だけのトレーニングアシスタントを自作してみるのはいかがでしょうか。自分で書いたコードで自分の生活を最適化することほど、クールなことはありませんから。

Github: https://github.com/perfact-tang/gymplayer/

