Media > AI活用ユースケース > 購買 > ホテルの予約データと過去の喫食の実績から翌日の朝食の人数を見込み、食材の発注量と仕込みの量の案を調理の担当に届ける

ホテルの予約データと過去の喫食の実績から翌日の朝食の人数を見込み、食材の発注量と仕込みの量の案を調理の担当に届ける

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

宿泊予約の翌日分のデータと、朝食会場で数えた過去の喫食の人数から、翌朝の朝食の人数を幅で見込みます。団体の手配書や予約の備考に書かれた朝食の変更を反映し、品目ごとの食材の発注量と前日の仕込みの量の案を調理の担当に届けます。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate/Python
対象業界
宿泊/飲食
対象部門
購買
対象業務
書類作成/集計・分析
主な課題
データ分析に時間がかかる/判断に時間がかかる/属人化している
AIで行う処理
予測
主な効果
判断支援/属人化解消/工数削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
45h/月
AI導入後
12h/月
想定削減
73%
年間削減
396h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 毎日15時ごろ、調理の責任者が宿泊予約システムで翌日の朝食付きの人数を確かめる
  2. 団体の予約があれば、営業から届いた手配書を開き、朝食の時間と形を確かめる
  3. 個人の予約の備考を一覧で流し見て、朝食に関わる書き込みを拾う
  4. 曜日と客層から「今日は8割くらい来る」と見込み、人数を決める
  5. 品目ごとに、見込んだ人数から発注量と仕込みの量を計算する
  6. 仕入先に発注し、調理の担当に仕込みの量を伝える
  7. 夜に団体の人数の変更が入ると、夜勤のフロントから連絡を受けて量を直す
導入後(After)
  1. 人毎日14時半に、フロントの担当が翌日の予約データを宿泊予約システムから書き出し、決まったフォルダに置く
  2. 自動15時、スクリプトがCSVを読み、館ごとに朝食付きの人数を客層・プラン別に数える
  3. 自動直近8週の同じ曜日・同じ客層の喫食率から、翌朝の来場の人数を下限・中央・上限で計算する
  4. 自動団体の手配書の朝食の欄と、朝食に関わる語を含む予約の備考を Gemini API に渡し、朝食の変更を読み取らせる
  5. 自動読み取った変更(弁当への切り替え、朝食なし、時間の変更、アレルギー)を人数に反映する
  6. 自動品目ごとの1人あたりの使用量と在庫から、発注量と仕込みの量の案を計算する
  7. 自動Gemini API に、案の根拠と確かめる点を調理の担当向けの文面にさせ、シートとメールで届ける
  8. 人調理の責任者が案を確かめ、量を直して発注し、仕込みを指示する
  9. 自動20時、予約データの書き出しがもう一度あれば、人数が1割以上動いた館だけ知らせる
各工程の詳しい説明を読む
  1. 毎日15時ごろ、調理の責任者が宿泊予約システムで翌日の朝食付きの人数を確かめる
  2. 団体の予約があれば、営業から届いた手配書を開き、朝食の時間と形を確かめる
  3. 個人の予約の備考を一覧で流し見て、朝食に関わる書き込みを拾う
  4. 曜日と客層から「今日は8割くらい来る」と見込み、人数を決める
  5. 品目ごとに、見込んだ人数から発注量と仕込みの量を計算する
  6. 仕入先に発注し、調理の担当に仕込みの量を伝える
  7. 夜に団体の人数の変更が入ると、夜勤のフロントから連絡を受けて量を直す

(a)見込みの根拠が責任者の頭の中にある。 「8割」は長年の経験から出た数字で、当たることも多いのですが、責任者が休みの日は代わりの担当者が決められません。 代わりの担当者は欠品を恐れて多めに見込み、その日の廃棄が増えます。

(b)団体の朝食の変更が埋もれる。 手配書は営業が作る文書で、朝食の記載は何ページ目かの備考の欄にあります。「2日目の朝食は弁当に変更」を見落とすと、会場の分と弁当の分の両方を仕込むか、どちらも足りないかになります。

