【Discord×Gemini API】食事の写真を投げるだけで、栄養相談できる仕組みづくり
おはようございます。
今日は久しぶりの早起き。でも、朝の静かな時間がとてもよかったです。
家族の持病もあり、最近、食事の栄養情報をうまく管理できないかなあ、と考えていました。
もちろん、厳格にやっていくのは、しんどくなりそうなので、まずは朝ごはん、夜ごはんくらいでも撮影しておいて、アプリに情報を溜めていけば、なにか傾向が分かるんじゃないかなと。
昨日アイデアをひらめいて、早速早起きして、Discordに食事の写真を投げると、PCが起動している時に、栄養素の情報を返してくれるフローをつくってみました(Claude codeのおかげです。。)!

同時に、同じ内容が自分のObsidian(メモアプリ)にも記録されます。Claude codeからこの情報を参照することで、いつでもAI栄養士さんに相談できる仕組みです。

全体フロー
全体の流れはシンプルです。Discord(写真を投げる窓口)、Gemini API(写真を見て栄養素を推定するAI)、Obsidian(記録をためる場所)。この3つをつなぐ小さなプログラムがPCで動いています。

全体の流れです
スマホのDiscordアプリで、食事の写真をチャンネルに投げる
PCで動くプログラムが、10分おきに新しい投稿を見にいく
写真をGemini APIに渡して、栄養素を推定してもらう
結果をDiscordに返信し、同時にObsidianのノートへ追記する
即座には返ってきませんが、PCが起きているときに10分おきに動く方式なので、外食のときは投げておいて、帰宅後に結果を見るような形です。ここをリアルタイムにしようとすると、クラウドを立ち上げる必要がありそうでした。常時反応する作りにすると管理する部分が増えるので、帰宅後や、気になった時にチェックくらいでいいかなと思いました。
なぜ専用アプリではなく、Discordなのか
Discordを窓口にすると、アプリの外側を全部借りられるんです。写真を撮って送る画面も、過去ログをさかのぼる機能も、返信の通知も、すでにある。自分で作らなければいけないのは「写真を受け取って栄養素を返す部分」だけになります。
しかもDiscordはスマホとPCで同期されるので、外で撮って家で見返す、という使い方が自然にできます。
Geminiは写真から何を読み取っているのか
使っているのはGoogleの「Gemini API」です(gemini-3.1-pro-previewを使用、月150円くらいですが、無料枠で使えるapiもありました)。画像を渡すと、料理名と推定量、そして栄養素をまとめて返してくれます。
返ってくる項目は、カロリー、たんぱく質・脂質・炭水化物、糖質、食物繊維、塩分、鉄・亜鉛・マグネシウム・カルシウム・カリウム、ビタミンA・B群・C・D・E・葉酸。

(塩分が多いのかあ..)
ObsidianにFitbitのデータを溜めることで、いろんな視点で日常を振り返ることもできます。とても面白いですね。
精度を上げるコツもあって、「大盛り」「半分残した」といった一言を写真に添えることで精度をあげることもできそうです。
次に、箸や茶碗など大きさの基準になるものを一緒に写すこと。真上からより、少し斜めから撮ったほうが厚みが伝わります。
Obsidianに残すと、あとで「つなげられる」
結果をアプリの中ではなく、自分のobsidianに残しているのには理由があります。

私はFitbitの睡眠や心拍のデータも、同じObsidianの中に集めています(。食事の記録が同じ場所にあれば、「塩分の多かった日の翌朝、安静時心拍はどうだったか」といった突き合わせが、あとからできるようになります。
食事アプリの中に閉じ込めてしまうと、この横断ができませんが、家族の情報をローカル環境に蓄積していけば、いいアイデアや発見が見えてくるんじゃないかなと思っています。今後も暮らしに無理ない感じで蓄積していきたいです。
