メインコンテンツへ移動
AIチュートリアル

Oh-My-McDonald チュートリアル:AIでマクドナルドを検索・価格比較し、ボクセル画像を生成

このチュートリアルでは、Oh-My-McDonaldのインストールと設定方法を紹介します。マクドナルド公式MCPを使って店舗、メニュー、クーポン、栄養情報を検索し、ローカルのPythonスクリプトで見積もり、記録管理、ボクセル風PNG画像のレンダリングを行います。

Oh-My-McDonald チュートリアル:AIでマクドナルドを検索・価格比較し、ボクセル画像を生成

Oh-My-McDonaldとは

Oh-My-McDonald は、マクドナルド公式 MCP に基づく対話型 AI Skill です。自然言語で予算、好み、除外条件を AI に伝えると、実際のメニューを検索できます。店舗ごとの価格比較、クーポンやキャンペーンの確認、栄養データの計算も可能です。確認後には、食べたメニューや訪れた店舗を記録できます。

このプロジェクトは、マクドナルド公式 MCP から業務データを取得し、ローカルの Python スクリプトでデータ処理、記録の保存、画像のレンダリングを行います。Web インターフェースは不要で、OpenAI API やその他の画像生成 API にも依存しません。

Oh-My-McDonald の GitHub リポジトリを見る

このプロジェクトで解決できること

  • 同じ会話の中で、メニュー、店舗、価格、クーポン、栄養情報を検索できます。
  • 予算、好み、除外条件に基づき、MCP が返した実在の候補メニューから選択できます。
  • 最大 3 店舗まで、同じ商品・同じ規格の価格を比較できます。
  • 自分のクーポン一覧、クーポンの有効期限、公開済みのキャンペーンを確認できます。
  • 正確に一致するメニューのエネルギー、タンパク質、脂質、炭水化物、ナトリウム、カルシウムを計算できます。
  • 実際に食べた、または来店したことをユーザーが確認した後、メニュー図鑑や店舗訪問記録を保存できます。
  • 検索結果を、閲覧や共有に適したボクセル風 PNG 画像に変換できます。

4 種類のボクセル可視化シーン

プロジェクトには Python 製のボクセルレンダラーが組み込まれており、現在 43 個の粗いボクセルモデルを収録しています。1 マス 8 ピクセルのルールで画像を生成します。

メニュー図鑑

メニュー図鑑では、区画展示館、曲がりくねった遊歩道、メニュー展示台によって探索の進捗を表現します。実際に食べて確認・保存したメニューだけが点灯し、未確認のメニューはグレーのまま表示されます。

メニュー図鑑のボクセルシーン

クーポンカレンダー

クーポンカレンダーは、自分のクーポン一覧の有効日を基準に集計し、本日有効なクーポン、近日中に期限切れになるクーポン、公開済みのキャンペーンを重点的に表示します。詳細をすべて 1 枚の画像に詰め込まないよう、完全な明細は続きのページに配置できます。

クーポンカレンダーのボクセルシーン

店舗価格比較

店舗価格比較のシーンでは、選択した店舗をボクセルの街道沿いに並べ、入口に対応する価格を表示します。この街道はデータの可視化専用であり、実際の道路や店舗間の地理的関係を示すものではありません。

店舗価格比較のボクセルシーン

栄養テーブル

栄養シーンでは、今回の食事を同じ食器に盛り付け、レシートで栄養データを表示します。野菜、果物、乳製品は食事外の組み合わせ例であり、食器内の料理の栄養合計には含まれません。

栄養テーブルのボクセルシーン

インストール前の準備

開始前に、使用する環境が以下の条件を満たしていることを確認してください。

  • Python 3.11 以上。
  • Python 仮想環境を正常に作成・使用できること。
  • 中国語に対応したフォントがインストールされていること。Noto Sans CJK を推奨します。
  • リアルタイム検索を行う場合は、マクドナルド公式 MCP のアクセス認証情報を用意すること。

主な依存関係は Pillow >=10,<13 と NumPy >=1.24,<3 で、完全な依存関係は requirements.txt に記録されています。

ステップ 1:プロジェクトをクローンする

git clone https://github.com/xiaozhangup/Oh-My-McDonald.git
cd Oh-My-McDonald

ステップ 2:仮想環境を作成する

Linux または macOS では、次を実行します。

python -m venv .venv
source .venv/bin/activate

Windows PowerShell の場合は、次を実行します。

.venv\Scripts\Activate.ps1

ステップ 3:依存関係をインストールする

python -m pip install -r requirements.txt

依存関係は、必ず有効化済みの仮想環境内でインストールすることを推奨します。システムの Python にインストールされた他のパッケージとの競合を避けられます。

ステップ 4:中国語フォントを設定する