(c)備考の書き込みを拾い切れない。 1館で毎日100件を超える予約の備考を流し見ると、「朝食不要」と「朝食券は2名分のみ」の区別がつかないまま人数に入ります。 アレルギーの書き込みは、調理の担当に伝わらないことがあります。

(d)3館で見込み方がばらばら。 館ごとに責任者の流儀があり、同じ客層の日でも見込みの割合が違います。本社の購買から見ると、どの館の廃棄が見込みの外れから来ているのかが分かりません。

  1. 【人】 毎日14時半に、フロントの担当が翌日の予約データを宿泊予約システムから書き出し、決まったフォルダに置く
  2. 【自動】 15時、スクリプトがCSVを読み、館ごとに朝食付きの人数を客層・プラン別に数える
  3. 【自動】 直近8週の同じ曜日・同じ客層の喫食率から、翌朝の来場の人数を下限・中央・上限で計算する
  4. 【自動】 団体の手配書の朝食の欄と、朝食に関わる語を含む予約の備考を Gemini API に渡し、朝食の変更を読み取らせる
  5. 【自動】 読み取った変更(弁当への切り替え、朝食なし、時間の変更、アレルギー)を人数に反映する
  6. 【自動】 品目ごとの1人あたりの使用量と在庫から、発注量と仕込みの量の案を計算する
  7. 【自動】 Gemini API に、案の根拠と確かめる点を調理の担当向けの文面にさせ、シートとメールで届ける
  8. 【人】 調理の責任者が案を確かめ、量を直して発注し、仕込みを指示する
  9. 【自動】 20時、予約データの書き出しがもう一度あれば、人数が1割以上動いた館だけ知らせる

8番目が人の仕事として残る部分です。 翌日の地元の行事や、会場の席の数、仕入先の欠品は、責任者しか知りません。案は経験の代わりではなく、経験の出発点をそろえるものです。

3番目を式で決めているのは、根拠を説明できるようにするためです。 「直近8週の火曜のビジネス客は、朝食付きの人数の71%から78%が来た」と書けば、代わりの担当者でも同じ見込みを立てられます。AIに人数を当てさせると、その説明ができません。

02今回想定するシステム構成

構成図
宿泊予約システム ── 翌日の予約データ(CSV)
   ▼ 決まったフォルダに置く
【トリガー】時間主導型(毎日15時、20時)
Google Apps Script
   ├──▶ 館ごと・客層ごとの朝食付きの人数の集計
   ├──▶ 直近8週の喫食率から来場の人数の幅を計算
   ▼
Gemini API(有料の枠、構造化出力)
   │   ① 団体の手配書・予約の備考から朝食の変更を読み取る
   ▼
Google Apps Script ── 変更を人数に反映、品目ごとの発注量と仕込みの量を計算
   ▼
Gemini API ── 調理の担当向けの案の文面(根拠と確かめる点)
   ▼
Google Apps Script ── 案のシート、調理の責任者へのメール
   ▼
【調理の責任者が確かめて発注し、仕込みを指示する】
役割想定する製品代替候補
実行環境Google Apps ScriptPower Automate、Make、Python
生成AIGemini API(有料の枠、構造化出力)Claude API、OpenAI API
シートGoogle スプレッドシート(喫食の記録・品目の設定・在庫・案の一覧)Microsoft 365 のブック
メールGmail(調理の責任者への案の送付)Outlook

新しく足すのは、スクリプトと Gemini API の契約、品目の設定のシートです。 宿泊予約システムには書き込みません。仕入先への発注も、この構成からは出しません。

土台になるのは、Google Apps Script の時間主導型のトリガーです。 毎分から毎月までの間隔で関数を動かせますが、決まった時刻を指定しても、その時刻から1時間の間のどこかで動くことがあるとされています。15時ちょうどに動く前提にせず、14時台に置いたトリガーが、CSVが置かれるまで待つ作りにします。インストール型トリガーは作成した人のアカウントで実行されるので、料飲部の共有のアカウントで作ります。

スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間、外部へのURLの呼び出しは1日100,000回までとされています。館ごとに区切って動かせば、1館分は1回の実行に収まります。

CSVは Utilities の parseCsv で2次元の配列にします。 調理の責任者へのメールは MailApp の sendEmail で送り、htmlBody に案の表を入れます。

