AIコーディング 2026.05.03

ClaudeとChatGPTで栄養管理アプリを作る|5ステップ実装ガイド【2026年版】

タグ:Claude / ChatGPT / 生成AI / 業務自動化 / アプリ開発

5ステップ実装ガイド

Step 1 (15分): 作りたいものを明確にする(機能リスト・データ構造)
Step 2 (10分): Claude/ChatGPTにコード生成を依頼する
Step 3 (10分): 生成されたコードを実行してエラーを確認
Step 4 (10分): エラーをAIに貼り付けて修正を依頼
Step 5 (5分):  動作確認・テスト
合計: 50分で最初の動作版が完成

Step 2: コード生成プロンプト例

以下の条件で栄養管理アプリをPythonで作ってください。

機能:
1. 食事を入力する(名前・量)
2. Claude APIで栄養素(カロリー・タンパク質・炭水化物・脂質)を推定する
3. 1日の合計を表示する
4. JSONファイルに保存する

制約:
- requests, anthropic パッケージのみ使用
- コマンドライン(CLI)で動作する
- 環境変数でAPIキーを管理する
- 初心者でも読めるコメントを追加する

出力: 完全に動作するPythonコードのみ

栄養管理アプリの実装例

# nutrition_tracker.py
# Claude APIで食事の栄養素を推定して記録する

import anthropic
import json
from pathlib import Path
from datetime import date

client = anthropic.Anthropic()
DATA_FILE = Path("nutrition_log.json")

NUTRITION_SYSTEM = """あなたは栄養士です。
食事名と量から栄養素を推定してください。

出力形式(JSON):
{
  "calories": 数値,
  "protein_g": 数値,
  "carbs_g": 数値,
  "fat_g": 数値
}

JSONのみ出力してください。"""

def estimate_nutrition(food: str, amount: str) -> dict:
    """Claude APIで食事の栄養素を推定する"""
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # 栄養素推定はHaikuで十分
        max_tokens=100,
        system=NUTRITION_SYSTEM,
        messages=[{"role": "user", "content": f"食事: {food} ({amount})"}]
    )
    
    cost = (response.usage.input_tokens * 0.80 + response.usage.output_tokens * 4.00) / 1_000_000
    
    try:
        nutrition = json.loads(response.content[0].text)
        nutrition["food"] = food
        nutrition["amount"] = amount
        nutrition["cost_usd"] = round(cost, 5)
        return nutrition
    except json.JSONDecodeError:
        return {"error": "解析失敗", "food": food, "cost_usd": round(cost, 5)}

def log_meal(food: str, amount: str) -> dict:
    """食事を記録して今日の合計を返す"""
    today = str(date.today())
    
    log = json.loads(DATA_FILE.read_text()) if DATA_FILE.exists() else {}
    if today not in log:
        log[today] = []
    
    nutrition = estimate_nutrition(food, amount)
    log[today].append(nutrition)
    
    DATA_FILE.write_text(json.dumps(log, ensure_ascii=False, indent=2))
    return nutrition

def daily_summary() -> dict:
    """今日の栄養合計を計算する"""
    today = str(date.today())
    if not DATA_FILE.exists():
        return {"calories": 0, "protein_g": 0, "carbs_g": 0, "fat_g": 0}
    
    log = json.loads(DATA_FILE.read_text())
    meals = log.get(today, [])
    
    return {
        "calories": sum(m.get("calories", 0) for m in meals),
        "protein_g": sum(m.get("protein_g", 0) for m in meals),
        "carbs_g": sum(m.get("carbs_g", 0) for m in meals),
        "fat_g": sum(m.get("fat_g", 0) for m in meals),
        "meal_count": len(meals),
        "total_cost_usd": round(sum(m.get("cost_usd", 0) for m in meals), 5)
    }

# 使用例
print("朝食を記録:")
breakfast = log_meal("玄米ご飯", "1杯(200g)")
print(f"  {breakfast['food']}: {breakfast.get('calories', '?')}kcal")

lunch = log_meal("鶏むね肉の塩焼き", "150g")
print(f"  {lunch['food']}: {lunch.get('calories', '?')}kcal")

summary = daily_summary()
print(f"\n今日の合計:")
print(f"  カロリー: {summary['calories']}kcal")
print(f"  タンパク質: {summary['protein_g']}g")
print(f"  {summary['meal_count']}食分の推定コスト: ${summary['total_cost_usd']:.5f}")

あわせて読みたい

参考ソース