ボクセル画像には、中国語のメニュー名、店舗名、クーポンタイトルが含まれるため、利用可能な中国語フォントが必要です。Noto Sans CJK をインストールした後、OMM_FONT でフォントファイルのパスを指定できます。

export OMM_FONT="/path/to/your/font.ttf"

例のパスを、使用する環境に実在するフォントファイルのパスへ置き換えてください。画像内の中国語が正常に表示されない場合は、まずこの環境変数とフォントパスを確認してください。

ステップ 5:コマンドのヘルプを確認する

python oh-my-mcdonald/scripts/oh_my_mcdonald.py --help

このコマンドを実行すると、ローカルの補助スクリプトが提供するサブコマンドと引数が表示されます。より詳しい説明は、リポジトリ内の oh-my-mcdonald/references/commands.md にあります。

マクドナルド公式 MCP に接続する

MCP Token を取得する

マクドナルド MCP コンソールにアクセスし、公式ページの説明に従って MCP Token を取得します。認証情報はローカル環境変数または Codex 設定に保存し、実際の Token をプロジェクトファイルに書き込んだり、Git リポジトリにコミットしたりしないでください。

環境変数で Token を設定する

export MCD_MCP_TOKEN="YOUR_MCD_MCP_TOKEN"

Codex 設定から認証情報を読み込む

ローカルの設定ファイルにすでに mcd-mcp の設定が含まれている場合は、--codex-config でファイルを明示的に指定できます。

python oh-my-mcdonald/scripts/oh_my_mcdonald.py \
  --codex-config /本機/config.toml stores --city 武汉 --keyword 东澜岸

どちらの方法でも、認証情報はローカル環境でのみ読み込まれます。接続手順の詳細は、リポジトリのルートディレクトリにある MCP_INTEGRATION.md を参照してください。

プロジェクトが使用する MCP ツール

  • query-nearby-stores:近隣の店舗を検索します。
  • query-meals:メニューを検索します。
  • query-meal-detail:メニューの詳細を検索します。
  • query-store-coupons:店舗のクーポン情報を検索します。
  • query-my-coupons:ユーザーのクーポン一覧を検索します。
  • calculate-price:指定商品の価格を計算します。
  • campaign-calendar:キャンペーンカレンダーを検索します。
  • list-nutrition-foods:栄養計算に必要なメニューデータを取得します。
  • order-list:注文履歴を検索します。

基本的な使い方 1:店舗を検索する

次のコマンドは、武漢市で名前または所在地に「东澜岸」を含む店舗を検索します。

python oh-my-mcdonald/scripts/oh_my_mcdonald.py stores \
  --city 武汉 \
  --keyword 东澜岸

店舗の検索結果を取得したら、有効な店舗 ID を使ってメニューの詳細や価格を引き続き検索できます。

基本的な使い方 2:メニューの詳細を検索する

python oh-my-mcdonald/scripts/oh_my_mcdonald.py detail \
  --store 1960151 \
  --code 9900005456
  • --store は店舗 ID を指定します。
  • --code はメニューコードを指定します。

例の ID は引数の形式を説明するためのものです。実際に使用する際は、MCP の最新の検索結果で返された有効な店舗 ID とメニューコードを使用してください。

基本的な使い方 3:バスケットの価格を検索する

バスケットの内容は JSON ファイルで指定し、指定した店舗と現在のテストプランに基づいて価格を計算します。

python oh-my-mcdonald/scripts/oh_my_mcdonald.py quote \
  --store 1960151 \
  --basket examples/basket.json

店舗間で価格を比較する際は、同じ商品・同じ規格を比較していることを確認してください。プロジェクトが比較できるのは、選択した最大 3 店舗までで、一部の店舗の結果から他店舗の価格を推測することはありません。

基本的な使い方 4:ボクセルモデルをオフラインで確認する

MCP Token が一時的にない場合でも、ローカルのレンダリング環境を確認し、内蔵モデルを表示できます。

python oh-my-mcdonald/scripts/oh_my_mcdonald.py \
  --out output models

生成結果は output ディレクトリに書き込まれます。この手順は、Pillow、NumPy、中国語フォントが正しく設定されているかを確認するのに適しています。

AI クライアントで Skill を使用する

プロジェクトには oh-my-mcdonald/SKILL.md が用意されており、Skill に対応した AI クライアントにプロジェクトの機能、操作手順、制限を説明できます。クライアントには MCP への接続機能と、ローカルコマンドを実行する機能も必要です。

一般的な流れは次のとおりです。

  1. ユーザーが自然言語で、予算、好み、店舗、クーポン、栄養に関する要望を伝えます。
  2. AI が対応する MCP ツールを選択し、実際の業務データを取得します。
  3. AI が予算と除外条件に基づいて結果を絞り込みます。
  4. 必要に応じてローカルの Python スクリプトを呼び出してデータを処理します。
  5. 可視化が必要な場合は、ローカルレンダラーで PNG を生成します。
  6. 食事や店舗訪問の記録に関わる場合は、まずユーザーの明確な確認を待ってから記録を書き込みます。