Gemini API は有料の枠で使います。 規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされ、無料のサービスには機密や個人の情報を送らないよう書かれています。 予約の備考には宿泊客の事情が書かれるので、無料の枠では使いません。

構造化出力は、いまの公式の書き方に合わせます。 /v1beta/interactions に response_format を付け、mime_type を application/json、schema にJSONスキーマを入れます。区分は enum で列挙し、人数には minimum を付けます。値の正しさはアプリケーションで確かめるよう公式にも書かれているので、返ってきた人数は予約データと照らします。

03どうやって実装するのか

Step1

処理の起点を決める

時間主導型のトリガーを、毎日14時台に1つ置きます。 動いたら決まったフォルダを見て、翌日の日付の名前のCSVがあれば処理を始めます。無ければ10分後に置き直したトリガーで見直し、15時半を過ぎても無ければ、フロントと調理の責任者に「予約データがまだありません」と知らせます。 仕入先の発注の締切が17時なので、16時には案が届いている必要があります。

処理は館ごとに区切ります。 1館分の集計・見込み・読み取り・計算・文面までを1まとまりにし、どの館まで終わったかをスクリプト プロパティに残します。

20時にもう1つトリガーを置きます。 フロントが夜の予約データを書き出していれば読み直し、中央の人数が15時の案から1割以上動いた館だけ、調理の責任者と夜勤の調理の担当に知らせます。翌朝の納品の追加は間に合わないことが多いので、知らせるのは仕込みの量の直しと、当日の朝に調理で吸収できる品目の量です。

Step2

入力データを集める

データ中身取得元
翌日の予約データ予約番号、館、宿泊日、大人・子どもの人数、プラン(朝食付き/なし)、客層の区分(個人・ビジネス・団体・海外の旅行会社)、備考宿泊予約システムのCSV
団体の手配書団体名、人数、朝食の時間と形(会場・弁当・なし)、日ごとの変更手配書のシート(営業が書く)
喫食の記録館、日付、朝食会場に来た人数、弁当の数、記録した担当喫食の記録のシート
過去の朝食付きの人数館、日付、客層ごとの朝食付きの人数毎日の予約データから積んだシート
品目の設定品目、1人あたりの使用量、単位、発注の単位、仕入先、発注の締切、前日に仕込むか、当日の追加ができるか品目の設定のシート
在庫品目ごとの今日の夕方の残り在庫のシート(調理の担当が書く)

AIに渡すのは、団体の手配書の朝食の欄と、朝食に関わる語を含む予約の備考だけです。 氏名・電話番号・メールアドレスはCSVの段階で書き出しの項目から外します。予約番号も、スクリプトの中で通し番号に置き換えてから渡します。

質を決めるのは、喫食の記録と過去の朝食付きの人数が同じ日で並んでいることです。 喫食率は「その日に朝食会場に来た人数」を「その日の朝の朝食付きの人数」で割って出します。どちらかが欠けた日は、計算から外します。

Step3

データの取得方法を決める

予約データは、決まったフォルダから翌日の日付の名前のファイルを探して読みます。読み込んだ直後に館ごとの予約の件数と人数の合計を数え、ログに残します。 予約システムの画面の数字と照らせるようにするためです。

取るものどこから何に使うか
翌日の朝食付きの人数(館・客層別)予約データ見込みの元
直近8週の同じ曜日の喫食率(館・客層別)喫食の記録と過去の朝食付きの人数来場の割合の幅
朝食に関わる備考予約データの備考変更の読み取り
団体の朝食の欄手配書のシート変更の読み取り
品目の使用量・単位・締切品目の設定発注量と仕込みの量
今日の夕方の在庫在庫のシート発注量から引く

団体の喫食率は、過去の値を使いません。 団体は朝食の時間と形が手配書で決まっているので、手配書の人数をそのまま見込みに入れます。 喫食率を掛けるのは個人・ビジネス・海外の旅行会社の予約だけです。

Gemini API の鍵はスクリプト プロパティに置き、UrlFetchApp で呼びます。 muteHttpExceptions を true にして、失敗の状態コードでも応答を受け取り、送り直すかを決めます。

