制作実績の一覧へ

食事と体重の記録

DailyFit

食事と体重をスマートフォンから記録する個人用Webアプリ。食品や定番食の登録、食事写真と栄養成分表示の読取り、日別の摂取量と体重の確認に対応する。通信が途切れたときの操作は端末に保存して再送し、記録画面とAPIはログインした本人だけが利用できる。

公開サイトを見る (新しいタブ)
DailyFitの画面

技術スタック

DailyFitで使用する技術と役割
技術このサイトでの役割
React今日の記録、食事入力、体重の推移、設定の画面を表示する。
HonoCloudflare Worker上で食事、体重、写真解析、データ出力のAPIを提供する。
Cloudflare D1本人ごとの食品、食事、体重、目標と食事写真を保存する。
IndexedDB端末内に未送信の操作、写真の下書き、定番食のキャッシュを保持する。
Cloudflare Workers AI食事写真の栄養値の概算と、包装にある栄養成分表示の読取りを補助する。
Cloudflare Access記録画面へのログインを要求し、WorkerでもAPIの認証トークンを検証する。

処理の流れ

  1. 食品や定番食を登録する

    食品の名前と栄養値を入力する。包装の栄養成分表示を撮った場合は読取り結果を入力欄で確認し、必要な箇所を直して保存する。

  2. 食事と体重を記録する

    定番食を選ぶか食品と量を入力する。食事写真は任意でAIによる概算を使い、内容を確認してから記録する。体重は日付を指定して入力する。

  3. 端末から同期する

    食事や体重の操作を端末内に保存してWorkerへ送る。未送信の操作はオンライン復帰や画面復帰時に再送し、同期が終わるまで区別して表示する。

  4. 日別の記録を確かめる

    確定した食事のエネルギーとたんぱく質、脂質、炭水化物を集計し、未確定の項目と1日の確認状態、体重の履歴を表示する。

実装の工夫

未知の栄養値と予定を集計から分ける

日別の集計は実際に食べた記録だけを対象にする。栄養値が不明な食事をゼロとみなさず、その項目の合計を不明として表示し、判明分のエネルギーと不明な件数も示す。

オフライン操作の重複と競合を扱う

端末は利用者ごとに操作ID付きの未送信データを保存する。Workerは同じ操作IDの再送を重複処理せず、食事の編集と削除では記録の版番号を照合し、別端末で変更された記録を無言で上書きしない。

写真の解析結果を保存前に確認する

食事写真のAI概算は利用者がボタンを押したときだけ実行し、料理名と栄養値を修正できる入力欄に反映する。栄養成分表示の読取りも食品登録欄への入力補助とし、読めなかった値は空欄で残す。

構成と制約

実装確認:

制作実績の一覧へ戻る