新メニューの試作レシピから原価計算表とアレルゲン・栄養成分の表示の下書きを作り、根拠が足りない食材を挙げる
新メニューの試作レシピを読み、食材を単価表と食品成分表の項目に対応づけて、原価計算表とアレルゲン・栄養成分の表示の下書きを作ります。規格書が無い、成分表に近い食品が無いなど、表示の根拠が足りない食材も挙げます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/n8n/Python/Zapier
- 対象業界
- 宿泊/小売/製造/飲食
- 対象部門
- 品質管理/研究開発
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 属人化している/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 生成
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 開発担当が試作を終え、共有シートにレシピを書く
- 開発担当が単価表を開き、食材ごとに品目と単価を探して原価を計算する
- 品質管理の担当が成分表を開き、食材ごとに近い食品を探して、熱量・たんぱく質・脂質・炭水化物・食塩相当量を計算する
- 同じ担当が、加工品の規格書を開いてアレルゲンを確かめ、表示の案を書く
- 規格書が無い食材や、成分表に近い食品が無い食材があれば、メモして購買部に規格書の取り寄せを頼む
- 原価が目標を超えていれば、開発担当に戻す
- 人開発担当が試作を終え、共有シートにレシピを書き、状態を「計算待ち」にする(書き方はこれまでどおり)
- 自動状態の変更をきっかけにワークフローが動き、レシピ、単価表、成分表の索引、規格書の一覧を集める
- 自動Claude API が、食材ごとに単価表の品目と成分表の食品番号を対応づけ、量を重さに直す候補を出す
- 自動プログラムが、対応づけと重さから原価と栄養成分を計算する
- 自動規格書がある加工品は、Claude API が規格書のアレルゲンの欄を読み取る
- 自動Claude API が、原価計算表と表示の下書き、根拠の足りない食材の一覧をまとめる
- 人品質管理の担当が、対応づけの理由と根拠の足りない食材を確かめる
- 人開発担当が原価を見て、目標を超えていれば試作に戻る
- 人根拠の足りない食材について、購買部に規格書の取り寄せを頼む
各工程の詳しい説明を読む
- 開発担当が試作を終え、共有シートにレシピを書く
- 開発担当が単価表を開き、食材ごとに品目と単価を探して原価を計算する
- 品質管理の担当が成分表を開き、食材ごとに近い食品を探して、熱量・たんぱく質・脂質・炭水化物・食塩相当量を計算する
- 同じ担当が、加工品の規格書を開いてアレルゲンを確かめ、表示の案を書く
- 規格書が無い食材や、成分表に近い食品が無い食材があれば、メモして購買部に規格書の取り寄せを頼む
- 原価が目標を超えていれば、開発担当に戻す
(a)同じレシピを3回読んでいる。 2番目と3番目と4番目は、どれも「レシピの食材を、別の表の項目に対応づける」作業です。対応づけの判断が3回行われ、3回とも少しずつ違います。 開発担当は「バター」を業務用の有塩バターの品目に、品質管理の担当は成分表の食塩不使用バターに当てていた、ということが起きます。
(b)量の単位がそろっていない。 「1/2個」「ひとかけ」「80cc」は重さではありません。原価も栄養も重さで計算するので、誰かがどこかでグラムに直しています。その換算が担当者の頭の中にあり、シートには残っていません。
(c)根拠の足りない食材が直前に見つかる。 自家製のソースの中で使っている市販のルウの規格書が無い、新しく取引を始めた仕入先のチーズの規格書がまだ届いていない。4番目の作業で初めて気づき、販売開始の数日前に規格書を急いで取り寄せることになります。
(d)担当者によって成分表の選び方が違う。 成分表には同じ食材でも状態の違う食品が並んでいます。生か、ゆでたものか、油で炒めたものか。どれを選ぶかで熱量が変わり、その判断の理由が残りません。
- 【人】 開発担当が試作を終え、共有シートにレシピを書き、状態を「計算待ち」にする(書き方はこれまでどおり)
- 【自動】 状態の変更をきっかけにワークフローが動き、レシピ、単価表、成分表の索引、規格書の一覧を集める
- 【自動】 Claude API が、食材ごとに単価表の品目と成分表の食品番号を対応づけ、量を重さに直す候補を出す
- 【自動】 プログラムが、対応づけと重さから原価と栄養成分を計算する
- 【自動】 規格書がある加工品は、Claude API が規格書のアレルゲンの欄を読み取る
- 【自動】 Claude API が、原価計算表と表示の下書き、根拠の足りない食材の一覧をまとめる
- 【人】 品質管理の担当が、対応づけの理由と根拠の足りない食材を確かめる
- 【人】 開発担当が原価を見て、目標を超えていれば試作に戻る
- 【人】 根拠の足りない食材について、購買部に規格書の取り寄せを頼む
7番目が、この設計の分かれ目です。人が見るのは計算の結果ではありません。 計算はプログラムが行うので、確かめるのは対応づけが正しいかと、根拠が足りているかだけです。全部の数字を電卓で検算する設計にすると、75分はほとんど減りません。
版違いでは、前の版の対応づけを引き継ぎます。 変わった食材だけを対応づけし直すので、2回目以降の試作は数分で計算が返ります。
02今回想定するシステム構成
試作レシピ(共有シート、自由な書き方) ▼【トリガー】状態を「計算待ち」に変更 Make ├──▶ 単価表、成分表の索引、規格書の一覧、前の版の対応づけを集める ▼ Claude API ── 食材の対応づけ │ ① 単価表の品目 ② 成分表の食品番号(状態も含めて) │ ③ 量を重さに直す換算と、その根拠 ④ 自家製の中間品の展開 ▼ Python ── 原価と栄養成分(5項目)の計算 ▼ Claude API ── 規格書のアレルゲンの欄の読み取り ▼ Claude API ── 原価計算表・表示の下書き・根拠の足りない食材の一覧 ▼ 【品質管理の担当が対応づけと根拠を確認】 ── 開発担当へ戻す/規格書を取り寄せる
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Claude API(食材の対応づけ、規格書の読み取り、下書きの作成) | OpenAI API、Gemini API |
| 集計 | Python(原価と栄養成分の計算) | Google Apps Script |
| 連携 | Make(共有シートの監視とファイルの受け渡し) | n8n、Zapier |
| 保管 | Google Drive(規格書、計算表、対応づけの記録) | SharePoint、Box |
単価表と成分表と規格書は、新しく足すものではありません。 新しく作るのは中間品の配合表と換算表の2つです。中間品の配合表は、自家製のソースやドレッシングを原材料に展開する表で、換算表は「玉ねぎ1個」「大さじ1」を重さに直す自社の取り決めです。
栄養成分は、データベースの値から計算で求めます。 消費者庁の資料では、表示する値は分析や計算等によって得るとされ、データベース等から得られた個々の原材料の値を計算して表示値を求めることも可能とされています。手順は、製造レシピ(原材料の配合量、調理加工工程等)を決め、原材料ごとに日本食品標準成分表の値や原材料メーカーから入手した値を用意し、可食部の重量に対する含有量を計算する、という流れです。
データベースには、日本食品標準成分表(八訂)増補2023年を使います。 文部科学省のページでは、電子書籍(PDF形式)とデータ(Excel形式)が掲載され、令和8年3月27日付の正誤表も公開されています。成分表のデータは表計算の形式なので、取り込むときに正誤表を当ててから、プログラムが引く索引にします。
加工品の規格書は、Claude API にPDFのまま渡します。 Claude のドキュメントでは、PDFの中の文章・画像・図表・表について質問でき、1回のリクエストの上限は32MB、ページ数は600ページまで(コンテキストウィンドウが100万トークン未満なら100ページまで)、パスワードや暗号化のかかったPDFは扱えないとされています。規格書のアレルゲンの欄は○×の表になっていることが多く、各ページが画像としても処理されることが読み取りに効きます。
03どうやって実装するのか
処理の起点を決める
共有シートでレシピの状態を「計算待ち」に変えたことを起点にします。 開発担当は試作の途中で何度もシートを書き換えるので、書き換えのたびに動かすと、書きかけのレシピで計算が走ります。 状態を変えるという1つの操作を、「この版で計算してよい」という合図にします。
試作の版ごとに、別の行として扱います。 版番号をシートに持たせ、ワークフローは「メニューコード+版番号」で前の版を探します。前の版があれば、その対応づけを引き継ぎ、変わった食材だけをAIに渡します。
計算が終わったら、状態を「確認待ち」に変えて担当者へ通知します。状態が「計算待ち」のまま1時間を超えたものは、失敗として担当者に知らせます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 試作レシピ | 食材名、量と単位、調理の工程、出来上がりの重さ、1食分の数 | 共有シート |
| 単価表 | 品目コード、品目名、規格、仕入単価、単位、歩留まり | 購買部の単価表 |
| 成分表の索引 | 食品番号、食品名、100gあたりの熱量と4成分 | 成分表のデータ(正誤表を反映) |
| 規格書の一覧 | 品目コード、規格書のファイル、版と受け取った日 | 規格書の共有フォルダ |
| 中間品の配合表 | 自家製のソース等の原材料と配合 | 商品開発部で作る |
| 換算表 | 「1個」「大さじ1」「1cc」などを重さに直す取り決め | 商品開発部で作る |
質を決めるのは、いちばん下の2つです。 中間品の配合表が無ければ、「自家製デミ」を原材料に展開できず、中に入っている小麦粉やバターが表示から落ちます。 換算表が無ければ、AIは「玉ねぎ1/2個」を自分の知識で重さに直し、その数字が毎回変わります。
単価表の歩留まりは、原価のために持ちます。 玉ねぎは皮をむいて使うので、仕入の重さと使う重さが違います。レシピの量が可食部の重さなら、原価は歩留まりで割り戻して出します。 成分表の値は可食部あたりなので、栄養の計算には可食部の重さをそのまま使います。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| レシピの行 | 共有シート(状態が「計算待ち」の行) | 対応づけの対象 |
| 単価表の候補 | 単価表を食材名で絞った上位の候補 | AIに選ばせる品目の範囲 |
| 成分表の候補 | 成分表の索引を食材名で絞った上位の候補 | AIに選ばせる食品番号の範囲 |
| 規格書 | 品目コードから引いた最新の版のPDF | アレルゲンの欄の読み取り |
| 前の版の対応づけ | この構成が保存したJSON | 変わっていない食材の引き継ぎ |
単価表と成分表は、全部をAIに渡しません。 成分表は食品の数が多く、全部を渡すと入力が大きくなるうえ、似た名前の食品から根拠なく選ぶことが増えます。ワークフローの側で食材名から候補を絞り、候補の中から選ばせます。 候補に正解が無いときは、選ばずに「該当なし」と返させます。
規格書は、受け取った日が新しい版だけを渡します。 古い版のアレルゲンの欄を読むと、配合の変わった加工品を古い情報のまま表示することになります。
AIへ渡す前に整形する
- レシピの行の確認 … 食材名・量・単位が空の行が無いかを確かめます。空の行があれば計算を止めて開発担当に戻します
- 単位の正規化 … 「g」「グラム」「g」、「cc」「ml」をそろえます。全角と半角もそろえます
- 中間品の展開 … 中間品の配合表にある名前は、原材料の行に展開してから渡します。中間品の中の中間品も、最後まで展開します
- 候補の絞り込み … 食材名ごとに、単価表と成分表から上位の候補を引きます
- 前の版との差分 … 前の版と同じ食材・同じ量の行は、対応づけを引き継ぎます
- 規格書の確認 … 加工品の品目に規格書があるか、パスワードが無いか、32MB以内かを確かめます
- 成分表の版の確認 … 索引に正誤表が反映されているかを、取り込んだ日で確かめます
3番目を軽く見ないでください。 「自家製デミ」の中には市販のルウが、ルウの中には小麦粉と乳が入っています。1段だけ展開すると、2段目のアレルゲンが落ちます。 展開できない名前が残ったら、計算を止めて配合表の追加を頼みます。
AIに処理させる
させるのは、食材ごとに単価表の品目と成分表の食品番号を候補から選び、量を重さに直す換算を示し、その理由を書くことです。 加えて、規格書があればアレルゲンの欄を読み取り、最後に計算結果を下書きの形にまとめます。
| 見るもの | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 単価表の品目 | 食材名と規格から、候補の中で最も近いものを選ぶ | 候補に無ければ not_in_price_list |
| 成分表の食品番号 | 食材の状態(生・ゆで・油いため等)まで合わせて選ぶ | 近い食品が無ければ no_composition_match |
| 重さへの換算 | 換算表にある取り決めを使う | 換算表に無ければ unit_unknown |
| アレルゲン | 規格書の欄を、品目ごとに写す | 規格書が無ければ spec_missing |
| 根拠の足りない食材 | 上の4つのどれかに当たる食材 | 一覧にして、表示の前に止める |
2行目が、この構成でいちばん判断の要る対応づけです。 消費者庁の資料の例では、日本食品標準成分表の「食パン」の原料配合割合等を確認し、当該食品と類似性が高いことを確認してから値を使っています。AIには、選んだ食品番号と、なぜその状態を選んだかを必ず書かせます。
4行目では、「含まない」と「書かれていない」を分けます。 規格書の欄が「−」なのか空欄なのかで意味が変わることがあり、読み取れないものは読み取れないと返させます。
| させないこと | 理由 |
|---|---|
| 熱量や成分の数値を書く | 数値はプログラムが成分表の索引から引く |
| 候補に無い品目・食品番号を作る | 候補の外から選ぶと、根拠の無い値になる |
| 換算表に無い重さを推測する | 「玉ねぎ1個」の重さが毎回変わる |
| 規格書が無い食材のアレルゲンを推測する | 「一般的に含まない」は、表示の根拠にならない |
| 表示してよいかの判断 | 品質管理の担当が決める |
1行目がいちばん起きやすい失敗です。 成分表の食品名を渡すと、AIはそのおおよその熱量を知っていて、書けてしまいます。 書かせた瞬間、成分表の正誤表を当てた値と、AIが覚えている値の区別がつかなくなります。
指示内容を固定する
あなたは飲食チェーンの品質管理部で、新メニューの試作レシピの食材を
単価表と日本食品標準成分表に対応づける立場です。
渡した候補と換算表だけを根拠にしてください。
【食材ごとにすること】
1. price_item_code ... 単価表の候補から、食材名と規格が最も近い品目を1つ選ぶ
2. food_number ...... 成分表の候補から、食材の状態(生・ゆで・油いため等)まで
合わせて食品番号を1つ選ぶ
3. grams ........... 量を可食部の重さに直す。換算表の取り決めだけを使う
4. reason .......... 選んだ理由と、使った換算の行
5. status .......... ok / not_in_price_list / no_composition_match /
unit_unknown / spec_missing のどれか
【厳守事項】
- 候補に当てはまるものが無ければ、選ばずに該当の status にしてください。
候補の外から品目や食品番号を作らないでください。
- 熱量・たんぱく質・脂質・炭水化物・食塩相当量の数値は書かないでください。
数値は別の工程で成分表から引きます。
- 換算表に無い単位(「ひとかけ」「少々」など)は grams を空にし、
unit_unknown にしてください。一般的な重さで埋めないでください。
- 調理の工程に「炒める」「ゆでる」とあれば、食品番号はその状態のものを優先し、
無ければ理由にその旨を書いてください。
- 規格書が無い加工品は spec_missing にしてください。
アレルゲンを含まないと推測しないでください。
- 「いつもの」「前と同じ」のような書き方は、前の版の対応づけがあれば引き継ぎ、
無ければ not_in_price_list にしてください。
【レシピ】{recipe_rows}
【単価表の候補】{price_candidates}
【成分表の候補】{composition_candidates}
【換算表】{unit_rules}
【規格書のある品目】{spec_index}
「数値は書かないでください」を明記しないと、親切に書きます。 食品番号を選ぶついでに熱量を添えるのは、AIにとって自然な振る舞いです。禁じるのは、数値を書くことそのものです。 書かれた数値はプログラムが使わなくても、確認の画面に出ると人が信じます。
「一般的な重さで埋めない」も同じ理由です。 「バター ひとかけ」を10gと置くのは、ほとんどの場合それらしい値です。それらしいから、誰も換算表に足さないまま運用が続きます。
出力形式を固定する
対応づけは、次の形のJSONで受け取ります。
{
"menu_code": "",
"version": 0,
"lines": [
{ "line_no": 0, "recipe_text": "", "price_item_code": "", "food_number": "",
"grams": "", "reason": "",
"status": "ok | not_in_price_list | no_composition_match | unit_unknown | spec_missing" }
],
"allergens_from_specs": [
{ "price_item_code": "", "spec_version": "", "item": "",
"mark": "contains | not_contains | not_stated | unreadable", "evidence": "" }
]
}
返答の形は、Claude API の構造化出力で固定します。 ドキュメントでは、output_config.format にJSONスキーマを指定すると返答がスキーマに従うとされ、enum が使えるので status と mark の値を限れます。 オブジェクトには additionalProperties: false が必要です。一方、minimum などの数値の制約は使えないので、grams は文字列で受け、数値として読めるかをプログラムで確かめます。
原価と栄養の計算はプログラムが行い、次の表にまとめます。
| 列 | 中身 |
|---|---|
| 食材 | レシピの書き方のまま |
| 品目・単価・歩留まり | 単価表から |
| 可食部の重さ | AIの換算を人が確かめたもの |
| 原価 | 重さ ÷ 歩留まり × 単価 |
| 食品番号・100gあたりの値 | 成分表の索引から |
| 熱量と4成分 | 可食部の重さ × 100gあたりの値 ÷ 100 |
| 根拠の状態 | status |
表示の下書きには、計算で求めた値であることを明記します。 消費者庁の資料では、表示された一定の値が許容差の範囲を超える可能性がある場合、合理的な推定により得られた値として表示することも可能とされ、その場合は「推定値」または「この表示値は、目安です。」のいずれかの文言を含む表示と、表示された値の設定の根拠資料の保管が必要とされています。下書きには「推定値」を入れ、計算表そのものを根拠資料として残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有シート | Make のトリガーと書き込み | 状態の変更を検知し、計算の結果を別のシートに返す |
| 単価表・成分表の索引 | ワークフローから読み取り | 候補の絞り込み |
| 規格書の共有フォルダ | Google Drive の読み取り | 最新の版のPDF |
| Claude API | API呼び出し | 対応づけ、規格書の読み取り、下書き |
| 計算のプログラム(Python) | ワークフローから呼び出し | 原価と栄養成分 |
| 購買部 | 通知 | 根拠の足りない食材の一覧 |
レシピのシートそのものは書き換えません。 結果は「計算結果」の別のシートに版ごとに書き、開発担当の書いた元のレシピには手を付けません。 元の書き方が残っていないと、対応づけの誤りを後から追えません。
メニュー表やWebの表示には書き込みません。 この構成が出すのは下書きまでで、表示に載せるのは品質管理の担当が承認したものだけです。
人が確認する
人が見るのは、ok 以外の行と、成分表の食品番号の理由です。 原価と栄養の数字そのものは、プログラムが計算しているので検算しません。
- 根拠の足りない食材を先に見る …
spec_missingとno_composition_matchは、表示の前に必ず解消します。規格書の取り寄せは、試作の段階で頼みます unit_unknownを換算表に足す … 「ひとかけ」を何gとするかを決め、換算表に1行足します。次の試作からは自動で換算されます- 食品番号の理由を読む … 状態の選び方(生か、炒めたものか)が工程と合っているかを確かめます
- 規格書のアレルゲンを確かめる …
not_statedとunreadableは、規格書を開いて目で見ます - 原価を開発担当に返す … 目標を超えていれば、どの食材が効いているかを計算表で示します
- 判定を覆したら記録する … どの食材の対応づけを、何に変えたかを残します
1番目を省かないでください。 根拠の足りない食材を残したまま表示に進むと、アレルゲンの欄の空白が「含まない」として店頭に出ます。 食物アレルギーのお客様にとって、いちばん危ない誤りです。
目標は、1件24分です。 版違いでは確かめる行が数行に減るので、初回の試作に時間を使い、2回目以降は差分だけを見る形になります。
例外に対処する
| 起きること | 対応 |
|---|---|
| レシピに量や単位が空の行がある | 計算を止めて開発担当に戻す |
| 中間品が配合表に無い | 展開できないので止める。配合表の追加を頼む |
| 単価表に候補が無い(新しい食材) | not_in_price_list。購買部に見積と品目登録を頼む |
| 成分表に近い食品が無い | no_composition_match。原材料メーカーの値を取り寄せる |
| 換算表に無い単位 | unit_unknown。換算表に行を足すまで栄養を出さない |
| 規格書にパスワードがかかっている | 扱えないので、仕入先に解除したものを頼む |
| 規格書の版が古い | 最新の版を取り寄せるまで spec_missing 扱い |
| 出来上がりの重さが書かれていない | 1食分の値が出せない。開発担当に計量を頼む |
| API が応答しない | 状態を「計算待ち」のまま残し、再実行する |
上の5行で例外のほとんどを占めます。 どれもAIの問題ではなく、レシピの書き方と、配合表・換算表の整備の問題です。 試作を重ねるほど換算表と配合表が育ち、例外は減っていきます。
記録を残す
- 試作レシピの版ごとの写しと、計算を始めた日時
- AIに渡した候補と換算表、そのとき使った成分表の索引の版
- AIが返したJSONの全文と、人が直した後の対応づけ
- 計算表(原価と栄養成分)と、使った規格書の版
- 表示の下書きと、承認した担当者・日時
- 根拠の足りない食材と、解消した日
計算表と使った規格書の版を残すのは、根拠資料として保管するためです。 推定値で表示するときは、表示された値の設定の根拠資料を保管しなければならないとされています。販売を始めた後に「この熱量はどこから来たか」と聞かれたとき、答えられる形で残します。
最後の行は、仕入先との取引の材料になります。 規格書がいつも遅れる仕入先が分かれば、新しい食材を試すときに早めに頼めます。
04実装レベルの3段階
最小構成では、計算を人がしています。 対応づけが使えるかを確かめるための段階で、月40件には使えません。 半自動化で、1件75分が24分になります。この段階が本記事の想定です。 対応づけと計算と下書きが自動になり、人に残るのは根拠の足りない食材の解消と、対応づけの理由の確認です。 本格構成は、レシピ管理システムを持っている場合に進めます。 承認した配合をそのまま正式なレシピとして登録できれば、店舗の調理マニュアルと表示の根拠が同じデータになります。 ただし、正式なレシピの登録は承認の手続きと結びつくので、半自動化で換算表と配合表が育ってからにします。
05工数削減シミュレーション
導入後 40件 × 24分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 季節メニューや期間限定メニューを毎月のように出し、試作のたびに原価とアレルゲン・栄養成分を計算し直している飲食チェーン。試作レシピが手書きのメモや自由な書式の表で、食材の名前が単価表や成分表の名前とそろっていない場合。原価・アレルゲン・栄養の計算が別々の担当者に分かれ、同じレシピを3回読み直している場合。仕入品の規格書がそろっていない食材を、表示の直前になって見つけることが多い場合。
- メニューの改定が年に1〜2回で、試作の数が少ない場合。栄養成分を分析機関の分析値だけで表示しており、計算で値を出していない場合。栄養強調表示(低カロリー、減塩など)をする商品(強調する成分は定められた方法で得た値が必要で、計算による推定値は使えません)。なお、アレルゲンを含まないと表示してよいかの最終判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の試作レシピから5件を選ぶ(うち1件は、自家製のソースを使ったもの)
- その5件について、当時の原価計算と栄養成分の計算、アレルゲンの確認の結果を集める
- レシピと、単価表と成分表から食材名で絞った候補を、手元の Claude の画面に貼る
- 「食材ごとに、単価表の品目と成分表の食品番号を候補から1つずつ選び、選んだ理由を書いてください。候補に無ければ選ばないでください。数値は書かないでください」と指示する
- 返ってきた対応づけで表計算の計算をし、当時の結果と突き合わせる
5件は必ず、当時の担当者と一緒に見てください。 対応づけが違ったときに、どちらが正しいかを決められるのはその担当者だけです。
| 出てきた内容 | 判断 |
|---|---|
| 当時と同じ対応づけで、違いに理由がある | 換算表と配合表を作り、ワークフローに進む |
| 熱量などの数値を書いてきた | 指示の書き方で直る。構成は有効 |
| 「ひとかけ」などを勝手に重さにした | 換算表が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、これまで担当者の頭の中にあった換算の取り決めが、表になっていなかったということです。その場合は、5件で出てきた単位から換算表を作り始めてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが熱量などの数値を書く | 数値を書かないよう明記し、プログラムは成分表の索引の値だけを使う |
| 規格書の無い食材が「含まない」に見える | spec_missing を一覧にし、表示の前に止める |
| 中間品の中の中間品が展開されない | 最後まで展開し、残ったら止める |
| 「ひとかけ」を一般的な重さで埋める | unit_unknown にさせ、換算表に足すまで栄養を出さない |
| 成分表の状態(生・ゆで等)が工程と合わない | 理由を書かせ、工程と状態を人が照らす |
| 成分表の正誤表を当てていない | 取り込むときに当て、索引に版を持たせる |
| 成分表を全部渡して似た食品を選ぶ | 候補を絞ってから選ばせる |
| 古い版の規格書を読む | 受け取った日が新しい版だけを渡す |
| 歩留まりを考えずに原価を出す | 単価表に歩留まりの列を持たせる |
| 栄養強調表示に推定値を使う | 強調する成分は推定値で表示できない。 分析値を取る |
| 下書きをそのまま表示に載せる | 承認したものだけを載せる |
上の2行が、この構成の失敗のほとんどです。 どちらも「それらしい値が入っている」という同じ見た目から出発しています。数値と根拠の出どころを、プログラムと規格書に限っているかどうかで、運用に乗るかが決まります。
下から2行目は、商品企画の段階で効いてきます。 「低カロリー」をうたう企画が出たら、消費者庁の資料のとおり、強調する熱量や成分を含めて全ての成分について推定値による表示はできません。 企画の段階で、分析にかける日程を組みます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 未発表のメニューのレシピと配合、仕入単価と原価、仕入先の規格書です。個人情報は扱いません。
- 未発表のレシピと原価は営業秘密として扱う … 新メニューの配合と原価は、発表前に外へ出ると企画そのものが無駄になります。利用する生成AIのサービスの入力データの扱い(学習への利用、保持期間)を確かめてから使います
- 仕入単価を外部へ渡す範囲を絞る … 対応づけに単価そのものは要りません。候補として渡すのは品目コードと品目名・規格までにし、単価はプログラムの側で掛けます
- 規格書の扱いを仕入先との約束に合わせる … 規格書には仕入先の配合の情報が含まれます。外部のサービスで処理してよいかを、取引の秘密保持の取り決めと照らします
- この構成はアレルゲンの表示の判断を代替しない … 消費者庁のページには、外食・中食での食物アレルギーについての案内もあります。含まないと表示してよいか、混入の可能性をどう示すかは、品質管理の担当が決めることです
- 規格書の変更を追う仕組みを別に持つ … 消費者庁のページでは、カシューナッツの特定原材料への移行に伴う改正が案内されています。制度の側も変わるので、この構成の対象品目の一覧も、改正のたびに見直します
- 承認の記録を残す … 表示に載せた値と、承認した担当者・日時を、計算表と一緒に保存します
誤りが起きた場合のリスクは、含むアレルゲンを表示から落とすことと、栄養成分の値を誤って出すことの2つです。 前者は中間品の展開が浅いか、規格書の無い食材を見落とすと起き、後者はAIが書いた数値や推測の換算を使うと起きます。どちらも「根拠の無いもので埋める」ことから出ているので、そこを設計で止めます。
10まず何から始めるか
1週目:換算表と中間品の配合表を作り始める
よく使う単位(「1個」「大さじ1」「ひとかけ」「1cc」)を食材ごとに重さに直す換算表と、自家製のソース・ドレッシングの配合表を作ります。全部をそろえる必要はありません。 今期のフェアで使う中間品から始めます。
2週目:先月の5件で試す
第8章の手順で、先月の試作レシピ5件の対応づけを手元の Claude の画面で選ばせます。当時の担当者と一緒に、数値を書いていないか、候補の外から選んでいないかを最優先で見ます。
3週目:成分表の索引を作る
日本食品標準成分表のデータを取り込み、令和8年3月27日付の正誤表を当てて、食品番号・食品名・100gあたりの値の索引にします。単価表には歩留まりの列を足します。
4週目:共有シートから計算までをつなぐ
Make で共有シートの状態を見張り、候補を絞って Claude API の構造化出力で受け、計算のプログラムで原価と栄養を出すところまで作ります。この時点では表示の下書きを作らず、計算表だけを見ます。
2か月目: 規格書の読み取りと、根拠の足りない食材の一覧を足します。人が対応づけを直した件数を毎週数えます。3か月目以降: 表示の下書きを足し、1件75分が何分になったかを実測します。換算表と配合表が今期のメニューをすべて覆い、unit_unknown がほとんど出なくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
output_config.format にJSONスキーマを指定すると返答がスキーマに従うこと。enum が使えること。オブジェクトに additionalProperties: false が必要なこと。minimum などの数値の制約がサポートされないこと | Claude Docs: Structured outputs | 2026-10-06 |
| PDFの文章・画像・図表・表について質問できること。リクエストの上限が32MB、ページ数が600(コンテキストウィンドウが100万トークン未満では100)であること。パスワード・暗号化のないPDFに限ること。各ページが画像としても処理されること | Claude Docs: PDF support | 2026-10-06 |
| 表示する値は分析や計算等によって得ること。データベース等から得た個々の原材料の値を計算して表示値を求めることも可能なこと。その手順(製造レシピの決定、日本食品標準成分表や原材料メーカーの値の用意、可食部の重量に対する計算)。類似性が高いことを確認して値を用いる例。合理的な推定により得られた値の表示に「推定値」または「この表示値は、目安です。」の文言と根拠資料の保管が必要なこと。栄養強調表示では全ての成分について推定値による表示ができないこと | 消費者庁: 初めて栄養成分表示をする方へ | 2026-10-06 |
| 容器包装された加工食品に特定原材料を含む旨の表示が義務付けられていること。カシューナッツの特定原材料への移行に伴う改正等が案内されていること。外食・中食の食物アレルギーについての案内があること | 消費者庁: 食物アレルギー表示に関する情報 | 2026-10-06 |
| 日本食品標準成分表(八訂)増補2023年が電子書籍(PDF形式)とデータ(Excel形式)で掲載されていること。令和8年3月27日付の正誤表が公開されていること | 文部科学省: 日本食品標準成分表(八訂)増補2023年 | 2026-10-06 |
表示してよいかの最終判断は、品質管理の担当者と、必要に応じて保健所や専門家に確認してください。 本記事は、公開資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0575)についてのご相談はこちらから。