Step4

AIへ渡す前に整形する

  1. 朝食付きの人数の集計 … 館・客層ごとに、朝食付きのプランの大人と子どもの人数を数えます。未就学の子どもは別に数え、品目の量の計算で係数を変えます
  2. 喫食率の計算 … 直近8週の同じ曜日について、客層ごとに「来た人数÷朝食付きの人数」を出します。祝日と大型連休は、曜日ではなく「休日」の区分で並べます
  3. 幅の計算 … 8つの喫食率のうち、低いほうから2番目を下限、中央の2つの平均を中央、高いほうから2番目を上限とします。記録が5日に満たない区分は、館の全体の値を使い、その旨を印にします
  4. 備考の絞り込み … 備考に「朝食」「朝ごはん」「弁当」「アレルギー」「breakfast」などの語を含む予約だけを選びます
  5. 伏せる処理 … 備考の中の氏名・電話番号を伏せます
  6. 品目の量の計算 … 前日に仕込む品目と当日の追加ができない品目は上限の人数で、当日に追加で作れる品目は中央の人数で、1人あたりの使用量を掛けます
  7. 発注量の計算 … 品目ごとの量から在庫を引き、発注の単位に切り上げます

3番目で幅を出すのは、1つの数字だと外れたときに次の手が無いからです。 下限と上限の差が大きい日は、当日の朝に追加で作れる品目を厚めに用意し、前日に仕込む品目は上限に寄せる、という使い分けが責任者にできます。

6番目の使い分けが、廃棄と欠品の両方に効きます。 焼き魚の切り身やサラダの下ごしらえは当日に増やせないので上限で、卵料理やトーストは会場の様子を見て作れるので中央で量を決めます。どの品目をどちらにするかは、品目の設定のシートで責任者が決めます。

Step5

AIに処理させる

させるのは2つです。 1つ目は、団体の手配書と予約の備考から、朝食の人数に関わる変更を決まった区分で読み取ること。2つ目は、スクリプトが計算した人数の幅と品目の量について、調理の担当向けに根拠と確かめる点を書くことです。

読み取る区分中身判断できないときの扱い
no_breakfast朝食付きのプランだが朝食を取らない人数が書かれていなければ予約の全員
boxed会場ではなく弁当に替える時刻と人数を写す
time_change会場の開始より早い・遅い時刻の希望時刻を写す
allergy食物アレルギーの申し出食品名と人数を写す。分からなければ unclear
add_breakfast朝食なしのプランから朝食を足す人数を写す
unclear朝食に関わるが意味が決められない原文を写して人に回す

allergy は人数の調整ではなく、調理の担当への知らせとして扱います。 見込みの人数は変えず、案の文面に「卵アレルギー2名(302号室の予約)」のように並べます。アレルギーの対応の可否を判断させることはしません。

させないこと理由
来場の人数や品目の量の計算式で出した数字を変えさせない。説明できなくなる
入力に無い事情(天気、地元の行事)の推測確かめようのない理由で量が動く
アレルギーへの対応の可否の判断調理の担当が決める
発注の確定責任者が決める
宿泊客の属性からの推測(国籍で朝食を取る割合など)根拠にならず、偏りを生む

いちばん起きやすい失敗は2行目です。 「週末は観光客が多いため、朝食の利用が増えると考えられます」のような一般論で、AIは案の文面を埋めたがります。喫食率は過去の実績からすでに出ているので、一般論を足すと二重に数えることになります。

Step6

指示内容を固定する

1つ目の指示(朝食の変更の読み取り)は次のとおりです。

あなたはホテルの料飲部で、翌朝の朝食の準備のために予約の書き込みを整理する立場です。
団体の手配書の朝食の欄と、個人の予約の備考を読み、朝食に関わる変更を次の区分で答えてください。

【区分】
- no_breakfast .. 朝食付きのプランだが朝食を取らない
- boxed ......... 会場ではなく弁当に替える
- time_change ... 会場の開始(6:30)より早い、または終了(9:30)より遅い時刻の希望
- allergy ....... 食物アレルギーの申し出
- add_breakfast . 朝食なしのプランから朝食を足す
- unclear ....... 朝食に関わるが、上のどれか決められない

