飲食店の毎日の廃棄記録と仕込みの記録から品目ごとの廃棄を集計し、翌月の仕込み量の見直し案を店長へ返す
店舗が毎日つける廃棄記録と仕込みの記録を月末にまとめ、品目ごと・曜日ごとの廃棄の量と率を集計します。使った量の実績から翌月の曜日ごとの仕込み量の目安を計算し、今の仕込み表との差を見直し案にして店長へ返します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- 介護/宿泊/飲食
- 対象部門
- 生産/購買
- 対象業務
- 比較検討/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 店舗が毎日、仕込みの記録と廃棄の記録をフォームで出す
- 月初に、本部の担当が店舗のタブを開き、品目ごとに前月の仕込み量と廃棄量を合計する
- 廃棄の理由の欄とメモを読み、仕込み過ぎによるものを拾う
- 曜日ごとに廃棄が多い日を見つけ、仕込み表の量と見比べる
- 減らす量を考え、店長へのメールに「水曜のキャベツは2.5kgにしてはどうか」と書く
- 店長が返事をし、仕込み表を直すかどうかを決める
- 本部の担当が、直した仕込み表を確かめる
- 人店舗が毎日、仕込みの記録と廃棄の記録をフォームで出す(今までどおり)
- 自動毎月1日の朝、スクリプトが前月分の記録を店舗・品目・日付ごとにそろえる
- 自動記録の無い日に印を付け、単位を品目マスタの単位にそろえる
- 自動理由が「その他」の廃棄と、メモの付いた廃棄を Gemini API に送り、理由を分けさせる
- 自動品目ごと・曜日ごとに、仕込み量・廃棄量・使った量・廃棄率を集計する
- 自動直近8週の同じ曜日の使った量から、翌月の曜日ごとの仕込み量の目安を計算する
- 自動目安と今の仕込み表の差が大きい品目を店舗ごとに選び、Gemini API に見直し案の文面を作らせる
- 自動店舗ごとの見直し案を一覧のシートに書き、店長宛てのメールの下書きを作る
- 人本部の担当が見直し案を読み、送ってよいものを店長へ送る
- 人店長が、仕込み表を直すかを決め、直した量を仕込み表に書く
各工程の詳しい説明を読む
- 店舗が毎日、仕込みの記録と廃棄の記録をフォームで出す
- 月初に、本部の担当が店舗のタブを開き、品目ごとに前月の仕込み量と廃棄量を合計する
- 廃棄の理由の欄とメモを読み、仕込み過ぎによるものを拾う
- 曜日ごとに廃棄が多い日を見つけ、仕込み表の量と見比べる
- 減らす量を考え、店長へのメールに「水曜のキャベツは2.5kgにしてはどうか」と書く
- 店長が返事をし、仕込み表を直すかどうかを決める
- 本部の担当が、直した仕込み表を確かめる
(a)16店舗のうち数店舗しか見られない。 1店舗30品目を集計して曜日ごとに見比べると、1店舗あたり1時間半ほどかかります。月初の他の業務と重なると、廃棄の金額が大きい数店舗だけを見て終わります。 残りの店舗の仕込み表は、何か月も変わりません。
(b)理由を分けずに数えてしまう。 冷蔵庫の不調で捨てた日や、団体の予約が直前に取り消された日の廃棄も、合計すれば同じ1kgです。メモを読み飛ばして合計すると、その品目は「仕込み過ぎ」に見えます。 減らす案を出して、翌月に足りなくなった店舗があります。
(c)記録の無い日を「廃棄ゼロ」と数える。 閉店後の記録が忘れられた日は、廃棄の行がありません。合計すると、記録を忘れた日の多い店舗ほど廃棄が少なく見えます。 記録の無い日と、廃棄が本当にゼロの日の区別がついていません。
(d)見直しの量が担当者の勘で決まる。 「水曜は多いから2.5kgに」の2.5は、担当者がその場で決めています。店長から「なぜ2.5なのか」と聞かれても答えられず、話が進みません。
- 【人】 店舗が毎日、仕込みの記録と廃棄の記録をフォームで出す(今までどおり)
- 【自動】 毎月1日の朝、スクリプトが前月分の記録を店舗・品目・日付ごとにそろえる
- 【自動】 記録の無い日に印を付け、単位を品目マスタの単位にそろえる
- 【自動】 理由が「その他」の廃棄と、メモの付いた廃棄を Gemini API に送り、理由を分けさせる
- 【自動】 品目ごと・曜日ごとに、仕込み量・廃棄量・使った量・廃棄率を集計する
- 【自動】 直近8週の同じ曜日の使った量から、翌月の曜日ごとの仕込み量の目安を計算する
- 【自動】 目安と今の仕込み表の差が大きい品目を店舗ごとに選び、Gemini API に見直し案の文面を作らせる
- 【自動】 店舗ごとの見直し案を一覧のシートに書き、店長宛てのメールの下書きを作る
- 【人】 本部の担当が見直し案を読み、送ってよいものを店長へ送る
- 【人】 店長が、仕込み表を直すかを決め、直した量を仕込み表に書く
9番目と10番目が、人の仕事として残る部分です。 本部は案を確かめて送り、店長が決めます。目安はあくまで過去8週の実績からの計算で、翌月の宴会の予約や新メニューの事情は店長しか知りません。
6番目を式に置いているのは、店長に「なぜこの量か」を説明できるようにするためです。 「過去8週の水曜に使った量のうち、多いほうから2番目の量」と書けば、店長は自分の記憶と照らせます。AIが出した量では、その説明ができません。
02今回想定するシステム構成
店舗のタブレット(Google フォーム:仕込みの記録・廃棄の記録) ▼ 記録のスプレッドシート(店舗ごとのタブ) 【トリガー】時間主導型(毎月1日の朝) Google Apps Script ├──▶ 前月分の取り出し、記録の無い日の印、単位の換算 ▼ Gemini API(有料の枠、構造化出力) │ ① 廃棄の理由の読み分け(その他・メモ付きの廃棄) ▼ Google Apps Script ── 品目×曜日の集計と、翌月の仕込み量の目安の計算 ▼ Gemini API ── 店舗ごとの見直し案の文面(差の大きい品目だけ) ▼ Google Apps Script ── 一覧のシートへ書き出し、店長宛てメールの下書き ▼ 【本部が確かめて送り、店長が仕込み表を直すかを決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | Gemini API(有料の枠、構造化出力) | Claude API、OpenAI API |
| シート | Google スプレッドシート(記録・品目マスタ・仕込み表・見直し案の一覧) | Microsoft 365 のブック |
| メール | Gmail(店長宛ての見直し案の下書き) | Outlook |
新しく足すのは、スクリプトと Gemini API の契約だけです。 フォームも記録のスプレッドシートも、仕込み表も今あるものを使います。スクリプトは仕込み表に書き込みません。 書き込むのは見直し案の一覧のシートだけで、仕込み表を直すのは店長です。
土台になるのは、Google Apps Script の時間主導型のトリガーです。 毎分から毎月までの間隔で関数を動かせ、インストール型トリガーは作成した人のアカウントで実行されます。 記録のスプレッドシートと仕込み表を読める本部の担当者のアカウントで作ります。
スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部へのURLの呼び出しは1日100,000回までとされています。16店舗分の集計と2種類の Gemini API の呼び出しを1回に詰めると6分を超えるので、店舗ごとに区切って続きから再開します。
Gemini API は有料の枠で使います。 扱うのは食材の記録で個人の情報はほとんど含みませんが、店舗ごとの廃棄の量は社内の経営の数字です。 規約では、有料のサービスでは送ったプロンプトや応答を製品の改善に使わないとされています。
構造化出力は、いまの公式の書き方に合わせます。 /v1beta/interactions に response_format を付け、mime_type を application/json、schema にJSONスキーマを入れます。理由の区分は enum で列挙し、決めた値の中から選ばせます。値の正しさはアプリケーションで確かめるよう公式の説明にもあるので、返ってきた数値はスクリプトの計算と照らします。
03どうやって実装するのか
処理の起点を決める
時間主導型のトリガーを、毎月1日の朝6時台に1つ置きます。 前月の最終日の廃棄の記録は閉店後に出されるので、深夜0時の直後ではなく、朝まで待ちます。 遅く出された記録があっても、6時台なら入っています。
処理は店舗ごとに区切ります。 1店舗分の取り出し・理由の読み分け・集計・目安の計算・見直し案の文面までを1まとまりにし、どの店舗まで終わったかをスクリプト プロパティに残します。 1回の実行が5分を過ぎたら区切り、同じ朝の15分後と30分後に置いた続きのトリガーで、残りの店舗から再開します。
全店舗が終わったら、本部の担当に1通のメールで知らせます。 「16店舗中16店舗の見直し案ができた。記録の無い日が多い店舗は2つ」のように、終わった数と、記録に問題のある店舗の数だけを書きます。 中身は一覧のシートで見ます。
月の途中でも、手で動かせるようにします。 新メニューの導入の後などに、本部が特定の店舗だけ見直したいときがあるからです。手で動かすときは、対象の店舗と期間をシートに書いてから実行します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 仕込みの記録 | 日付、店舗、品目、仕込んだ量、単位 | 記録のスプレッドシート(フォームの回答) |
| 廃棄の記録 | 日付、店舗、品目、廃棄した量、単位、理由(5区分)、メモ | 同上 |
| 品目マスタ | 品目コード、品目名、基本の単位、単位の換算(1バット=何kgなど)、日持ちの日数 | 品目マスタのシート |
| 仕込み表 | 店舗、品目、曜日ごとの仕込み量 | 仕込み表のシート |
| 営業の記録 | 店舗の休業日、貸切の日、臨時の営業時間の変更 | 営業カレンダーのシート |
| 翌月の予定 | 祝日、店舗ごとの大きな予約や催事(店長が書く) | 営業カレンダーのシート |
AIに渡すのは2種類です。 1回目の呼び出しには、理由が「その他」の廃棄とメモの付いた廃棄の行を、品目名と量とメモだけにして渡します。2回目の呼び出しには、スクリプトが計算し終えた集計と目安の数字と、翌月の予定を渡します。 生の記録をすべて渡すことはしません。
営業の記録が、目安の質を決めます。 貸切の日は仕込みも廃棄もふだんと違い、8週の中に貸切の水曜が1日混ざると、水曜の目安が大きく振れます。 営業カレンダーに貸切と休業の日が書かれていれば、その日を計算から外せます。
データの取得方法を決める
記録のスプレッドシートは、店舗ごとのタブの範囲をまとめて読みます。日付で前月分と、目安の計算に使う直近8週分を絞り込みます。 8週は前月より長いので、前々月の終わりの分も読みます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 直近8週の仕込みと廃棄の記録 | 店舗のタブ | 使った量と廃棄率、目安の計算 |
| 品目の単位と換算 | 品目マスタ | 単位をそろえる |
| 今の仕込み表 | 仕込み表のシート | 目安との差 |
| 休業・貸切の日 | 営業カレンダー | 計算から外す日 |
| 翌月の祝日と大きな予約 | 営業カレンダー | 見直し案の注意書き |
| 前月までの見直し案と、店長の返事 | 見直し案の一覧のシート | 先月の案が採られたか |
前月の見直し案と店長の返事も読みます。 先月「減らす」と返した品目が、今月どうなったかを見直し案に書けるからです。店長が採らなかった案を、毎月同じ形で繰り返し送ることも避けられます。
Gemini API の鍵はスクリプト プロパティに置き、UrlFetchApp で呼びます。 muteHttpExceptions を true にして、失敗の状態コードでも応答を受け取り、送り直すかを決めます。
AIへ渡す前に整形する
- 単位の換算 … 「バット」「個」「人前」で書かれた量を、品目マスタの換算で基本の単位にそろえます。換算の無い単位は「換算不能」として、その行を集計から外して数えます
- 記録の無い日の印 … 営業日なのに仕込みの記録も廃棄の記録も無い日に「記録なし」の印を付けます。廃棄ゼロとは扱いません
- 廃棄の記録だけが無い日 … 仕込みの記録はあるのに廃棄の記録が無い日は「廃棄の記録なし」とし、その日は使った量の計算から外します
- 休業・貸切の日の除外 … 営業カレンダーで休業と貸切の日を外します
- 使った量の計算 … 日ごとに、仕込んだ量から「仕込み過ぎ」と「期限切れ」の廃棄を引きます。調理の失敗と設備の不調の廃棄は、使った量に含めたままにします
- 曜日ごとの目安 … 直近8週の同じ曜日の使った量を並べ、多いほうから2番目の量を目安とします。外した日があって4日に満たない曜日は、目安を出しません
- 日持ちの考慮 … 日持ちが2日以上の品目は、曜日ごとではなく2日分をまとめて見ます
- 差の大きい品目の選択 … 目安と仕込み表の差が仕込み表の15%以上で、前月の廃棄の量が多い品目から、店舗ごとに最大5品目を選びます
5番目で理由を分けるのが、この構成の分かれ目です。 冷蔵庫の不調で捨てた分は、仕込み過ぎではありません。その分まで使った量から引くと、使った量が少なく見え、仕込みを減らしすぎる案になります。 だから「その他」とメモの付いた廃棄は、AIに理由を読み分けさせてから計算します。
6番目の「多いほうから2番目」は、欠品を避ける側に寄せた決め方です。 平均で目安を出すと、8週のうち半分ほどの日に足りなくなります。店長が欠品を嫌って仕込み表を多めにしている理由は、ここにあります。 決め方は本部と店長で話し合い、設定のシートで変えられるようにします。
AIに処理させる
させるのは2つです。 1つ目は、理由が「その他」の廃棄とメモの付いた廃棄の理由を、決めた区分の中から選び直すこと。2つ目は、スクリプトが選んだ差の大きい品目について、店長への見直し案の文面を書くことです。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 廃棄の理由の読み分け | メモから、仕込み過ぎ/期限切れ/調理の失敗/設備の不調/予約の取消/食べ残し のどれかを選ぶ | メモから分からなければ unknown |
| 選び直しの根拠 | 区分を決めたメモの語句 | 語句をそのまま写す |
| 見直し案の文面 | 品目ごとに、今の量・目安・差、廃棄の多い曜日、理由の内訳を2〜3行で | — |
| 店長に確かめる点 | 翌月の予定と照らして、目安どおりでよいかを問う質問 | 予定が無ければ書かない |
| 先月の案の振り返り | 先月の案が採られたか、採られた後の廃棄の変化 | 先月の案が無ければ書かない |
理由の区分に「予約の取消」を足しているのは、店舗のメモで多い型だからです。 仕込み過ぎに数えると、取消の多かった月の翌月に仕込みを減らす案が出ます。取消は仕込み表の問題ではないので、使った量の計算では仕込み過ぎと分けます。
| させないこと | 理由 |
|---|---|
| 目安の量の計算・修正 | 式で出した数字を変えさせない。店長に説明できなくなる |
| 仕込み表の量を決めること | 店長が決める |
| 入力に無い事情(天気、近隣の催事)の推測 | 確かめようのない理由が案に並ぶ |
| 店舗や店長の評価 | 見直し案の目的と違う |
| 食品の安全に関わる判断(日持ちを延ばすなど) | 衛生の基準は別に決まっている |
いちばん起きやすい失敗は、1行目です。 「水曜の目安2.6kg」と渡しても、AIは「2.5kgに減らすことをお勧めします」と丸めて書くことがあります。2.5という数字はどこからも出てこない数字で、店長に聞かれても説明できません。 文面の中の数字はスクリプトが入れた値と照らし、違えばその文面を作り直します。
指示内容を固定する
1つ目の指示(理由の読み分け)は次のとおりです。
あなたは飲食チェーンの本部で、店舗の廃棄記録を整理する立場です。
各行のメモを読み、廃棄の理由を次の区分から1つ選んでください。
【区分】
- over_prep ......... 仕込み過ぎ、余った、出なかった
- expired ........... 日持ちの期限を過ぎた
- cooking_error ..... 焦がした、味付けの失敗、落とした
- equipment ......... 冷蔵庫・冷凍庫・機器の不調
- reservation_cancel 予約の取消、団体の人数の減少
- plate_waste ....... お客様の食べ残し
- unknown ........... メモから判断できない
【厳守事項】
- メモに書かれていないことを推測しないでください。
- 量を書き換えないでください。量は出力に含めません。
- evidence には、区分を決めた語句をメモからそのまま写してください。
- 入力の row_id をそのまま返し、行を増やしたり減らしたりしないでください。
【廃棄の行(row_id、品目、メモ)】{rows}
2つ目の指示(見直し案)は次のとおりです。
あなたは飲食チェーンの本部で、店長に仕込み量の見直しを提案する文面を書く立場です。
目安の量は、すでに決まった式で計算されています。
「直近8週の同じ曜日に実際に使った量のうち、多いほうから2番目の量」です。
【してほしいこと】
品目ごとに、次を2〜3行で書いてください。
1. 今の仕込み表の量、目安の量、その差(渡した数字をそのまま使う)
2. 廃棄の多かった曜日と、廃棄の理由の内訳
3. 翌月の予定に照らして、店長に確かめる点(質問の形で)
4. 先月の提案があれば、その後の廃棄の変化
【厳守事項】
- 数字は入力の値をそのまま書いてください。丸めたり、計算し直したりしないでください。
- 仕込み表をこうすべきと決めつけず、「目安は○kgです。いかがでしょうか」の形にしてください。
- 入力に無い事情(天気、近隣の催事、季節の傾向)を理由として書かないでください。
- 調理の失敗と設備の不調の廃棄は、仕込み量の話と分けて書いてください。
- 店舗や店長の良し悪しを書かないでください。
- 目安が出ていない曜日(記録が足りない)は、その旨だけを書いてください。
【店舗と品目ごとの入力】{items}
【翌月の予定】{next_month_calendar}
【先月の提案と店長の返事】{last_month}
「目安の決め方」をプロンプトの冒頭に書いておくのが要点です。 決め方を知らないと、AIは目安を「予測値」と言い換え、機械が当てた数字のように書きます。 決め方を渡せば、「8週のうち多いほうから2番目」と、店長が自分で確かめられる言い方で書きます。
出力形式を固定する
理由の読み分けは次の形で受け取ります。 reason は7つの区分を enum で列挙します。
{
"results": [
{ "row_id": "S07-2026-09-17-012", "reason": "reservation_cancel",
"evidence": "宴会10名キャンセル" }
]
}
見直し案は次の形で受け取ります。
{
"store_code": "S07",
"items": [
{
"item_code": "V012",
"weekday": "水",
"current_qty": 3.0,
"target_qty": 2.6,
"unit": "kg",
"message": "",
"question_for_manager": "",
"has_target": true
}
]
}
1つ目の理由は、current_qty と target_qty をスクリプトが照合できることです。 AIに数字を返させるのは、文面の中の数字と並べて確かめるためです。返ってきた値がスクリプトの計算と1つでも違えば、その品目の文面は使いません。 message の中に出てくる数字も、正規表現で取り出して同じ照合をします。
2つ目は、has_target で「目安が出せない」を正式な答えにできることです。 記録の無い日が多い曜日は、無理に目安を作らず、「水曜は記録が4日に満たないため目安を出していません」と書いて返します。 記録を続けてもらう理由として、店長にも伝わります。
3つ目は、理由の読み分けの row_id で入力と出力を突き合わせられることです。 送った行と返った行の数が合わなければ、まとまりごと送り直します。
一覧のシートには、店舗・品目・曜日ごとに次の列を並べます。
| 列 | 中身 | 書く主体 |
|---|---|---|
| 仕込み量・廃棄量・使った量・廃棄率 | 前月の合計と曜日ごと | スクリプト |
| 理由の内訳 | 区分ごとの廃棄量 | スクリプト(区分はAI) |
| 今の仕込み表の量と目安 | 曜日ごと | スクリプト |
| 見直し案の文面と確かめる点 | message、question_for_manager | AI |
| 店長の返事 | 採る/採らない/一部採る と理由 | 人 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 記録のスプレッドシート | 読み取りのみ | 仕込みと廃棄の記録 |
| 品目マスタ・仕込み表・営業カレンダー | 読み取りのみ | 単位、今の量、外す日と翌月の予定 |
| Gemini API | UrlFetchApp で呼び出し | 理由の読み分けと、見直し案の文面 |
| 見直し案の一覧のシート | 書き込み | 集計・目安・文面と、店長の返事の欄 |
| Gmail | 下書きの作成 | 店長宛ての見直し案 |
仕込み表には書き込みません。 目安が正しくても、翌月に団体の予約が入っていれば、店長は多めに仕込みます。仕込み表は店長が自分で直し、直した量は翌月の「今の量」として読まれます。
店長宛てのメールは下書きまでにします。 本部の担当が案を読み、送らない品目を消してから送ります。店長の返事は、一覧のシートの返事の欄に本部が書き写すか、店長に直接書いてもらいます。
人が確認する
- 記録に問題のある店舗を先に見る … 「記録なし」「換算不能」の多い店舗は、見直し案より先に記録のつけ方を店長と話します
- 理由が
unknownの廃棄を見る … 量が多いものだけ、店舗にメモの意味を聞きます - 見直し案を読む … 数字の照合を通った案でも、翌月の予定と合わないものは送る前に消します
- 送る … 店舗ごとに、下書きを確かめてから送ります
- 店長の返事を残す … 採る・採らないと理由を、一覧のシートに書きます
1番目を省かないでください。 記録が欠けた店舗の目安は、欠けていない日だけから計算されています。その目安を送ると、店長は「記録をつけなくても本部が量を決めてくれる」と受け取ります。 記録が先です。
目標は、480行をならして1行1分です。 本部が見るのは差の大きい品目に絞った案と、記録に問題のある店舗で、残りの行は一覧を流し見るだけ、という想定です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 換算の無い単位で書かれている | その行を集計から外し、「換算不能」として数える。品目マスタに換算を足す |
| 営業日なのに記録が丸ごと無い | 「記録なし」の印。目安の計算から外し、店舗ごとの日数を本部に知らせる |
| 廃棄の量が仕込んだ量より多い | 前日の仕込みの残りを捨てた可能性がある。その日を外し、unknown の扱いで店舗に聞く |
| 同じ曜日の記録が4日に満たない | 目安を出さず、has_target を false にする |
| 新しい品目が仕込み表に加わった | 8週の記録がそろうまで目安を出さない |
| API が失敗の状態コードを返す | 最大2回送り直し、だめならその店舗を翌朝に回す |
| 文面の数字が計算と合わない | その品目の文面を作り直す。2回合わなければ数字だけの行にする |
| 6分に近づいた | どこまで終わったかを記録し、続きのトリガーで再開 |
3行目は、記録のつけ方の食い違いから起きます。 前日の残りを翌日の廃棄として書く店舗と、前日の廃棄として書く店舗があります。どちらに寄せるかを決めて、フォームの案内に書いておきます。
記録を残す
- 処理した月、店舗ごとの処理の結果、「記録なし」「換算不能」の件数
- 理由の読み分けの結果(
row_id、reason、evidence) - 店舗・品目・曜日ごとの集計と目安と、そのとき使った目安の決め方(「多いほうから2番目」など)
- 見直し案の文面と、送った日時
- 店長の返事(採る/採らない/一部採る)と、その理由
- 翌月の同じ品目の廃棄量
最後の2行を並べて残すのが、この構成を育てる材料です。 採った案の品目で翌月の廃棄が減ったか、欠品は起きなかったか。採られなかった案の理由が「宴会が多い時期」なら、営業カレンダーに書いてもらう事情が1つ増えます。
目安の決め方を変えたら、変えた月を記録します。 「多いほうから2番目」を「平均の1.2倍」に変えると、同じ記録から違う目安が出ます。どの月がどの決め方だったかが残っていないと、廃棄の増減の理由が追えません。
04実装レベルの3段階
本記事が想定するのは半自動化です。 案を送るのは本部、仕込み表を直すのは店長です。1行3分が1分になるのはこの段階です。 本格構成に進むのは、店長の返事と翌月の廃棄が半年ほどたまってからにしてください。 採った案で欠品が起きたかどうかが分からないうちに決め方を変えると、廃棄を減らす代わりに欠品を増やす方向に寄ります。
05工数削減シミュレーション
導入後 480件 × 1分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 10〜30店舗ほどの飲食チェーン、ホテルの宴会・レストラン部門、給食を出す施設などで、仕込みの量を店舗ごとの仕込み表で決めており、廃棄の記録を毎日つけている場合。記録を紙やスプレッドシートでつけているが、本部が月に一度まとめて見る時間が取れず、仕込み表が何か月も変わっていない場合。Google Workspace を使っていて、店舗のタブレットから Google フォームで記録をつけられる場合。
- 1〜2店舗で、店長が毎日の廃棄を見て仕込みをその場で変えられている場合。廃棄の記録をつけておらず、これから記録の習慣を作る段階の場合(先に記録を1〜2か月続ける必要があります)。仕込みの量を翌日の予約や天気で毎日決めている業態で、曜日ごとの目安が意味を持たない場合(翌日の発注量を見込む構成のほうが合います)。AIに仕込み量を決めさせ、店舗の仕込み表を自動で書き換えたい場合。
07最小構成で試す方法
- 廃棄の記録がよくつけられている1店舗を選ぶ
- その店舗の直近8週の仕込みと廃棄の記録を、スプレッドシートの関数で品目×曜日に集計する(まずは5品目だけ)
- 「その他」とメモの付いた廃棄の行を、社内で使ってよいAIサービスの画面に貼り、理由の区分を選ばせる
- 仕込み過ぎと期限切れだけを引いて使った量を出し、曜日ごとに多いほうから2番目の量を目安にする
- 目安と今の仕込み表を並べた表を店長に見せ、「この差は思い当たるか」を聞く
5品目で十分です。 ここで確かめたいのは、目安の決め方が店長の感覚と合うかどうかだからです。
| 出てきた内容 | 判断 |
|---|---|
| 店長が「確かに水曜は余る」と言う | スクリプトでの自動化に進む |
| 店長が「その週は宴会があった」と言う | 営業カレンダーに貸切・宴会を書く運用を足す。構成は有効 |
| 記録の無い日が多く、目安が出ない | 記録のつけ方が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 閉店後の記録は、疲れている時間に頼む作業だからです。フォームの項目を減らす、閉店の作業表に記録を入れる、のほうが先に効きます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 記録の無い日を廃棄ゼロと数える | 「記録なし」の印を付けて計算から外す |
| 設備の不調や予約の取消まで仕込み過ぎに数える | メモをAIに読み分けさせ、使った量の計算で分ける |
| AIが目安の数字を丸めて書く | 返ってきた数字と文面の数字をスクリプトで照合する |
| 平均で目安を出して欠品が増える | 欠品を避ける側の決め方(多いほうから2番目など)を店長と決める |
| 貸切の日で目安が振れる | 営業カレンダーに貸切と休業を書き、計算から外す |
| 単位がそろわない | 品目マスタに換算を持たせ、換算の無い単位は外して数える |
| 店長が案を読まない | 1店舗5品目までに絞り、「いかがでしょうか」の形で送る |
| 採られなかった案を毎月繰り返す | 店長の返事を残し、翌月の案に先月の返事を渡す |
| 6分の上限で止まる | 店舗ごとに区切り、続きのトリガーで再開する |
| 仕込み表を自動で書き換える | 書き換えない。 店長が直す |
上の3行が、案が信用されるかどうかを決めます。 記録の無い日の扱い、理由の分け方、数字の一致のどれか1つでも崩れると、店長は1回目の案で「本部の数字は当てにならない」と受け取り、2回目から読まなくなります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 店舗ごと・品目ごとの仕込みと廃棄の量、廃棄の理由のメモ、仕込み表、営業カレンダーの予約の予定です。個人の情報はほとんど含みませんが、メモに予約の客の名前が書かれることがあります。
- メモの客の名前を渡さない … 「○○様の宴会キャンセル」のようなメモは、AIに渡す前に予約台帳の名前の一覧と照らして伏せます。理由の読み分けに名前は要りません
- 有料の枠で使う … Gemini API の規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされています。店舗ごとの廃棄の量は社内の経営の数字なので、無料の枠では使いません
- 店長の評価に使わない … 廃棄率の店舗の並びを、店長の評価の材料にしないでください。評価に使うと、廃棄を記録しなくなります。 記録が止まれば、この構成は何も出せません
- 食品の安全の判断と混ぜない … 期限切れの廃棄が多いからといって、日持ちの日数を延ばす案は出させません。衛生の基準は別に決まっているものです
- 国の取り組みとの関係を押さえておく … 農林水産省は事業系の食品ロス量を推計して公表しており、2024年度は237万トンでした。年間の発生量が100トン以上の食品廃棄物等多量発生事業者は、毎年6月末までの定期報告が必要とされています。 該当する事業者なら、この記録は報告の材料にもなります
誤りが起きた場合のリスクは、仕込みを減らしすぎて欠品を起こすことと、記録を嫌って店舗が記録をやめることの2つです。 前者は欠品を避ける側の目安と店長の判断で、後者は評価に使わないことで防ぎます。
10まず何から始めるか
1週目:品目マスタと営業カレンダーを整える
30品目に、基本の単位、単位の換算、日持ちの日数を書きます。営業カレンダーに、過去8週の休業と貸切の日を書き込みます。 フォームの案内に、前日の残りの書き方を1行で足します。
2週目:1店舗5品目で試す
記録のよい1店舗を選び、5品目の目安を関数で出して店長に見せます。メモの読み分けは、社内で使ってよいAIサービスで行います。 店長の感覚と合うかを聞きます。
3週目:目安の決め方を決める
「多いほうから2番目」でよいか、品目によって変えるかを、店長数名と決めます。 記録の無い日が多い店舗を洗い出し、記録のつけ方を店舗と話します。
4週目:スクリプトで集計と目安までをつなぐ
毎月1日に動くトリガーを置き、全店舗の集計と目安を一覧のシートに書くところまで作ります。この時点では店長へ送らず、本部の中で数字を確かめます。
2か月目: 理由の読み分けと見直し案の文面、メールの下書きを足し、店長へ送り始めます。3か月目以降: 店長の返事と翌月の廃棄を並べ、1行3分が何分になったかを実測します。16店舗すべてに毎月案が届き、店長が返事を書くようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から毎月までの間隔で動かせること。インストール型トリガーは作成した人のアカウントで実行されること | Google: Installable triggers | 2026-10-07 |
| 1回の実行が6分まで、トリガーの合計実行時間が Workspace のアカウントで1日6時間、URLの呼び出しが1日100,000回であること | Google: Quotas for Google Services | 2026-10-07 |
UrlFetchApp の fetch、muteHttpExceptions を true にすると失敗の応答でも例外にならず応答が返ること | Google: Class UrlFetchApp | 2026-10-07 |
MailApp の送信と、htmlBody・cc・name などのオプション | Google: Class MailApp | 2026-10-07 |
構造化出力が /v1beta/interactions の response_format(mime_type に application/json、schema)で指定できること。enum で選択肢を列挙できること。値はアプリケーションで確かめるよう書かれていること | Google: Structured outputs(Gemini API) | 2026-10-07 |
| 有料のサービスではプロンプトと応答を製品の改善に使わないこと。無料のサービスには機密や個人の情報を送らないよう書かれていること | Google: Gemini API Additional Terms of Service | 2026-10-07 |
| 2024年度の事業系食品ロス量が237万トン(2000年度比57%削減)と公表されていること。年間発生量100トン以上の食品廃棄物等多量発生事業者は毎年6月末までの定期報告が必要とされていること | 農林水産省: 食品ロス・食品リサイクル | 2026-10-07 |
目安の決め方と、仕込み表を直すかどうかは、本部と店長で決めてください。 本記事は公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0784)についてのご相談はこちらから。
