Apple WatchとChatGPTで実現!還暦からのスイミングデータ分析ライフ

執筆者:

カテゴリ:

20251013
毎週日曜の午前中、近所のコナミスポーツクラブで1時間半ほど泳ぐのが、ここ数年のライフワーク。中学・高校時代は水泳部でしたが、特に運動が得意というわけでもない。それでも還暦を過ぎた今も、こうして水に入る時間は、自分にとって欠かせないリズム。
Apple Watch で水泳データを記録。でも…見にくい?
泳ぐときには Apple Watch を身につけ、水泳のアクティビティを記録。iPhoneの「アクティビティ」アプリで運動データを振り返ることができるけど、これがどうにも読みづらい。
—— もっと具体的に、自分の泳ぎを数値としてしっかり分析したい。
—— ラップごとのタイムや泳法、SWOLFなど、詳細データが欲しい。
と、以前から思っていました。
「Healthデータを自力で解析」に一度は挑んだけれど…
一度、Xcodeを使って Apple の HealthKit API 機能を試してみた。公式ドキュメントを読み込み、XMLデータの仕様も調べたが、どうにもデータの扱いが難しく、当時は分析できずに挫折…。夢は断念したままだった。
ChatGPTで再挑戦!Emacs上で“会話しながら”プログラミング
最近、Pythonでデータ分析をする機会が増えていて、ChatGPT や Copilot を使ってアイデアからコードを書く流れにも慣れてきた。そこで、思い切ってもう一度スイミングデータの解析に挑戦してみることに。
今回は、Emacs 上で `chatgpt-shell` を使ってプログラムを対話的に開発。まさに「ChatGPTと話しながら作る」感じで、遊び心満載のトライアル。
ステップ①:まずはiPhoneのHealthデータをMacに取り出す
最初に、iPhoneに保存されているHealthデータをエクスポートする方法をChatGPTに質問。その手順は正確で、あっという間に必要なデータを手元のMacに取り込むことに成功。
ステップ②:水泳アクティビティのラップごとデータが見たい!
ChatGPTに「水泳アクティビティを分析したい」と相談すると、すぐに解析用のPythonスクリプトを提案してくれた。
でも、自分が欲しかったのは、ラップ単位の詳細分析。つまり、タイム、泳法、SWOLFなど1ラップごとのデータが知りたい。そう伝えると、そこにもきちんと対応してくれた。
ちゃんと動く!すごい!
ステップ③:でも25m単位のデータ?これは少し違う…
出力されたリストを見ると、25mごとのラップ…。私は25mプールを折り返すスタイルで泳いでいるので、実質的には50mが1ラップのつもり。ところがApple Watchとしては、休憩なのか折り返しなのかを判断できていない。「折り返し地点を認識させて、50m単位にできる?」とChatGPTにぶつけたところ、すぐに対応!この当たりから、要件を言って、改修したscruptを受け取り、それを実行して確認する、のサイクルを繰り返すようになったので、
Visual Studio Code + Github Copilot に切り替えました。
– 50mごとの集計
– 休憩時間(break time)の評価
– 見やすい時間・数値フォーマットへの整形
といった要望にも次々答えてた。
ステップ④:ついに関数化〜クラス設計、GitHub公開まで!
「もう少し保守性の高いコードにしたい」と伝えてみたら、試作状態だったコードが、関数で整理され、クラス構造が導入され、なんと自動テスト込みで綺麗にリファクタリング。
さらには「GitHubに公開したい」と言ったら、ただ `git push` するだけではなく、
– `README.md` の自動生成
– 必要なライセンス・構成ファイルの提案
– プロジェクトディレクトリの整理
までサポートしてくれた。
最後には、ChatGPTからこんなメッセージまで。
> 「Data Swimmer としてがんばってください!」
いやはや、本当にすごい時代になったものだ。
成果物はこちら!
作成したスクリプトと解析ツールをGitHubで公開。
■apple-health-swimming-analysis

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です