【厳守事項】
- 書かれていることだけを根拠にしてください。人数や時刻を推測で補わないでください。
- 人数が書かれていなければ persons を null にしてください。
- 1つの書き込みに複数の変更があれば、別々の行に分けてください。
- 宿泊日が翌日でない変更(2日目、最終日など)は、翌朝に当てはまるかを applies_tomorrow で答えてください。分からなければ null です。
- evidence には、区分を決めた語句を原文からそのまま写してください。
- アレルギーへの対応ができるかどうかを書かないでください。
- 入力の row_id をそのまま返してください。

【翌日の日付】{date}
【団体の手配書の朝食の欄(row_id、団体の人数、宿泊日、記載)】{group_rows}
【個人の予約の備考(row_id、人数、プラン、記載)】{remark_rows}

2つ目の指示(案の文面)は次のとおりです。

あなたはホテルの料飲部で、調理の責任者に翌朝の朝食の見込みを伝える文面を書く立場です。
人数と量は、すでに決まった式で計算されています。
来場の人数は「朝食付きの人数 × 直近8週の同じ曜日・同じ客層の喫食率」の下限・中央・上限です。

【書くこと】
1. 来場の人数の下限・中央・上限と、客層ごとの内訳(渡した数字をそのまま)
2. 団体の朝食の形(会場・弁当)と人数、弁当の時刻
3. アレルギーの申し出の一覧
4. 上限と下限の差が大きい客層と、その日の量の決め方で確かめる点(質問の形で)
5. unclear の書き込みの原文

【厳守事項】
- 数字は入力の値をそのまま書いてください。丸めたり計算し直したりしないでください。
- 入力に無い事情(天気、行事、季節の傾向、客の国籍)を理由として書かないでください。
- 発注を決めつけず、「案は○○です。いかがでしょうか」の形にしてください。

【館と翌日の日付】{hotel} {date}
【人数の幅と内訳】{forecast}
【読み取った変更】{changes}
【品目ごとの量の案】{items}

2つ目の指示の冒頭に式を書いておくのが要点です。 式を知らないと、AIは人数を「AIの予測」と言い換えます。式を渡せば、責任者が自分の記憶と照らせる言い方で書きます。

Step7

出力形式を固定する

朝食の変更は次の形で受け取ります。 type は6つの区分を enum で列挙し、persons には minimum を0で付けます。

{
  "changes": [
    { "row_id": "G-03", "type": "boxed", "persons": 42,
      "time": "06:00", "applies_tomorrow": true,
      "evidence": "2日目朝食 6:00 お弁当にて(42名)" },
    { "row_id": "R-118", "type": "allergy", "persons": 1,
      "time": null, "applies_tomorrow": true,
      "evidence": "子ども1名 卵アレルギー" }
  ]
}

1つ目の理由は、row_id と persons を予約データと照らせることです。 persons が、その予約や団体の人数を超えていれば、その行は使わず unclear に回します。読み取った人数で、予約の人数より多く減らすことはさせません。

2つ目は、applies_tomorrow で日付の取り違えを止められることです。 3泊の団体の「2日目は朝食なし」を、翌朝の分と取り違えると、40名分の朝食が丸ごと消えます。null のものは人数に反映せず、案の文面の確かめる点に回します。

3つ目は、evidence を原文と照らせることです。 スクリプトは evidence の文字列が渡した原文に含まれているかを確かめ、含まれていなければその行を使いません。

案の一覧のシートには、館と翌日の日付ごとに次の列を並べます。

列中身書く主体
朝食付きの人数と客層ごとの喫食率の幅下限・中央・上限スクリプト
読み取った変更と反映後の人数区分ごとの人数スクリプト(区分はAI)
品目ごとの量の案と発注量上限・中央の使い分けで計算スクリプト
根拠と確かめる点案の文面AI
責任者が決めた量と発注した量品目ごと人
翌朝の実際の来場の人数喫食の記録からスクリプト
Step8

システムへ連携する

