昔からFitbitを中心としたライフログやその分析が好きだったのだが、AI Agent時代になり、健康データ分析は完全に民主化されたといっていいだろう。

最近は、健康データをClaudeCodeに渡すことで毎日健康レビューをしてもらうようになったのでその記録と所感.

収集しているデータ

いま集めているものを全部並べる.

Fitbit(Google Health API)

  • 睡眠
    • 睡眠(就寝・起床時刻、時間、効率、入眠潜時、中途覚醒、起床後臥床)
    • 睡眠ステージ(deep / light / REM / wake の区間)
  • バイタル
    • HRV(RMSSD、日次と深睡眠中)
    • 呼吸数
    • SpO2(最小・平均・最大)
    • 皮膚温(相対変化と絶対値)
    • 安静時心拍(RHR)
  • 運動
    • Active Zone Minutes(fatBurn / cardio / peak 別)
    • 活動量(歩数、距離、消費カロリー、座位時間、活動強度別の時間)
    • VO2max
    • 運動セッション(開始・終了・種別・カロリー・距離・平均心拍)

タニタ体重計(HealthPlanet)

体組成データの取得.

  • 体重
  • 体脂肪率
  • 体脂肪量
  • 内臓脂肪レベル
  • 基礎代謝
  • 筋肉量
  • 推定骨量

専用デバイス計測

  • 心拍計: Morning HRV
  • 脳波計(Muse): daily IAF、α強度
  • 血圧計(収縮期、拡張期、脈拍): 中古ショップで購入した(死んだ人の遺品?)記録はHealthPlanet Appに入力.
  • 体温計: 深部体温: で計測してGoogle Health Appに手動入力

アプリ記録

  • 筋トレ記録: Hevy App
  • 食事: Cronometerに記録
  • カフェイン摂取: 専用アプリで記録

主観(Google Forms)

Google Forms で入力して、API で回収している.

  • デイリー主観スケール記録
    • 気分
    • 身体炎症
    • 脳内炎症
    • 睡眠の質
  • 気分記録(感情語、メモ、スコア. 1日に複数回記録する)
    • dailioはデータエクスポートの観点で使うのをやめた.
  • PHQ-9(うつ症状の自己記入式尺度. 週次)
  • 排便記録(ブリストルスケール): ウンログ、Google Form

環境

  • 気象(平均・最高・最低気温、湿度、気圧、降水量、夜間気温)
  • 日出・日入時刻
  • 室内環境(CO2、温度、湿度)

日次レビュースキル

Claude CodeのSkillsで daily-reviewを作成.

  • Step 1: データ取得
  • Step 2: レポート生成
  • Step 3: AIレビュー
  • Step 4: ジャーナルへ記録

Step 1: データ取得

まずはスクリプトですべてのデータを各種APIを毎朝叩くことで収集する. こういう決定的な処理はAI Agent(MCP)ではなくスクリプトがよい.

Step 2: レポート生成

現在は3つの分野でそれぞれデータ分析をPythonでして可視化したものをマークダウンで出力している。

  • body(直近7日) — 体重・筋肉量・体脂肪率・FFMI、カロリー収支(消費 − 基礎代謝 − 食事誘発性熱産生 − 運動消費)、タンパク質摂取量、運動セッション、活動時間
  • sleep(直近30日) — 睡眠時間・効率・深い睡眠と REM の割合・就寝起床時刻の規則性・睡眠負債・曜日別の傾向
  • mind(直近14日) — HRV・RHR・呼吸数・SpO2・皮膚温Δ・深部体温・血圧。ベースラインから ±1.5SD 以上ずれた値にだけ z 値を添える

しかし、数ヶ月運用してこれはほぼ見ないことがわかった。代わりに、チャットベースのテキストをフォーマットにしたがってAgentに生成させる方式がよい. このよいところは、その場で会話しながら改善することが容易だから.

いちおうAgentの分析のたたき台としてレポート生成は残してあるが、今からつくりなおすならば、Markdownレポートはすっ飛ばすだろう. きれいなグラフはあまりいらない.

Step 3: AIレビュー

Claude が3つのレポートと主観記録を読んで、日本語でレビューを書く.

読ませているのは、

  • 3つのレポート
  • 日次記録の直近7日(4指標とコメント)
  • 気分記録の直近7日
  • ジャーナル

Step 4: ジャーナルへ記録