AI には、次のような依頼ができます。

  • 今日の予算は 35 元です。辛くないものでおすすめはありますか?
  • 条件に合う実在のメニューから 1 つランダムに選んでください。
  • このセットの価格を近くの 3 店舗で比較してください。
  • 今日使えるクーポンと最近のキャンペーンを確認してください。
  • この食事のエネルギーとタンパク質を計算してください。
  • 先ほどこのハンバーガーを食べたことを確認します。記録してください。
  • 食べたメニューで図鑑を作ってください。

候補メニューは必ず MCP の検索結果に含まれるものとし、AI が創作してはいけません。1 回のランダム選択で使用できる候補メニューの組み合わせは最大 6 つです。

高度なヒントと利用原則

店舗、商品、規格を先に明確にする

価格は店舗、商品の規格、クーポンプランの影響を受けます。比較する前に商品と規格を固定し、今回選択した店舗を AI に明確に列挙させてください。そうすることで、比較可能な結果が得られます。

栄養データの欠落を厳密に扱う

栄養計算では、正確に一致するメニューだけを使用します。一部の栄養項目が欠落している場合は、欠落項目として個別に記載し、欠落値を 0 として扱わないでください。また、名前が似ているだけで確認できない商品で代用してはいけません。

食事内の集計と食事外の提案を区別する

栄養テーブルには野菜、果物、乳製品などの追加提案を表示できますが、今回の食事の栄養値には食器内の食品だけを集計します。生成画像を解釈する際は、食事外の参考項目を合計に加えないでください。

記録する前にユーザーの確認を求める

注文履歴は確認待ちの情報にすぎず、ユーザーが実際にメニューを食べたことを直接証明するものではありません。ユーザーが実際に食べたことを明確に確認した後にのみ、プロジェクトは記録を保存して図鑑を点灯させます。店舗訪問の記録も同じ原則に従います。

クーポンカレンダーを正しく理解する

カレンダーでは、自分のクーポン一覧の有効日を基準にクーポン数を集計します。クーポンを特定の時間帯、店舗、商品で使用できるかどうかは、MCP が返す具体的な条件に従ってください。

ローカルの認証情報を保護する

Token は、MCD_MCP_TOKEN 環境変数またはローカルの Codex 設定から読み込むことを優先してください。認証情報をスクリプト、サンプル JSON、スクリーンショット、バージョン管理ファイルに書き込まないでください。

自動テストの実行

プロジェクトでは Python の unittest を使用しています。リポジトリのルートディレクトリで次のコマンドを実行できます。

python -m unittest discover -s tests -v

README に記載されている既存のテストは合計 51 件で、合成データを使用して業務処理、出力、レンダリングロジックを検証します。実際の MCP クエリの検証状況と制限については、docs/VALIDATION.md に記載しています。

知っておくべき実装上の制約

  • 自動注文、支払い、クーポンの取得には対応していません。
  • クラウド同期とバックグラウンドポーリングは提供していません。
  • 価格比較の対象は、選択した最大 3 店舗までです。同一商品、同一仕様、現在のテスト方案に限られます。
  • ボクセル街路は説明用のシーンであり、実在の道路や地理的位置関係は含まれていません。
  • プレビューに表示される実際の MCP データは特定日時点のスナップショットであり、その後のリアルタイム結果を示すものではありません。
  • 食事記録と店舗訪問記録は、いずれもユーザーの確認が必要です。

プロジェクトディレクトリの概要

  • oh-my-mcdonald/SKILL.md:AI クライアント用の Skill 定義ファイル。
  • oh-my-mcdonald/scripts/oh_my_mcdonald.py:ローカル補助スクリプトおよび主要なコマンドエントリーポイント。
  • oh-my-mcdonald/references/commands.md:詳細なコマンドリファレンス。
  • docs/images/:シーンのプレビュー画像。
  • docs/VALIDATION.md:実際のクエリの検証結果と制限。
  • examples/basket.json:買い物かごの JSON 例。
  • MCP_INTEGRATION.md:MCP の接続と呼び出し手順の説明。
  • tests/:自動テスト。

まとめ

Oh-My-McDonald は、マクドナルド公式 MCP、自然言語による対話、ローカルのボクセルレンダリングを組み合わせています。メニュー選び、価格比較、栄養分析を支援できるだけでなく、確認済みの個人探索記録を作成することもできます。まずオフラインモデルのレンダリングとテストを完了してから MCP Token を設定し、価格、キャンペーン、栄養に関しては、常に現在 MCP が返す実際のデータを基準にしてください。

このプロジェクトは MIT License のもとで公開されています。問題は GitHub Issues から報告でき、Pull Request を提出して改善に参加することもできます。