つなぎ先方式内容
予約データのフォルダ読み取りのみ翌日のCSV
手配書・喫食の記録・品目の設定・在庫のシート読み取りのみ団体の朝食、過去の実績、使用量、残り
Gemini APIUrlFetchApp で呼び出し変更の読み取りと案の文面
案の一覧のシート書き込み計算・文面・責任者の欄
GmailMailApp の sendEmail調理の責任者への案

仕入先への発注は、今までどおり責任者が出します。 案の発注量をそのまま送る仕組みにすると、在庫のシートの書き忘れがそのまま過剰な発注になります。宿泊予約システムにも書き込みません。

Step9

人が確認する

  1. unclear と applies_tomorrow が null のものを先に見る … 団体の手配書なら営業に、個人の予約ならフロントに確かめます
  2. アレルギーの一覧を調理の担当に渡す … 対応の可否は調理の担当が決めます
  3. 人数の幅を見る … 翌日の地元の行事や会場の事情と照らし、中央と上限のどちらに寄せるかを決めます
  4. 品目の量を直して発注する … 在庫のシートが今日の夕方の値かを確かめてから発注します
  5. 決めた量をシートに書く … 案と違う量にした品目は、理由を1行書きます

5番目を省かないでください。 責任者が案から量を変えた理由が、翌月に喫食率の決め方を見直す材料になります。理由の無い直しは、次の日の案に生かせません。

目標は、90件をならして1件8分です。 案を読み、確かめる点を片づけ、発注するまでの時間です。

Step10

例外に対処する

起きること対応
15時半を過ぎてもCSVが無いフロントと責任者に知らせ、今までの手順で決めてもらう
予約の件数がシステムの画面と合わない処理を止め、書き出しのやり直しを頼む
喫食の記録が5日に満たない区分館の全体の喫食率を使い、印を付ける
読み取った人数が予約の人数を超えるその行を使わず unclear に回す
在庫のシートが今日の値でない発注量を出さず、品目の量だけを出す
API が失敗の状態コードを返す最大2回送り直し、だめなら読み取り無しの人数と量だけを送る
20時に人数が1割以上動いたその館だけ知らせ、仕込みの量の直しを促す

6行目で、AIが使えなくても案は届きます。 人数の幅と品目の量はスクリプトの式で出るので、変更の読み取りが無い分を「手配書と備考は未確認」と書いて送ります。 発注の締切に間に合うことを優先します。

Step11

記録を残す

  • 処理した日、読み込んだCSVのファイル名と館ごとの件数・人数
  • 客層ごとの喫食率の幅と、そのとき使った幅の決め方
  • 読み取った変更(row_id、type、persons、evidence)
  • 品目ごとの量の案と、責任者が決めた量と理由
  • 翌朝の実際の来場の人数と、下限・中央・上限のどこに入ったか
  • 品目ごとの廃棄と欠品の記録

最後の2行を並べて残すのが、この構成を育てる材料です。 実際の人数が上限を超えた日が続く客層は、幅の決め方が低すぎます。下限を下回る日が続くなら、朝食付きのプランの売り方が変わった可能性があります。 販売の担当に、プランの構成を変えていないかを聞きます。

幅の決め方を変えたら、変えた日を記録します。 「高いほうから2番目」を「最大」に変えると、同じ記録から違う上限が出ます。どの日がどの決め方だったかが残っていないと、廃棄や欠品の増減の理由が追えません。

04実装レベルの3段階

最小構成:1館の喫食率を関数で出し、手配書と備考だけAIの画面で読み取る / 幅が実際の人数に合うかの確認
半自動化:上記+毎日スクリプトが3館の人数の幅、変更の読み取り、品目の量と案の文面まで作る / 毎日の見込みと発注量の案
本格構成:上記+実際の来場の人数と廃棄・欠品から、客層ごとの幅の決め方の見直し案を月次で出す / 見込み方の見直しまで