毎日レビューをすると日々の記録をメモリに残したい。4つの仕組みを入れている.

  • STATE.md — 現在の状態の記録. 毎日、全上書き。揮発
  • ACTIONS.md — 施策の記録: 発行時に1行追記、結果が出たら1行編集。追記のみ
  • YYYY-Wxx.md — 週次記録. agent が考察を書く。毎日追記。不変
  • JOURNAL.md — 週次記録 index とその要約.

もともと週次記録だけで運用していたが、現在の状態と施策を毎日書き換えるメモリを導入したことで、検索性がよくなった.

所感

AI健康コーチをVibe Codingで自作する

わたしはFitbit=Googleをつかっているが、ライフログ関連の最近のトレンドは各プラットフォームがAIアシスタントを提供するのがトレンドだ。

ただ、その機能をつかうのは月額料金がかかる. Google Healthになると、月額1500円で他よりも高い. AI Agentに課金しているならば、自作することでコストは下げられる.

今回も全部Vibe Codingで自作している. API周りもすべてフルスクラッチしているが、そこまで工数がたいへんではない.

自分の健康データは自分で守る

最悪なことに、FitbitがGoogleに乗っ取られてしまった. 長年Fitbitをつかってきたユーザとしては悲しい限りだ. Fitbit APIもついに2026/09に廃止が決定し、データ取得はGoogle Health APIに乗り換えた.

Googleだって10年後には資金力のある別のものに乗っ取られることもありえる. このとき、自分のデータはどうなてってしまうんだろうか?こういうことがあると、データは全部自分のもとに管理して、githubにバックアップしておきたい.

自分のデータをもとに健康の知識を勉強できることは楽しい

出力されたアドバイスをもとに健康についての質問だったり、一般的な知識を深掘り質問する。即興で深掘りのデータ分析をしてもらう。改善が必要ならばここで新しいGitHub Issuesを上げて、実装もさせる.

また、自分の毎日のデータをもとに健康について勉強することができる. Youtubeとかでもライフハック系の動画はおおいが、まさに自分のデータをもとに議論したり、改善案を論文を検索して検討できることはすごい時代が来た.

認知やメンタルヘルスは生理データにはほぼ現れない、行動記録のほうが現れる

ひとつの大きな関心として、メンタルを生理からハックすることだったんだが、メンタルの調子が悪いとき、それはほとんど生理データに現れないことがわかった。

AIは息を吐くように統計的仮説検定をしてくれて、もうついていけないほどにすごい. 世間話のノリで仮説検定をするのがIQ150の世界なのか?

セオリー的には 心拍変動がストレスの指標とはいわれるんだが、メンタルがおちると睡眠時間が伸びる結果、心拍変動は改善してしまう.

逆に気づいたことは、行動記録のほうがメンタルを的確に捉えることだ. 起床や就寝時刻の乱れなど、生活リズム. おそらく、行動分析はAI Agentととても相性がいいんじゃないか?とりあえずTogglデータの収集と分析もはじめた. これは次のテーマ.

Google Form全自動作成の主観記録は便利、もう専用アプリはいらない

メンタルなどの認知的なデータは、主観記録がやはり大事になる. もうひとつAI Agentの運用でよかったのは、Google Formの作成とデータ保存までが全自動である結果、専用アプリなどを探したりすることもなくなった.

気分記録については Daylioが定番だったが、データエクスポートが面倒なので、自作したほうがよいことがわかった.

また、腸内環境もうんこ観察が一番いい気がして、うんこ記録フォームも自作した.

生体ホルモン、腸内環境、体液データが分析できない、とりあえず献血へ

いろいろライフログデータを集めておもったことは、ウェアラブルデバイスで電気的なデータはいろいろ集めることができる.

しかし、健康診断相当のことを毎日やろうとしたとき、化学系のデータが自分で毎日収集することがとても難しい. 体液の分析なのはやろうとおもえば郵送検査キットでできるが毎日ではないし、コストも高すぎる.

  • 唾液
  • 尿
  • 血液
  • 便

これを解決するために、はじめて献血に自発的に参加してみた. 献血の目的は人それぞれだろうが、献血を利用することで基本的な血液データが3ヶ月に1度の頻度で得ることができる. Webで閲覧もできる. 1

社会貢献にもなるので、いいんじゃないかな. 継続したい.


  1. 検査サービス|東京都赤十字血液センター|日本赤十字社 ↩︎