chomptron について
Chomptronは、手元の食材を使って料理したい人向けのレシピ生成サービスです。Google Geminiを使い、分量や調理時間、人数を含むレシピを生成し、食事制限も指定できます。
主な機能
- 01手持ちの食材からレシピを生成
- 02食事制限の指定
- 03分量・時間・人数の提示
- 04レシピの分量調整とお気に入り登録
活用シーン
- 01家にある食材で献立を考える
- 02食事制限に合うレシピを探す
- 03人数に合わせてレシピの分量を調整
MCP 対応
`POST /mcp` のMCP Streamable HTTPエンドポイントで `generate_recipe` ツールを公開し、食材と任意の食事制限フラグを受け取ります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://chomptron.com/mcpclaude mcp add --transport http swantron-chomptron https://chomptron.com/mcp{"mcpServers":{"swantron-chomptron":{"type":"http","url":"https://chomptron.com/mcp"}}}Cursor で開く{"servers":{"swantron-chomptron":{"type":"http","url":"https://chomptron.com/mcp"}}}VS Code で開く{"mcpServers":{"swantron-chomptron":{"type":"http","url":"https://chomptron.com/mcp"}}}{"mcpServers":{"swantron-chomptron":{"serverUrl":"https://chomptron.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
1| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| ingredients | string | はい | 手持ちの食材。カンマ区切りまたは自由形式のテキストで入力します |
| dietaryPreferences | object | いいえ | |
| dietaryPreferences.vegan | boolean | いいえ | |
| dietaryPreferences.eggFree | boolean | いいえ | |
| dietaryPreferences.nutFree | boolean | いいえ | |
| dietaryPreferences.soyFree | boolean | いいえ | |
| dietaryPreferences.dairyFree | boolean | いいえ | |
| dietaryPreferences.glutenFree | boolean | いいえ | |
| dietaryPreferences.vegetarian | boolean | いいえ | |
| dietaryPreferences.shellfishFree | boolean | いいえ |
詳細
Chomptron
Google Gemini AI を使用し、食材をおいしいレシピに変換する、AI 搭載のレシピジェネレーターです。Google Cloud Run にデプロイされており、chomptron.com で利用できます。
機能
キッチンにある食材を入力すると、Chomptron が分量、手順、調理時間、分量の目安を含む、創造的で実用的なレシピを生成します。
ローカル開発
npm install
export GEMINI_API_KEY="your-api-key-here"
export GEMINI_MODEL="gemini-3.1-flash-lite" # Optional, defaults to gemini-3.1-flash-lite
npm start
http://localhost:8080 にアクセスしてください。
API キーを取得してください:https://makersuite.google.com/app/apikey
環境変数
GEMINI_API_KEY(必須)- Google Gemini API キーGEMINI_MODEL(任意)- 使用するモデル。既定値はgemini-3.1-flash-liteですPORT(任意)- サーバーポート。既定値は 8080 です
モデルの設定
Gemini モデルは、GEMINI_MODEL 環境変数で設定できます。
推奨モデル(2025 年 12 月時点):
gemini-3.1-flash-lite(既定)- 無料枠の上限が最も高いモデル:15 RPM、1,000 RPDgemini-2.5-flash- 10 RPM、250 RPDgemini-2.0-flash- 10 RPM、200 RPD(⚠️ クォータが不安定で、limit: 0と表示されることがよくあります)gemini-1.5-flash- レガシーモデル。2.0 より上限が高い場合があります
2025 年 12 月のクォータ変更:
Google は 2025 年 12 月に無料枠のクォータを大幅に変更しました。
gemini-2.0-flashは、完全な未認証の無料枠から削除されました- 多くのアカウントで、新しいモデルに対して課金を有効にしていない場合、
limit: 0エラーが表示されます - 無料枠のクォータは毎月自動的にリセットされません
「Limit: 0」エラーの解決方法:
limit: 0 のクォータエラーが表示される場合:
gemini-2.5-flash-liteに切り替える - 現在利用可能な無料枠モデルの中で最適です- 課金(従量課金制)を有効にする - クレジットカードを登録すると(利用がなくても)、アカウントが「Limited Free」から「Tier 1」に移行し、提示されている無料枠のクォータが利用可能になります
- 地域を確認する - EEA、英国、スイスでは無料枠へのアクセスが制限されています
- 使用状況を確認する -
/api/usageエンドポイントまたは https://ai.dev/usage にアクセスしてください
無料枠の上限(2025 年 12 月時点):
| モデル | 分あたりのリクエスト数 | 1 日あたりのリクエスト数 | 主な用途 |
|---|---|---|---|
| gemini-2.5-flash-lite | 15 | 1,000 | 大量のリクエストを処理するアプリ |
| gemini-2.5-flash | 10 | 250 | 一般的な用途 |
| gemini-2.0-flash | 10 | 200 | レガシー(不安定) |
| gemini-2.5-pro | 2 | 50 | 複雑な推論 |
テスト
npm test
テストでは以下を検証します。
- モジュール化されたファイル構成:外部の
styles.cssとapp.jsがリンクされていることを確認します - CI/CD と DevOps:Docker と Cloud Build の設定
- API の整合性:ヘルスチェックのエンドポイント(
/health、/ready)とレシピ生成 - 機能の堅牢性:レシピ履歴、分量の調整ロジック、お気に入り機能
API エンドポイント
-
GET /health- ライブネスチェック。サービスの状態を返します -
GET /ready- レディネスチェック。AI の設定を検証し、現在のモデルを表示します -
GET /api/usage- 使用状況の統計情報(リクエスト総数、クォータエラー、モデル情報) -
POST /api/generate-recipe- レシピを生成するメインエンドポイント- リクエストボディ:
{ "ingredients": "chicken, tomatoes, garlic", "dietaryPreferences": { "vegan": false, "vegetarian": false, "glutenFree": false, "dairyFree": false, "nutFree": false, "shellfishFree": false, "eggFree": false, "soyFree": false } } - レスポンス:
{ "success": true, "recipe": "**Recipe Name:** ...", "cached": false }
- リクエストボディ:
-
POST /mcp— MCP Streamable HTTP。ツールgenerate_recipe(食材と任意の食事制限フラグ)。認証は不要です。1 日あたりの上限はMCP_DAILY_RECIPE_LIMIT(デフォルトは 20)で、MCP_BUDGET_FILEに保存されるため、同じインスタンス上でプロセスを再起動してもリセットされません。
アーキテクチャ
Chomptron は、コスト効率と自動スケーリングを実現するため、Google Cloud Run 上のサーバーレスアプリケーションとして構築されています。
技術スタック:
- バックエンド: Node.js 24 + Express
- AI: Google Gemini(モデルは設定可能。デフォルトは gemini-3.1-flash-lite)
- フロントエンド: モジュール式の Vanilla HTML/CSS/JavaScript(関心事を明確に分離)
- ストレージ: レシピ履歴用のブラウザー localStorage
- プラットフォーム: Google Cloud Run(サーバーレス)
- CI/CD: Cloud Build
- ドメイン: chomptron.com
サーバーレスを選ぶ理由
- アイドル時はゼロまでスケールし、コストは $0(従来型のホスティングでは月額 $5-50)
- トラフィックに応じて、0 から 1000 以上のインスタンスまで自動スケーリング
- メンテナンス不要 — 管理、パッチ適用、設定が必要なサーバーはありません
- AI ワークロードに最適 — バーストトラフィックや CPU 負荷の高いレシピ生成を効率的に処理します
パフォーマンスの最適化:
- インメモリーキャッシュ: インスタンスごとのレシピキャッシュ(有効期間 24 時間、最大 100 件のレシピ)
- 構造化レシピの解析: レシピの構成要素を抽出し、表示とスケーリングを改善します
- クライアント側のレート制限: 過剰な API 呼び出しを防ぎます
- スマートな再試行ロジック: 指数バックオフでクォータエラーを適切に処理します
使用ガイド
レシピの生成
- テキストエリアに食材を入力します
- (任意)食事の好みやアレルギーを選択します
- 「Generate Recipe ✨」をクリックします
- 以下の項目を含む、構造化されたレシピが表示されます:
- レシピ名とメタデータ
- 分量を調整できる食材リスト
- 手順ごとの調理方法
- 調理のヒント
レシピの機能
- 分量の調整: +/- ボタンで分量を調整します(0.25 倍~4 倍)
- レシピの評価: 星をクリックしてレシピを評価します(星 1~5 個)
- メモの追加: メモ欄に個人的なメモを入力します
- お気に入り: 星ボタンをクリックしてレシピをお気に入りに登録します
- 印刷: 印刷ボタンをクリックすると、印刷向けの表示になります
- 共有: 共有ボタンをクリックして、共有可能な URL を生成します
レシピ履歴
- 📚 ボタン(右上)をクリックしてレシピ履歴を開きます
- レシピ名、食材、または内容からレシピを検索します
- お気に入りで絞り込みます
- すべてのレシピを JSON またはテキスト形式でエクスポートします
- レシピをクリックすると再読み込みできます
ダークモード
- 🌙 ボタン(左上)をクリックしてダークモードとライトモードを切り替えます
- 設定は自動的に保存されます
モニタリング
ヘルスチェック:
curl https://chomptron.com/health
curl https://chomptron.com/ready
curl https://chomptron.com/api/usage # View usage statistics
ログの表示:
# Recent logs
gcloud run logs read chomptron --region us-central1 --limit 50
# Live stream
gcloud run logs tail chomptron --region us-central1
コンソールダッシュボード:
機能
主な機能
- ✨ Google Gemini を使用した AI 搭載のレシピ生成
- 🍳 創造的なレシピ名と手順
- 📏 正確な分量とサービング数
- ⏱️ 調理時間の目安(下準備、調理、合計時間)
- 🎨 モダンなビジュアルデザイン:段階的な入場アニメーションを備えたグラスモーフィズムデザイン
- 🔠 プレミアムなタイポグラフィ:現代的な雰囲気を演出する Outfit と Inter フォント
- ⚡ Google Cloud Run 上のサーバーレスな自動スケーリングインフラストラクチャ
レシピの管理
- 📚 localStorage に保存されるレシピ履歴(最大 100 件)
- ⭐ お気に入りシステムで、お気に入りのレシピにマークを付けて絞り込み
- 🔍 保存したレシピを検索・絞り込み
- 💾 レシピを JSON またはテキスト形式でエクスポート
- 📋 サイドバーパネルから過去のレシピにすばやくアクセス
- 📝 各レシピに個人的なメモを追加
- ⭐ 5 段階評価システムでレシピを評価
レシピのカスタマイズ
- 🥗 食事の好みとアレルギー:ビーガン、ベジタリアン、グルテンフリー、乳製品不使用、ナッツ不使用、甲殻類不使用、卵不使用、大豆不使用
- 📊 レシピの分量調整:サービング数を 0.25 倍から 4 倍まで調整し、材料の分量を自動計算
- 🖨️ 印刷に適した表示:レシピの印刷に最適化されたシンプルなレイアウト
- 🔗 共有可能な URL:レシピを共有するためのリンクを生成(Web Share API に対応)
レシピの表示
- 📋 構造化されたレシピ形式:整理されたセクションごとに解析して表示:
- レシピ名
- サービング数と時間の情報
- 材料の一覧
- 手順ごとの説明
- 調理のヒント
- 🎨 ダークモード/ライトモード:設定を保持してテーマを切り替え
パフォーマンスと最適化
- 💾 レシピのキャッシュ:メモリ内キャッシュにより、似た材料の組み合わせに対する API 呼び出しを削減
- 🔄 スマートな再試行ロジック:クォータエラーが発生した場合、指数バックオフで自動的に再試行
- ⚡ レート制限:クライアント側のレート制限により、過剰な API 呼び出しを防止
技術的な機能
- 🔍 ヘルスモニタリングと準備状況チェック
- 🔎 メタタグ、Open Graph、Twitter Cards、構造化データを使用した SEO 最適化
- 📱 manifest.json による PWA 対応
- 🤖 検索エンジンのインデックス登録用 robots.txt と sitemap.xml
レシピのデータ構造
レシピは、以下の構造でブラウザーの localStorage に保存されます。
{
"id": "timestamp",
"ingredients": "chicken, tomatoes, garlic",
"recipe": "Full recipe text...",
"recipeName": "Extracted recipe name",
"timestamp": "2025-01-01T00:00:00.000Z",
"favorite": false,
"rating": 0,
"notes": "",
"servingSize": 4,
"dietaryPreferences": {
"vegan": false,
"vegetarian": false,
"glutenFree": false,
"dairyFree": false,
"nutFree": false,
"shellfishFree": false,
"eggFree": false,
"soyFree": false
}
}
キャッシュ戦略
このアプリケーションでは、サーバー側でメモリ内キャッシュを使用します。
- キャッシュキー:正規化された材料+食事の好み
- TTL:24 時間
- 最大サイズ:インスタンスあたり 100 件のレシピ
- スコープ:インスタンス単位(サーバーレスインスタンスは一時的です)
- メリット:同じインスタンスに届く類似リクエストの API 呼び出しを削減
SEO 機能
メタタグ、Open Graph、Twitter Cards、構造化データ(JSON-LD)、sitemap、robots.txt、PWA 対応により、検索エンジンとソーシャル共有向けに最適化されています。
Buildkite パイプライン
このリポジトリには .buildkite/pipeline.yml に Buildkite パイプラインが含まれており、buildkite-gcp-agent によってプロビジョニングされたセルフホストの GCP エージェント上で実行されます。
パイプラインの構成
Push / PR
└── Three steps dispatched in parallel:
├── :prettier: Format check (npm run format -- --check)
├── :eslint: Lint (npm run lint)
└── :nodejs: Tests (npm test)
└── Annotate — consolidated pass/fail surfaced in the Buildkite UI
GitHub Actions のワークフローでは、format → lint → test が単一のジョブ内で順番に実行されますが、こちらの 3 つのステップには相互依存関係がなく、同時に実行されます。エージェントのプールがある場合は作業が分散されます。単一のエージェントでも、明示的な依存関係グラフによって意図が明確になり、パイプラインを簡単にスケーリングできます。
デプロイステージは意図的に省略しています。Cloud Run へのデプロイは、本番環境の GCP 認証情報を保持する既存の GHA ワークフローで処理されます。CI(迅速なフィードバック)と CD(本番環境へのアクセス)は、セキュリティ境界として別々のシステムに分けています。
パイプラインのセットアップ
Buildkite → New Pipeline からリポジトリを接続し、github.com/swantron/chomptron を指定します。Buildkite はプッシュのたびに .buildkite/pipeline.yml を自動的に読み込みます。
エージェントの指定
すべてのステップは gcp キューで実行されます。
agents:
queue: gcp
コントリビューション
これは個人プロジェクトですが、提案や改善を歓迎します!
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。