本記事が想定するのは半自動化です。 発注するのは責任者、仕込みを指示するのも責任者です。1件30分が8分になるのはこの段階です。 本格構成に進むのは、実際の人数と廃棄・欠品の記録が3か月ほどたまってからにしてください。 幅を狭めて廃棄を減らす方向に寄せると、欠品が増えることがあります。欠品の記録が無いうちに幅を変えないでください。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
90 件
1件あたり現在時間
30 分
1件あたり導入後時間
8 分
現在  90件 × 30分 ÷ 60 = 45 時間/月
導入後 90件 × 8分 ÷ 60 = 12 時間/月
月間削減時間
33h
削減率
73%
年間削減時間
396h
年間金額換算(時間単価3,000円)
119万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 客室が100〜300室ほどのシティホテル・ビジネスホテル・リゾートホテルを数館持つ事業者で、朝食をビュッフェや定食で出し、翌朝の人数を調理の責任者が前日の夕方に予約の一覧と経験で決めている場合。宿泊予約システムから予約データをCSVで書き出せ、朝食会場で毎朝の喫食の人数を数えて記録している場合。Google Workspace を使っている場合。
向いていない
  1. 客室が数十室で、朝食の人数を予約の一覧から数えれば足りる場合。朝食を外部の飲食店に委託していて、人数の見込みを委託先が行っている場合。朝食会場で喫食の人数を記録しておらず、過去の実績が無い場合(先に記録を2か月ほど続ける必要があります)。AIに発注を確定させたい場合や、発注を仕入先へ自動で送りたい場合。

07最小構成で試す方法

  1. 1館を選び、直近8週の喫食の記録と、同じ日の朝食付きの人数をシートに並べる
  2. 曜日と客層ごとに喫食率を関数で出し、下限・中央・上限を計算する
  3. 翌日の団体の手配書の朝食の欄と、朝食に関わる備考を、社内で使ってよいAIサービスの画面に貼り、第7章の区分で読み取らせる
  4. 責任者がいつもどおりに決めた人数と、計算した幅を並べる
  5. 翌朝の実際の来場の人数と比べる。これを2週間続ける

2週間で十分です。 ここで確かめたいのは、計算した幅に実際の人数が入るかと、責任者の見込みと比べてどちらが近いかです。

出てきた内容判断
実際の人数がほとんど幅に入るスクリプトでの自動化に進む
団体の変更の読み取りで外れた日がある手配書の朝食の欄の書き方を営業とそろえる。構成は有効
喫食の記録が欠けて幅が出ない記録が先。 AIの問題ではない

3行目が出ることは珍しくありません。 朝食の終わりは片づけで忙しく、記録が後回しになります。入口で数える人数を、その場でシートに書ける形にするほうが先に効きます。

08実装時につまずきやすいポイント

問題対策
トリガーが決まった時刻に動かない14時台に置き、CSVが置かれるまで待つ作りにする
団体の「2日目は朝食なし」を翌朝と取り違えるapplies_tomorrow を答えさせ、null は人数に反映しない
団体に喫食率を掛けて二重に減らす団体は手配書の人数をそのまま使う
喫食の記録が欠けた日で幅が振れる欠けた日を外し、5日に満たない区分は館の全体の値を使う
AIが一般論で量を増やす理由を書く入力に無い事情を禁じ、数字は式の値だけを書かせる
前日に仕込む品目を中央の人数で作り欠品する品目ごとに上限と中央の使い分けを設定する
在庫のシートが古く、発注が多すぎる今日の値でなければ発注量を出さない
夜の予約の変更に追いつかない20時に読み直し、1割以上動いた館だけ知らせる

上の3行が、案が信用されるかどうかを決めます。 団体の朝食を1回でも取り違えると、責任者は手配書を自分で読み直すようになり、①の12分が戻ってきます。

