※本記事は2026年7月時点の情報をもとにした構想です。Home Assistant、Codex、各種健康アプリの仕様変更により、設定方法や利用できる機能が変わる可能性があります。
(注)本記事の内容は正確性を保証するものではない。
(2026年7月25日 追記)YouTube動画を追加しました。 https://youtu.be/-GJqdWWnJP4

はじめに
下記の記事では、Home Assistantに保存した体重、体脂肪率、睡眠時間、歩数などをCodexに分析させ、毎週の生活習慣を振り返る仕組みを考えました。
しかし、体重や体脂肪率だけでは、食生活について具体的な提案を行うには情報が不足します。
たとえば、体重が増えたとしても、Home Assistantに体組成データしかなければ、次の違いは分かりません。
- 夕食の量が多かった
- 夕食時刻が遅かった
- 間食が続いた
- 外食が多かった
- 水分量が一時的に変化した
- 活動量や睡眠時間が減った
体重の増加だけを見て、「食事量を減らしましょう」と提案するのは適切ではありません。
そこで今回は、食事の内容を細かく記録するのではなく、食事時刻、食事量、献立の分類などを簡単に記録し、体組成データや生活データと組み合わせます。
そのうえでCodexに、次のような処理を行わせます。
- 食生活の傾向を整理する
- 体重や体脂肪率との関係を仮説として示す
- 翌週に見直す食習慣を一つ選ぶ
- 予定や生活状況に合った献立を提案する
- 提案を買い物リストへつなげる
本記事では、この仕組みの構成と実現方法を考えます。
今回作りたい仕組み
全体構成は次のとおりです。
体重計・体組成計
↓
Home Assistant
├─ 体重
├─ 体脂肪率
├─ 筋肉量
├─ 睡眠時間
├─ 歩数
├─ 在宅時間
├─ 天気
└─ カレンダー
+
簡単な食事記録
├─ 食事時刻
├─ 食事量
├─ 主食量
├─ 献立分類
├─ 間食
└─ 飲酒
↓
Pythonで集計
├─ 7日・28日平均
├─ 食事時刻の集計
├─ 献立分類の回数
├─ 間食日数
└─ 前週との比較
↓
Codexで分析
├─ 食生活の振り返り
├─ 体組成との関係を仮説化
├─ 翌週の重点項目を一つ選択
├─ 献立候補を作成
└─ 買い物候補を作成
↓
Home Assistant
├─ ダッシュボード
├─ スマートフォン通知
├─ To-doリスト
└─ 次回評価日の記録
ポイントは、料理名やカロリーを毎回細かく入力しなくても利用できるようにすることです。
食事記録が負担になると、分析に必要なデータが集まらなくなります。
そのため、記録項目を少なくし、音声やボタンで短時間に入力できる構成にします。
体組成データだけでは献立を判断できない
体組成計から得られる情報は、食生活の結果を振り返る材料にはなります。
たとえば、次のようなデータです。
- 体重
- 体脂肪率
- 脂肪量
- 筋肉量
- 水分量
- 内臓脂肪
- 基礎代謝に関連する指標
ただし、これらは食事内容そのものではありません。
体脂肪率が上がったからといって、次のどれが原因かは体組成計だけでは分かりません。
- 食事量が多かった
- 間食が増えた
- 外食が続いた
- 活動量が減った
- 睡眠不足が続いた
- 測定条件が違った
そのため、Codexには次のような判断をさせないようにします。
体重が増えたので、ご飯の量を減らしましょう。
代わりに、記録された食事と生活データから、次のように表現させます。
今週は夕食が21時以降になった日が4日あり、そのうち3日で間食も記録されています。同じ期間に歩数が先週より少なくなっています。夕食時刻と間食が重なったことが、体重増加と同時に見られました。
ここでも、原因と断定せず、同時に見られた傾向として扱います。
最低限記録したい食事情報
すべての食品名や栄養素を記録する必要はありません。
最初は次の5項目程度で十分です。
| 記録項目 | 入力例 | 分析に使う目的 |
|---|---|---|
| 食事の種類 | 朝食、昼食、夕食 | どの食事を見直すか判断する |
| 食事時刻 | 20時10分 | 遅い夕食との関係を見る |
| 食事量 | 少なめ、普通、多め | 食事量の傾向を見る |
| 献立分類 | 魚、肉、麺、丼、揚げ物、外食 | メニューの偏りを見る |
| 間食 | なし、少なめ、多め | 間食頻度との関係を見る |
余裕があれば、次の項目も追加できます。
- 主食量
- 野菜の有無
- 汁物の有無
- 飲酒
- 外食か自炊か
- 食後の満足度
- 調理の負担
- 食材の在庫
ただし、項目を増やしすぎると入力が続かなくなります。
最初は、次のような簡単な記録を目標にします。
夕食、20時10分、量は普通、焼き魚、ご飯少なめ、間食なし。
食品名ではなく献立分類で記録する
料理名を毎回正確に登録すると、表記がばらばらになります。
たとえば次の料理は、すべて魚料理に分類できます。
- サバの塩焼き
- 鮭のムニエル
- アジの開き
- ぶりの照り焼き
Codexに分析させるためには、料理名をそのまま保存するだけでなく、一定の分類を付ける方が扱いやすくなります。
献立分類の例
| 分類 | 献立例 |
|---|---|
| 魚 | 焼き魚、煮魚、刺身 |
| 肉 | 焼き肉、鶏肉料理、豚肉料理 |
| 卵・大豆 | 卵料理、豆腐、納豆 |
| 麺 | うどん、そば、ラーメン、パスタ |
| 丼・カレー | 牛丼、親子丼、カレー |
| 揚げ物 | とんかつ、唐揚げ、天ぷら |
| 鍋・汁物 | 鍋料理、具だくさんスープ |
| 外食 | レストラン、弁当、総菜 |
| 軽食 | おにぎり、パン、サンドイッチ |
一つの食事に複数の分類を付けても構いません。
たとえば、
焼き魚、冷ややっこ、みそ汁、ご飯
であれば、次のように記録できます。
{
"categories": [
"fish",
"soy",
"soup"
]
}
献立分類の例として、「魚、肉、卵・大豆、麺、丼・カレー、揚げ物、鍋・汁物、外食、軽食」を挙げられていますが、これらは、偏りの有無を確認するための分類ということであれば、これらの例でなくてもいいかと思いますが、具体例として、これらの例をあげた理由を教えてください
これらを挙げた理由は、栄養学的に厳密な分類だからではなく、食事を簡単に記録しながら、生活上の偏りを見つけやすい例だからです。
| 分類 | 挙げた理由 |
|---|---|
| 魚、肉、卵・大豆 | 主菜となる食品の偏りを見るため |
| 麺、丼・カレー | 主食中心の一品料理が続いていないかを見るため |
| 揚げ物 | 調理方法の偏りを見るため |
| 鍋・汁物 | 野菜や複数食材を取り入れやすい献立を区別するため |
| 外食 | 自炊とは食事量・時刻・内容が変わりやすいため |
| 軽食 | 通常の食事より簡単な内容で済ませた回数を見るため |
ただし、これらは食品、料理形式、調理方法、食事場所が混在した暫定的な分類です。
より正確に分析するなら、次のように分類軸を分ける方が適切です。
- 主菜:魚、肉、卵、大豆
- 主食:ご飯、パン、麺
- 調理法:焼く、煮る、蒸す、揚げる
- 食事形態:自炊、総菜、弁当、外食
- 構成:主菜あり、副菜あり、汁物あり
したがって、元の例は「簡単に記録を始めるための分かりやすい例」であり、良い食事を判定するための固定的な基準ではありません。
良い食事とは偏りがない食事のことだという前提ですか。良い食事の定義を教えてください。例えば、目標体重に近づく食事とか、身体の状態が変化しない食事とか、年齢・身長に応じた適正体重を保てる食事とかです。
「良い食事=偏りがない食事」だけではありません。偏りの少なさは、良い食事を構成する条件の一つです。
WHOは健康的な食事の基本を、次の4点で示しています。
- 必要な栄養を満たす
- エネルギーや栄養素のバランスが取れている
- 過剰になりやすいものを適度に抑える
- 多様な食品を含む
さらに、安全であり、年齢、活動量、生活環境などに合っていることも必要です。(世界保健機関)
「良い食事」の定義
次のように定義するのが適切です。
本人の健康目標に合い、必要な栄養と筋肉・体力を保ちながら、体重や体組成を望ましい方向へ導き、無理なく継続できる食事。
目標によって評価は変わります。
| 本人の目標 | 良い食事の評価 |
|---|---|
| 現状を維持したい | 体重・体組成・体調が適切な範囲で安定する |
| 体重を減らしたい | 目標へ緩やかに近づき、筋肉量を大きく減らさない |
| 筋肉を増やしたい | 体重だけでなく、筋肉量や活動能力が向上する |
| やせを防ぎたい | 必要なエネルギーを確保し、体重や筋肉量を維持する |
| 生活習慣を改善したい | 塩分、間食、食事時刻など、対象項目が改善する |
体重だけでは判断できない
「目標体重に近づいた」だけでは、必ずしも良い食事とはいえません。
体重が減っても筋肉量まで減っている場合があるためです。
反対に、「身体の状態が変化しない食事」も、現在の体脂肪率が高い、筋肉量が少ないなどの場合は、必ずしも望ましいとは限りません。
厚生労働省は、エネルギー摂取と消費のバランスを見る指標としてBMIを用いていますが、年齢別の目標BMIはあくまで参考範囲としています。
65~74歳では21.5~24.9が参考範囲ですが、体組成や健康状態も合わせて評価する必要があります。
したがって、AIに献立を評価させる際に、体重、体脂肪率、筋肉量、活動量、体調、本人の目標を組み合わせる方針にするのがよいでしょう。
コーヒーや紅茶など飲料の扱い
飲料(コーヒーや紅茶など)はどのように扱えばいいですか。間食に入れるべきですか
無糖のコーヒーや紅茶は、基本的に間食へ入れず、「飲料」として別に記録する方が分析しやすいです。
| 飲料 | 扱い |
|---|---|
| 水、無糖のお茶、ブラックコーヒー | 飲料として記録。通常は間食に含めない |
| 砂糖・シロップ入り飲料 | 飲料として記録し、糖分ありを付ける |
| カフェラテ、ミルクティー | 飲料として記録し、乳類・糖分の有無を付ける |
| ジュース、甘い清涼飲料 | 飲料として記録。必要なら間食相当として集計 |
| 酒類 | 「飲酒」として別分類 |
本記事では、次の項目を追加するとよいでしょう。
飲料:水/お茶/コーヒー/甘い飲料/酒類
砂糖:なし/あり
時刻:摂取時刻
特にコーヒーや紅茶は、食事量よりもカフェインの摂取時刻と睡眠との関係を分析する目的で記録するのが有効です。
睡眠との関係などから、コーヒーや紅茶を飲まない方がいい時間帯とかありますか。
また、飲んだ方がいい時間帯とかありますか
睡眠への影響を抑えるなら、就寝予定の6~8時間前から、カフェイン入りのコーヒーや紅茶を避けるのが実用的です。
カフェインは量と個人差によって影響が変わり、就寝6時間前の摂取でも睡眠時間を短くした研究があります。
より慎重に見る研究では、通常のコーヒー1杯程度でも約9時間空ける目安が示されています。(PubMed)
たとえば23時に寝る場合は、最後のカフェイン飲料を15~17時までにするとよいでしょう。
眠りにくい人は昼食後までにします。
飲む時間帯としては、眠気を抑えたい朝から早い午後が適しています。
ただし、健康のために必ず飲む必要はありません。
カフェインへの感受性には大きな個人差があります。(U.S. Food and Drug Administration)
なお、紅茶にもカフェインがあります。
目安として、フィルターコーヒー200mLは約90mg、紅茶220mLは約50mgですが、商品や抽出方法で変わります。(欧州食品安全機関)
Home Assistantには「飲料の種類・時刻・カフェインあり/なし」を記録し、入眠までの時間や総睡眠時間との関係を本人のデータで確認する方法が適しています。
夜はカフェインレスコーヒーやノンカフェインのお茶へ替えます。
1日の最後のコーヒーを飲む時間を変えて、入眠までの時間や総睡眠時間との関係を本人のデータで確認してみるのも有効かもしれない。最後のコーヒーが夕食までというのがきつい。私の場合、床につく2時間前までというのが現実的な妥協点か。
食事記録をHome Assistantへ入力する方法
入力方法は一つに限定せず、生活場面に応じて使い分ける方が便利です。
方法1:Home Assistantのダッシュボード
Home Assistantに入力用のヘルパーを作ります。
たとえば次の項目です。
input_select.meal_type
input_select.meal_portion
input_select.main_dish_category
input_select.staple_portion
input_select.snack_amount
input_boolean.ate_out
input_datetime.meal_time
ダッシュボードにボタンや選択欄を配置し、食後に入力します。
利点
- Home Assistantだけで完結する
- 選択肢が固定され、表記がそろう
- 家族でも操作しやすい
- 自動化へつなげやすい
弱点
- 毎回スマートフォンや画面を開く必要がある
- 項目が多いと入力が面倒になる
方法2:iPhoneのショートカット
iPhoneのショートカットで、順番に質問します。
食事の種類は?
↓
食事量は?
↓
主な献立は?
↓
間食はあった?
↓
Home Assistantへ送信
音声入力も利用できます。
たとえばSiriから、
夕食を記録。
と実行し、質問に答えていく形です。
ショートカットからHome AssistantのWebhookを呼び出し、JSON形式で送信できます。
{
"meal": "dinner",
"time": "20:10",
"portion": "normal",
"main_category": "fish",
"staple": "small",
"snack": "none"
}
方法3:音声でまとめて入力する
最も入力負担が少ないのは、食事内容を一文で話す方法です。
例:
夕食、8時10分、量は普通、焼き魚とみそ汁、ご飯は少なめ、間食なし。
音声認識結果をCodexや別の処理へ渡し、構造化します。
{
"meal": "dinner",
"time": "20:10",
"portion": "normal",
"categories": [
"fish",
"soup"
],
"staple": "small",
"snack": false
}
ただし、AIによる音声内容の解釈では、聞き間違いや分類ミスが起きる可能性があります。
入力後にHome Assistantから、
夕食、20時10分、量は普通、魚料理、主食少なめ、間食なしで記録しました。
と読み上げたり、スマートフォンへ通知したりすると確認できます。
方法4:TickTickへ記録する
食事内容をTickTickへ記録し、Codexが定期的に読み取る方法も考えられます。
例:
食事記録:夕食 20:10 普通 魚 ご飯少 間食なし
TickTickを普段から使っている場合は、新しいアプリを開く必要がありません。
ただし、Home Assistantのセンサーとして直接扱うには、TickTickのデータを取得して整形する処理が別途必要です。
そのため、最初はHome Assistantへ直接保存し、TickTickは買い物リストや実行タスクに利用する方が構成しやすいでしょう。
「方法2:iPhoneのショートカット」の方法が一番手間なく入力できる方法のようだ。各質問に対する選択肢を用意しておき、それを選択してだけにしたい。
食事記録の保存形式
食事記録は、Home Assistantのエンティティだけでなく、JSONやデータベースにも保存しておくと長期分析に使いやすくなります。
1回分の記録例
{
"recorded_at": "2026-07-24T20:15:00+09:00",
"meal": "dinner",
"meal_time": "20:10",
"portion": "normal",
"categories": [
"fish",
"soy",
"soup"
],
"staple": "small",
"snack": "none",
"alcohol": false,
"eating_out": false,
"note": "焼き魚、冷ややっこ、みそ汁"
}
週次分析用の集計例
{
"period": {
"start": "2026-07-20",
"end": "2026-07-26"
},
"meal_summary": {
"dinner_after_21_count": 3,
"large_dinner_count": 2,
"snack_days": 4,
"fish_meals": 3,
"fried_food_meals": 2,
"eating_out_meals": 2
},
"body": {
"weight_7d_average": 68.4,
"previous_weight_7d_average": 68.1,
"body_fat_7d_average": 22.1
},
"lifestyle": {
"sleep_average_hours": 6.0,
"steps_average": 4300,
"late_return_days": 3
}
}
Codexには、この集計済みデータを渡します。
Codexに行わせる分析
Codexには、食事内容を見て自由に献立を考えさせるのではなく、分析の順番を固定します。
1.食生活の事実を整理する
例:
- 夕食が21時以降になった日が3日
- 間食した日が4日
- 魚料理が3回
- 揚げ物が2回
- 外食が2回
- 平均歩数が先週より15%減少
2.体組成の変化を確認する
例:
- 平均体重が先週より0.3kg増加
- 体脂肪率はほぼ変化なし
- 筋肉量は測定データ不足
- 測定日数は7日中5日
3.関連しそうな組み合わせを探す
例:
- 遅い夕食と間食が同じ日に重なっている
- 外食した日の翌朝は測定していない
- 雨の日に在宅時間が増え、間食も増えている
- 睡眠時間が短い日に夕食量が多い傾向がある
4.仮説の信頼度を評価する
例:
| 信頼度 | 判断基準 |
|---|---|
| 高い | 同じ傾向が複数週で繰り返されている |
| 中程度 | 今週と過去の一部で同じ傾向がある |
| 低い | 1~2回だけ見られた |
| 判断不能 | データ不足、記録漏れが多い |
5.翌週の重点項目を一つ選ぶ
候補例:
- 夕食時刻
- 間食
- 食事量
- 主食量
- 外食頻度
- 野菜や汁物の追加
- 料理の種類
- 食事ではなく睡眠や活動
Codexには、一度に複数の変更を提案させません。
献立に対する提案例の1つに、「野菜や汁物を追加する」というのがありますが、野菜や汁物とはどういうものだと考えていますか。偏りがあるかどうかの判断に使うだけですか
「野菜や汁物を追加する」は、偏りを数えるためだけではなく、主食・主菜だけでは不足しやすい要素を補うための提案例です。
ここでいう「野菜」は、サラダだけでなく、温野菜、煮物、おひたし、きのこ・海藻を含む副菜などを想定しています。
「汁物」は、みそ汁やスープそのものではなく、野菜、豆腐、きのこ、海藻などを取り入れやすい料理として扱っています。
ただし、次のような単純判定は適切ではありません。
- 野菜があれば良い食事
- 汁物があれば良い食事
- 毎食必ず追加する
たとえば、主菜に野菜が十分含まれていれば副菜を追加する必要はありません。
また、具の少ない汁物や塩分の多い汁物を、無条件に良いとは評価しません。
本記事では、次のように表現する方が正確です。
主食・主菜だけの食事が続いている場合は、野菜、きのこ、海藻などを含む副菜や具だくさんの汁物を、無理のない範囲で追加する候補を示す。
つまり、「野菜・汁物の有無」は偏りを見つける材料の一つであり、最終的には食事全体の内容と本人の目標から判断するという位置付けです。
iPhoneのショートカットで食事記録をHome Assistantへ入力する方法
次の構成が分かりやすく、食事を送信するたびにHome Assistantの履歴へ残せます。
iPhoneショートカット
↓ JSONをPOST
Home Assistant Webhook
↓
「最新の食事記録」センサーを更新
↓
Recorderに履歴保存
↓
CodexがMCPまたは履歴APIで分析
1.Home Assistant側の設定
configuration.yamlへ次を追加します。
template:
- triggers:
- trigger: webhook
webhook_id: meal_record_a7f3c9e2
allowed_methods:
- POST
local_only: true
sensor:
- name: "最新の食事記録"
unique_id: latest_meal_record
device_class: timestamp
# 毎回異なる状態にして、1食ごとの履歴を残す
state: "{{ now().isoformat() }}"
attributes:
meal: >
{{ trigger.json.meal | default('不明', true) }}
meal_time: >
{{ trigger.json.meal_time | default(now().isoformat(), true) }}
portion: >
{{ trigger.json.portion | default('不明', true) }}
category: >
{{ trigger.json.category | default('不明', true) }}
staple: >
{{ trigger.json.staple | default('不明', true) }}
snack: >
{{ trigger.json.snack | default('なし', true) }}
note: >
{{ trigger.json.note | default('', true) }}
meal_record_a7f3c9e2は例です。推測されにくい独自の文字列へ変更してください。
Home AssistantはWebhookへ送られたJSONをtrigger.jsonから取得できます。
また、Webhookでトリガーされるテンプレートセンサーを作り、受信内容を状態や属性として保存できます。(Home Assistant)
設定後、構成を確認してHome Assistantを再起動します。次のエンティティが作成されます。
sensor.zui_xin_no_shi_shi_ji_lu
実際のエンティティIDはHome Assistant側で確認してください。
2.iPhoneショートカットの全体構成
ショートカット名を「食事を記録」とします。
食事の種類を選択
↓
食事量を選択
↓
献立分類を選択
↓
主食量を選択
↓
間食を選択
↓
料理内容を音声または文字で入力
↓
JSON形式でWebhookへ送信
↓
完了通知
3.食事の種類を選択
「リスト」アクションを追加し、次を登録します。
朝食
昼食
夕食
間食
続いて「リストから選択」を追加します。
結果を変数「食事種類」に設定します。
4.食事量を選択
次の「リスト」を作ります。
少なめ
普通
多め
「リストから選択」の結果を、変数「食事量」に設定します。
5.献立分類を選択
簡単な試作では、主な分類を一つだけ選びます。
魚
肉
卵・大豆
麺
丼・カレー
揚げ物
鍋・汁物
外食
軽食
その他
選択結果を変数「献立分類」に設定します。
複数分類を記録する方式は、基本構成が動いてから追加する方が簡単です。
6.主食量を選択
次のリストを作ります。
なし
少なめ
普通
多め
選択結果を変数「主食量」に設定します。
7.間食を選択
次のリストを作ります。
なし
少なめ
多め
選択結果を変数「間食」に設定します。
ここでいう間食は、その食事より前に食べたものではなく、たとえば夕食の記録時なら「夕食後の間食予定」ではなく、その日にすでに行った間食として扱う方が分かりやすいでしょう。
8.料理内容を入力
「テキストを入力」または「テキストを音声入力」を追加します。
質問文は次のようにします。
食べた料理を簡単に入力してください
入力例:
サバの塩焼き、冷ややっこ、みそ汁、ご飯
結果を変数「料理メモ」に設定します。
省略できるように、入力を任意にしても構いません。
9.現在時刻を取得
「現在の日付」を追加します。
続いて「日付をフォーマット」を追加し、形式を「ISO 8601」にします。
結果を変数「食事時刻」に設定します。
送信例は次のようになります。
2026-07-25T19:40:00+09:00
10.WebhookのURLを設定
「URL」アクションを追加し、次を入力します。
http://homeassistant.local:8123/api/webhook/meal_record_a7f3c9e2
IPアドレスを使う場合は、たとえば次のようになります。
http://192.168.1.100:8123/api/webhook/meal_record_a7f3c9e2
Webhookの標準形式は次のとおりです。(Home Assistant)
http://Home Assistantのアドレス:8123/api/webhook/Webhook ID
11.JSONを送信
「URLの内容を取得」アクションを追加し、「詳細を表示」を開きます。
次のように設定します。
| 項目 | 設定 |
|---|---|
| 方法 | POST |
| 要求本文 | JSON |
| URL | 直前のURL |
| ヘッダー | 通常は追加不要 |
JSON本文へ次のキーを追加します。
| キー | 値 |
|---|---|
meal | 変数「食事種類」 |
meal_time | 変数「食事時刻」 |
portion | 変数「食事量」 |
category | 変数「献立分類」 |
staple | 変数「主食量」 |
snack | 変数「間食」 |
note | 変数「料理メモ」 |
Appleの「URLの内容を取得」は、POSTを選ぶと要求本文としてJSON、フォーム、ファイルを指定でき、本文の値にショートカット内の変数を使用できます。(Appleサポート)
実際には次のJSONが送られます。
{
"meal": "夕食",
"meal_time": "2026-07-25T19:40:00+09:00",
"portion": "普通",
"category": "魚",
"staple": "少なめ",
"snack": "なし",
"note": "サバの塩焼き、冷ややっこ、みそ汁、ご飯"
}
12.完了通知を表示
最後に「通知を表示」を追加します。
夕食をHome Assistantに記録しました
通知内の「夕食」は変数「食事種類」に置き換えます。
ショートカットの完成形
1. リスト[朝食、昼食、夕食、間食]
2. リストから選択
3. 変数「食事種類」に設定
4. リスト[少なめ、普通、多め]
5. リストから選択
6. 変数「食事量」に設定
7. 献立分類のリスト
8. リストから選択
9. 変数「献立分類」に設定
10. 主食量のリスト
11. リストから選択
12. 変数「主食量」に設定
13. 間食のリスト
14. リストから選択
15. 変数「間食」に設定
16. テキストを音声入力
17. 変数「料理メモ」に設定
18. 現在の日付
19. 日付をISO 8601形式でフォーマット
20. 変数「食事時刻」に設定
21. URL
22. URLの内容を取得
・POST
・本文:JSON
・各変数を設定
23. 通知を表示
外出先から送信する場合
local_only: trueでは、基本的に自宅ネットワーク内またはNabu CasaのクラウドWebhook経由で使用します。
外部から直接アクセスさせる場合は、HTTPSによる外部アクセス環境を用意し、local_only: falseへ変更する必要があります。(Home Assistant)
Webhookはアクセストークンを使用せず、Webhook IDを知っていること自体が認証に相当します。
そのため、Webhook IDはパスワードと同様に扱い、ブログ記事や画面写真には実際の文字列を載せないようにします。(Home Assistant)
この構成では、Webhookを受信するたびにセンサーの状態が受信時刻へ変わるため、Recorderの対象になっていれば、各食事が個別の状態履歴として保存されます。
属性には、その時点の食事種類、量、分類、主食量、間食、料理メモが記録されます。
「減らす」以外の提案も認める
AIに食生活の改善を求めると、食事量や主食を減らす提案に偏る可能性があります。
そこで、選択できる提案の種類をあらかじめ決めます。
- 現状を維持する
- 食事時刻を変える
- 食事を抜かない
- 食事量を少し減らす
- 食事量を少し増やす
- 主食量を調整する
- 魚・肉・大豆製品の構成を変える
- 野菜や汁物を追加する
- 間食の回数を変える
- 調理方法を変える
- 外食時の選び方を変える
- 食事ではなく睡眠を優先する
- 食事ではなく活動量を見直す
- 今週は変更しない
たとえば体重が少し増えていても、体脂肪率に変化がなく、水分量や測定時刻に違いがある場合は、次のように判断できます。
今週は食事量を変更せず、測定条件をそろえてもう1週間確認する。
一方、体重が減っていて筋肉量も低下している場合は、追加の食事制限を提案しないようにします。
献立提案に使う情報
献立を提案する場合は、体組成データだけでなく、生活予定を確認します。
| 情報 | 献立提案への使い方 |
|---|---|
| 帰宅予定時刻 | 遅い日は短時間で作れる献立 |
| 翌日の予定 | 外出が多い日は食事量を減らしすぎない |
| 天気 | 雨の日は買い物不要の在庫献立 |
| 在宅・外出予定 | 在宅日は間食を計画化 |
| 睡眠時間 | 睡眠不足の日は複雑な調理を避ける |
| 歩数・活動量 | 活動量が少ない日は軽めの献立候補 |
| 冷蔵庫の在庫 | 使い切りを優先 |
| 過去の成功献立 | 同じ生活条件で再利用 |
| 調理時間 | 10分、20分、30分などで選択 |
| 予算 | 買い足しが少ない献立を優先 |
たとえば、Googleカレンダーに「帰宅が遅い予定」が入っている場合は、次のような提案ができます。
水曜日は帰宅が21時頃になる予定です。調理時間が短く、過去に同じ条件で継続できた「焼き魚、冷ややっこ、具だくさんみそ汁、ご飯少なめ」を候補にします。
成功献立ライブラリを作る
AIに毎回新しい献立を考えさせるより、過去にうまくいった献立を再利用する方が実用的です。
成功献立として保存する条件を決めます。
- 調理負担が小さい
- 食後の間食が少なかった
- 同じ献立を再度選んだ
- 体重や体脂肪率が大きく悪化していない
- 食材が入手しやすい
- 本人が「また食べたい」と評価した
- 帰宅が遅い日でも実行できた
保存例
{
"menu_id": "fish_soup_001",
"name": "焼き魚と具だくさんみそ汁",
"categories": [
"fish",
"soy",
"soup"
],
"cooking_minutes": 20,
"difficulty": "easy",
"good_for": [
"late_return",
"low_activity_day"
],
"ingredients": [
"魚",
"豆腐",
"野菜",
"みそ",
"ご飯"
],
"rating": 4,
"repeat_count": 3
}
Codexは、新しい献立を毎回作るのではなく、まず成功献立ライブラリから候補を探します。
献立を3件程度に絞る
候補が多すぎると選べなくなります。
Codexには、次の3種類を一つずつ出させる方法が分かりやすいでしょう。
| 候補 | 内容 |
|---|---|
| 最も簡単 | 調理時間と手間が少ない |
| バランス重視 | 主菜、副菜、汁物を組み合わせる |
| 在庫優先 | 家にある食材を優先する |
出力例:
{
"weekly_focus": "21時以降の間食を減らす",
"menu_suggestions": [
{
"type": "quick",
"menu": "冷ややっこ、卵スープ、小さめのおにぎり",
"reason": "帰宅が遅い日に短時間で用意できる"
},
{
"type": "balanced",
"menu": "焼き魚、野菜のみそ汁、ご飯少なめ",
"reason": "過去に同じ条件で継続できた"
},
{
"type": "inventory",
"menu": "冷凍野菜と鶏肉の蒸し料理",
"reason": "買い足しが少なく、雨の日でも実行しやすい"
}
]
}
買い物リストへつなげる
献立が決まったら、必要な食材をHome AssistantやTickTickの買い物リストへ追加できます。
(補足)Codexは、TickTickとMCPを介して連携できているので、Codexで、食材をタスクとしてTickTickに登録することができる。
Codexが献立候補を作成
↓
利用者が一つ選択
↓
不足する食材を抽出
↓
買い物リストへ追加
ただし、Codexが在庫を正確に把握していない状態で、自動的にすべて追加すると重複する可能性があります。
最初は、Home Assistantの通知で確認します。
来週の候補として「焼き魚、冷ややっこ、野菜のみそ汁」を選びました。魚、豆腐、葉物野菜を買い物リストへ追加しますか。
確認後に追加する方が安全です。
冷蔵庫の在庫をどう管理するか
食材在庫を完全に自動管理するのは難しいため、最初は大まかな分類だけでも十分です。
例:
- 魚あり
- 肉あり
- 卵あり
- 豆腐あり
- 葉物野菜あり
- 冷凍野菜あり
- ご飯あり
- みそ汁の材料あり
Home Assistantの入力ヘルパーを使って、在庫の有無だけ管理します。
input_boolean.stock_fish
input_boolean.stock_meat
input_boolean.stock_egg
input_boolean.stock_tofu
input_boolean.stock_frozen_vegetables
細かい個数や賞味期限まで管理しようとすると負担が大きくなるため、献立候補を絞るための補助情報として使います。
毎日・毎週・毎月の処理
毎日の処理
毎日は食事記録の確認を中心にします。
- 食事時刻を記録したか
- 夕食後に間食したか
- 入力漏れがないか
- 翌日の予定に合わせた献立候補が必要か
毎日、体重に応じて食事内容を変更する必要はありません。
毎週の処理
毎週の分析を中心にします。
- 体重・体脂肪率の週平均
- 夕食時刻
- 間食日数
- 外食回数
- 献立分類の偏り
- 睡眠・歩数
- 前回提案の達成度
そのうえで、翌週の重点項目を一つ決めます。
毎月の処理
毎月は本人特有の傾向を確認します。
- 遅い夕食が多い週の傾向
- 外食が続いた後の変化
- 間食と在宅時間の関係
- 雨の日と献立の関係
- 継続しやすかった献立
- 負担が大きく中止した提案
Codexの定期実行タスク
週次分析はCodexの定期実行タスクで行えます。
たとえば、毎週日曜日の午後6時に実行します。
毎週日曜日18時に、食生活分析を実行する。
1. Home Assistantから過去28日分の体重、体脂肪率、
睡眠、歩数、在宅時間を取得する
2. 食事記録から時刻、量、献立分類、間食を集計する
3. 直近7日と前週を比較する
4. 観察できた事実と仮説を分ける
5. 食事だけを原因と断定しない
6. 翌週に変更する内容を一つだけ選ぶ
7. 実行しやすい献立候補を3件提示する
8. 過去の成功献立を優先する
9. 買い物候補を作成する
10. 結果をJSONとMarkdownで保存し、
Home Assistantへ要約を送信する
食事の集計や回数計算はPythonで行い、Codexには集計済みデータを渡します。
Codexに守らせるルール
食生活に関する提案では、次のルールを設定します。
・医療上の食事療法を提案しない
・病名や健康状態を推定しない
・カロリーや栄養素を根拠なく断定しない
・単日の体重増減だけで食事量を変更しない
・食事記録が少ない場合は判断を保留する
・一度に変更する内容は一つだけにする
・食事を抜く提案をしない
・極端な糖質制限や脂質制限を提案しない
・体重減少と筋肉量低下が重なる場合は、
追加の食事制限を避ける
・本人の予定、調理時間、在庫を優先する
・現状維持も有効な提案として認める
・提案の根拠と信頼度を必ず示す
持病、アレルギー、服薬などに関係する献立は、AIだけで判断させません。
週次レポートの例
{
"assessment": "体重はほぼ横ばい、食事時刻がやや遅い",
"observations": [
"夕食が21時以降になった日が4日ありました",
"そのうち3日で間食が記録されました",
"平均歩数は先週より18%少なくなりました",
"体脂肪率の週平均には大きな変化がありません"
],
"hypothesis": "活動量が少ない週に、遅い夕食と間食が重なった可能性があります",
"confidence": "medium",
"weekly_focus": "21時以降の間食を週2回以内にする",
"reason": "夕食量を変更するより、対象を一つに絞って実行しやすいためです",
"menu_suggestions": [
"焼き魚、冷ややっこ、野菜のみそ汁、ご飯少なめ",
"鶏肉と野菜の蒸し料理、ご飯普通",
"具だくさんスープ、卵料理、小さめのおにぎり"
],
"avoid": "前日の体重だけを理由に夕食量を急に減らさない",
"review_after_days": 7
}
Home Assistantでは、次のように表示します。
| 表示項目 | 内容 |
|---|---|
| 今週の評価 | 体重はほぼ横ばい、食事時刻がやや遅い |
| 今週試すこと | 21時以降の間食を週2回以内にする |
| 信頼度 | 中程度 |
| 献立候補 | 3件 |
| 次回評価 | 7日後 |
Home Assistantらしい献立提案
Home Assistantを利用すると、健康アプリにはない条件を献立へ反映できます。
帰宅が遅い日
帰宅予定が21時以降
+
翌朝の予定が早い
↓
短時間で準備できる軽めの献立
提案例:
冷ややっこ、卵スープ、小さめのおにぎり。
雨で買い物へ行きにくい日
雨
+
外出予定なし
+
冷凍野菜あり
↓
在庫中心の献立
提案例:
冷凍野菜と鶏肉の蒸し料理、みそ汁、ご飯。
活動量が多かった日
歩数が多い
+
帰宅時刻が早い
↓
食事量を減らしすぎない献立
提案例:
魚料理、野菜の副菜、汁物、ご飯普通。
睡眠不足の日
睡眠時間が短い
+
帰宅が遅い
↓
厳しい食事調整より早い就寝を優先
提案例:
今夜は食事量を大きく変えず、調理時間を短くして就寝準備を優先する。
体組成計による違い
利用する体組成計によって、Codexへ渡せる情報が変わります。
体重と体脂肪率だけの場合
オムロン、TANITA、Appleヘルスケア経由の一部体組成計などでは、主に次の分析になります。
- 体重の週平均
- 体脂肪率の週平均
- 脂肪量の計算
- 食事時刻との関係
- 間食頻度との関係
- 睡眠や歩数との関係
筋肉量も取得できる場合
Withingsなどで筋肉量がHome Assistantへ入る場合は、次の判断材料が増えます。
- 体重減少時に筋肉量も減っていないか
- 食事を減らしすぎていないか
- 体重は変わらなくても体組成が変化しているか
- 食事より活動や筋力運動を優先すべきか
水分量を取得できる場合
急な体重変化が水分量の変化と重なっているかを確認できます。
ただし、水分量が変化した理由をAIだけで判断することはできません。
食事量の変更を急がず、数日間の傾向を見るための補助情報として使います。
最初に実装する範囲
最初から献立、在庫、買い物リスト、栄養素まで管理すると複雑になります。
次の順番で進めるのが現実的です。
第1段階:食事時刻だけ記録する
- 朝食・昼食・夕食の時刻
- 夕食が21時以降だった日数
- 体重や睡眠との関係
第2段階:量と間食を追加する
- 食事量
- 主食量
- 間食の有無
第3段階:献立分類を追加する
- 魚
- 肉
- 麺
- 丼
- 揚げ物
- 外食
- 汁物
第4段階:Codexで週次分析する
- 事実
- 仮説
- 信頼度
- 翌週の重点項目
- 献立候補3件
第5段階:買い物リストへつなげる
- 献立を選択
- 不足食材を確認
- 承認後に買い物リストへ追加
医療や栄養指導の代わりにはならない
この仕組みは、日々の食事と生活習慣を振り返るためのものです。
次の用途には使いません。
- 病気に応じた食事療法
- 服薬に関係する食品の判断
- アレルギーの安全確認
- 血糖や血圧に応じた治療判断
- 特定栄養素の厳密な制限
- 短期間での急激な減量計画
健康上の理由で食事制限が必要な場合は、医師や管理栄養士の指示を優先します。
Codexには、献立を決定するのではなく、過去の記録を整理し、実行しやすい候補を出す役割を担当させます。
まとめ
体組成データだけでも、体重や体脂肪率の変化は確認できます。
しかし、食生活や献立について具体的な提案を行うには、最低限の食事記録が必要です。
記録する項目は、最初は次の5つで十分です。
- 食事の種類
- 食事時刻
- 食事量
- 献立分類
- 間食
これらをHome Assistantへ保存し、体重、体脂肪率、睡眠、歩数、在宅時間、予定、天気と組み合わせます。
Codexには、
- 食生活の事実を整理する
- 体組成との関係を仮説として示す
- 信頼度を付ける
- 翌週に変更することを一つ選ぶ
- 実行しやすい献立候補を3件出す
- 次回に効果を評価する
という処理を担当させます。
重要なのは、体重が増えたから食事を減らす、という単純な判断をさせないことです。
食事時刻、間食、活動量、睡眠、生活予定などをまとめて確認し、本人が実行しやすい小さな変更を一つだけ提案させます。
最初は食事時刻と間食だけを記録し、毎週1回Codexが振り返る仕組みから始めると、入力負担を抑えながら効果を確認できます。
本記事の献立提案は、栄養素の偏りは扱わず、体組成データや生活データの情報を確認しなから、過去にうまくいった献立(成功献立)のライブラリの構築・最適化を図っていくという手法によるもののようだ。考えてみれば食事の多くはパターン化されており、イレギュラーな食事をする機会は少なく、多くの変動要因を固定することができるので、AIなら、食事パターンと体組成データとの関係・傾向を把握できるのかもしれない。

