食事写真を記録・栄養分析する個人向け Web アプリ。Claude Vision API が料理写真を自動分析し、カロリー・PFC・アレルゲンを抽出します。
- 4 種の記録モード
dish_photo— 料理写真 → Claude が栄養を推定nutrition_label— 栄養成分表示ラベル写真 → 記載値をそのまま読み取りtext_ai— 料理名テキスト → Claude が栄養を推定text_manual— カロリー・PFC を手動入力
- カロリー推移・PFC 比率グラフ(日別 / 週別 / 月別)
- アレルゲン管理・警告表示
| レイヤー | 技術 |
|---|---|
| フロントエンド | React 18 + TypeScript + Vite + Recharts |
| バックエンド | Rust (Axum) + sqlx |
| データベース | PostgreSQL 16 |
| AI 分析 | Claude API (Anthropic) |
| コンテナ | Docker Compose |
- Docker Desktop(または Docker Engine + Compose)
- VS Code + Dev Containers 拡張機能(推奨)
docker compose up -d postgresマイグレーションは backend 起動時(次節の cargo run 時)に自動適用される。
cp backend/.env.example backend/.envbackend/.env を編集:
# Dev Container 内から実行する場合
DATABASE_URL=postgres://postgres:postgres@host.docker.internal:5432/taberu_db
CLAUDE_API_KEY=sk-ant-xxxx # Anthropic API キー
UPLOAD_DIR=./uploads
RUST_LOG=debug
CLAUDE_MOCK=1 # API キーなしで動作確認する場合は 1
CORS_ORIGIN=http://localhost:5173Linux ホストの場合:
host.docker.internalが解決されない場合があります。.devcontainer/devcontainer.jsonのrunArgsに"--add-host=host.docker.internal:host-gateway"を追加してから Dev Container を再ビルドしてください。
cd backend
cargo run
# http://localhost:8000 で起動動作確認:
curl http://localhost:8000/api/records
# {"data":[],"total_calories":0.0}cd frontend
npm install
npm run dev
# http://localhost:5173 で起動| メソッド | パス | 説明 |
|---|---|---|
POST |
/api/records |
食事記録を作成(multipart/form-data) |
GET |
/api/records |
記録一覧(?date=YYYY-MM-DD で日付絞り込み) |
PUT |
/api/records/:id |
アレルゲン・メモを更新 |
DELETE |
/api/records/:id |
記録を削除 |
GET |
/api/stats/calories |
カロリー統計(?period=week|month) |
GET |
/api/stats/nutrients |
PFC 内訳(?date=YYYY-MM-DD) |
GET |
/uploads/* |
アップロード画像の配信 |
詳細な仕様は docs/design.md を参照してください。
ホストに必要なのは Docker のみ(Rust / cargo / Node は不要)。
# 1. .env を作成(POSTGRES_PASSWORD と CLAUDE_API_KEY を実値に書き換える)
cp .env.example .env
# 2. 起動(イメージビルド・DB マイグレーション適用すべて自動)
docker compose -f docker-compose.prod.yml up -d --buildこれだけ。更新時も git pull && docker compose -f docker-compose.prod.yml up -d --build だけで済む。
マイグレーションは backend 起動時に sqlx::migrate! で自動適用される。
backend/src/**/*.rs 内の sqlx::query! / query_as! を追加・変更した場合のみ、
オフラインビルド用のクエリキャッシュを再生成してコミットする。
docker compose run --rm sqlx-prepare
git add backend/.sqlx
git commit -m "chore: update sqlx query cache"
⚠️ 再生成忘れに注意。古い.sqlx/のままだとビルドは通るが、実 DB スキーマと 乖離した型で動作する可能性がある。.sqlx/には SQL とスキーマ型情報のみで シークレットや実データは含まれないので、公開リポジトリでもコミットして問題ない。
詳細手順・バックアップ・トラブルシュートは docs/design.md の
「デプロイメント戦略」セクションを参照。