下の2行は、運用が回り始めてから崩れやすい点です。 在庫のシートは調理の担当が夕方に書くもので、忙しい日ほど書き忘れます。在庫が古いまま発注量を出さない作りにしておけば、書き忘れは「発注量が出ていない」という形ですぐ分かります。 夜の変更の知らせも、知らせる館を絞らないと、夜勤の担当が読まなくなります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 翌日の予約の人数・プラン・客層の区分・備考、団体の手配書、朝食会場の喫食の人数です。氏名や連絡先はCSVの段階で外しますが、備考には宿泊客の事情や健康に関わる書き込みがあります。

  1. 有料の枠で使う … Gemini API の規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされ、無料のサービスには機密や個人の情報を送らないよう書かれています。アレルギーの申し出は健康に関わる情報なので、無料の枠では使いません
  2. 渡す範囲を絞る … 渡すのは朝食に関わる語を含む備考と、手配書の朝食の欄だけです。氏名・電話番号は伏せ、予約番号は通し番号に置き換えます
  3. アレルギーの判断をさせない … 読み取った申し出は一覧にして調理の担当に渡すだけです。対応できるかどうか、代わりの料理をどうするかは調理の担当が決め、宿泊客への連絡はフロントが行います
  4. 国籍や属性で推測させない … 「海外のお客様は朝食を取る割合が高い」のような推測は、根拠にならず偏りを生みます。客層の区分は予約の経路と団体の有無で分け、喫食率は実績から出します
  5. 食品ロスの取り組みと合わせる … 農林水産省は、年間の食品廃棄物等の発生量が100トン以上の事業者に毎年6月末までの定期報告を求めています。該当する事業者なら、廃棄の記録はその材料にもなります

誤りが起きた場合のリスクは、朝食が足りなくなることと、作りすぎて捨てることの2つです。 前者は上限で仕込む品目の設定と責任者の確認で、後者は幅の記録と月次の見直しで防ぎます。

10まず何から始めるか

1週目:喫食の記録と予約データを並べる

1館の直近8週の喫食の人数と、同じ日の朝食付きの人数を1つのシートに並べます。記録の欠けた日を洗い出し、朝食会場の入口で数えた人数をその場で書ける形にします。

2週目:幅を出して2週間比べる

曜日と客層ごとの喫食率の幅を関数で出し、責任者の見込みと並べて、翌朝の実際の人数と比べます。手配書と備考は、社内で使ってよいAIサービスで読み取らせます。

3週目:品目の設定を作る

よく使う20品目から、1人あたりの使用量、発注の単位、上限で仕込むか中央で作るかを責任者と決めます。 営業と、手配書の朝食の欄の書き方をそろえます。

4週目:スクリプトで人数の幅までをつなぐ

毎日14時台に動くトリガーを置き、1館の人数の幅を案の一覧のシートに書くところまで作ります。この時点では発注量を出さず、責任者が幅を見て決めた人数と翌朝の実績を並べます。

2か月目: 変更の読み取り、品目の量、案の文面とメールを足し、3館に広げます。3か月目以降: 責任者が量を直した理由と、廃棄と欠品の記録を見て、1件30分が何分になったかを実測します。責任者が休みの日も、代わりの担当者が同じ案から量を決められるようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
時間主導型のトリガーが毎分から毎月までの間隔で動かせること。指定した時刻から1時間の間で動く時刻が選ばれること。インストール型トリガーは作成した人のアカウントで実行されることGoogle: Installable triggers2026-10-08
1回の実行が6分まで、トリガーの合計実行時間が Workspace のアカウントで1日6時間、URLの呼び出しが1日100,000回であることGoogle: Quotas for Google Services2026-10-08
UrlFetchApp の fetch、muteHttpExceptions を true にすると失敗の応答でも例外にならず応答が返ることGoogle: Class UrlFetchApp2026-10-08
Utilities の parseCsv がCSVの文字列を2次元の配列にすることGoogle: Class Utilities2026-10-08
MailApp の sendEmail と、htmlBody・cc・name のオプションGoogle: Class MailApp2026-10-08
構造化出力が /v1beta/interactions の response_format(mime_type に application/json、schema)で指定できること。enum、minimum などが使えること。値はアプリケーションで確かめるよう書かれていることGoogle: Structured outputs(Gemini API)2026-10-08
有料のサービスではプロンプトと応答を製品の改善に使わないこと。無料のサービスには機密や個人の情報を送らないよう書かれていることGoogle: Gemini API Additional Terms of Service2026-10-08
2024年度の事業系食品ロス量が237万トンと公表されていること。年間発生量100トン以上の食品廃棄物等多量発生事業者は毎年6月末までの定期報告が必要とされていること農林水産省: 食品ロス・食品リサイクル2026-10-08

発注の量と、アレルギーへの対応は、調理の責任者と担当で決めてください。 本記事は公式ページで確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1008)についてのご相談はこちらから。

AI活用について相談する
目次