Media > AI活用ユースケース > 営業 > 飲食チェーンの店長がフォームで出す営業日報を、数字は Apps Script で集計し、コメントは AI で要約して、エリアマネージャーの週次・月次の報告と気になる店の一覧にする

飲食チェーンの店長がフォームで出す営業日報を、数字は Apps Script で集計し、コメントは AI で要約して、エリアマネージャーの週次・月次の報告と気になる店の一覧にする

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

店長が毎日フォームで出す営業日報から、売上・客数・人件費・廃棄の数字を Apps Script が店ごとに週と月で集計し、コメント欄は AI が話題ごとに要約します。エリアマネージャーは、その2つを並べた下書きを直して、上長への週次・月次の報告にします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate
対象業界
宿泊/小売/飲食
対象部門
営業
対象業務
要約/集計・分析
主な課題
データ分析に時間がかかる/属人化している/書類作成に時間がかかる
AIで行う処理
要約
主な効果
品質標準化/対応スピード向上/工数削減
導入難易度
★☆☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
36h/月
AI導入後
12h/月
想定削減
67%
年間削減
288h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 月曜の朝、回答のスプレッドシートを受け持ちの店と前週の日付で絞り込む
  2. 店ごとに7日分の数字を集計用の表に写し、週の売上・客数・客単価・予算比・人件費率・廃棄率を計算する
  3. 日報が出ていない日がないかを確かめ、抜けがあれば店長に電話する
  4. 7日分のコメントを読み、設備・人手・食材・お客様の声・本部への依頼を拾ってメモする
  5. 店ごとに、数字の一言とコメントの要点を数行ずつ報告の様式に書く
  6. 予算比が大きく割れた店や、苦情の多かった店を「気になる店」として冒頭に書く
  7. 月初に、4週分の報告を読み直して月次の報告にまとめる
導入後(After)
  1. 人店長がこれまでどおり、閉店後に営業日報をフォームで出す
  2. 自動送信のたびに Apps Script が動き、数字の欄の形を確かめ、コメントに食品の事故やけがを思わせる語があればエリアマネージャーに知らせる
  3. 自動毎週月曜の朝に Apps Script が動き、前週の日報を店ごとに集める。出ていない日を数える
  4. 自動店ごとに、週の売上・客数・客単価・予算比・人件費率・廃棄率・苦情の件数を計算し、決めた幅を外れた指標に印を付ける
  5. 自動コメントからスタッフの名前と連絡先を伏せ、日付付きの一覧にして OpenAI API に渡し、話題ごとの要約を JSON で受け取る
  6. 自動要約に付いた日付が、その店の前週の日報にあるかを突き合わせる
  7. 自動数字の表、印、要約、本部への依頼を並べた週次の報告の下書きを、エリアマネージャーの Gmail の下書きに作る
  8. 人エリアマネージャーが下書きを読み、気になる店の欄を直して営業部長に送る
  9. 自動月初に、前月分の確定した週次の報告と、月の数字の集計から月次の報告の下書きを作る
各工程の詳しい説明を読む
  1. 月曜の朝、回答のスプレッドシートを受け持ちの店と前週の日付で絞り込む
  2. 店ごとに7日分の数字を集計用の表に写し、週の売上・客数・客単価・予算比・人件費率・廃棄率を計算する
  3. 日報が出ていない日がないかを確かめ、抜けがあれば店長に電話する
  4. 7日分のコメントを読み、設備・人手・食材・お客様の声・本部への依頼を拾ってメモする
  5. 店ごとに、数字の一言とコメントの要点を数行ずつ報告の様式に書く
  6. 予算比が大きく割れた店や、苦情の多かった店を「気になる店」として冒頭に書く
  7. 月初に、4週分の報告を読み直して月次の報告にまとめる

(a)読み切れない。 9店×7日で63件の日報を、2番から5番まで通すと1店15分、9店で2時間を超えます。 机に向かえる半日のうち大半がこれで消え、店長への折り返しや本部への依頼の手配が後回しになります。

(b)数字の転記で誤る。 2番は日報の欄の値を集計の表に写して計算しています。桁を1つ写し間違えると、その店の人件費率が大きく外れて見えます。 営業部長がその数字をもとに店長に電話を入れ、後から写し間違いと分かったことがあります。

(c)書き方がエリアマネージャーごとに違う。 数字を細かく書く人もいれば、コメントの話ばかり書く人もいます。営業部長は4人の報告を並べて読みますが、同じ物差しで比べられません。 本部への依頼も、報告の本文に埋もれていると拾い漏れます。

(d)コメントの埋もれ。 「製氷機の音がおかしい」と火曜に書かれ、木曜に「氷が足りない」と書かれていても、別の日のコメントを読み合わせないとつながりません。 1日ずつ読んでいると、同じ話が週の中で何度も出ていることに気づきにくくなります。

  1. 【人】 店長がこれまでどおり、閉店後に営業日報をフォームで出す
  2. 【自動】 送信のたびに Apps Script が動き、数字の欄の形を確かめ、コメントに食品の事故やけがを思わせる語があればエリアマネージャーに知らせる
  3. 【自動】 毎週月曜の朝に Apps Script が動き、前週の日報を店ごとに集める。出ていない日を数える
  4. 【自動】 店ごとに、週の売上・客数・客単価・予算比・人件費率・廃棄率・苦情の件数を計算し、決めた幅を外れた指標に印を付ける
  5. 【自動】 コメントからスタッフの名前と連絡先を伏せ、日付付きの一覧にして OpenAI API に渡し、話題ごとの要約を JSON で受け取る
  6. 【自動】 要約に付いた日付が、その店の前週の日報にあるかを突き合わせる
  7. 【自動】 数字の表、印、要約、本部への依頼を並べた週次の報告の下書きを、エリアマネージャーの Gmail の下書きに作る
  8. 【人】 エリアマネージャーが下書きを読み、気になる店の欄を直して営業部長に送る
  9. 【自動】 月初に、前月分の確定した週次の報告と、月の数字の集計から月次の報告の下書きを作る

4番目と5番目を分けているのが、この設計の要です。 数字はスクリプト、コメントは AI と、入口から別の道を通します。 AI に数字を渡さないので、AI が数字を書き換えたり、計算し直したりする余地がありません。

2番目は、週次の処理とは別の道です。 異物の混入、食中毒の疑い、お客様やスタッフのけがは、月曜の報告を待つものではありません。 店長には電話で連絡する決まりがありますが、日報にだけ書かれることもあるので、送信の時点で語を見て、エリアマネージャーに知らせます。

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

構成図
営業日報(Google フォーム → 回答のスプレッドシート)
   │【トリガー1】送信のたび
   ▼
Google Apps Script ── 数字の欄の形を確かめる/事故・けがの語があれば知らせる
   │
   │【トリガー2】毎週月曜の朝 【トリガー3】毎月2日の朝
   ▼
Google Apps Script
   ├──▶ 店ごとに前週の日報を集め、出ていない日を数える
   ├──▶ 週の指標を計算し、決めた幅を外れたものに印を付ける
   ├──▶ コメントからスタッフの名前・連絡先を伏せる
   ▼
OpenAI API ── コメントを話題ごとに要約し、日付付きの JSON で返す
   ▼
Google Apps Script ── 日付を日報と突き合わせ、数字の表と並べる
   ▼
Gmail の下書き(エリアマネージャーごと) ──▶【人】直して営業部長に送る
役割想定する製品代替候補
実行環境Google Apps ScriptPower Automate、Make
生成AIOpenAI API(Responses API、構造化出力)Claude API、Gemini API
保管Google スプレッドシート(回答、店舗台帳、予算表、指標の幅、週次の確定版、処理ログ)-
入力Google フォーム(営業日報)-
メールGmail(報告の下書きの作成と、至急の知らせ)-

新しく足すのは、Apps Script と、指標の幅・週次の確定版・処理ログのシートだけです。 フォームの欄も、店長の書き方も変えません。POS と勤怠の仕組みにはつなぎません。店長が POS と勤怠から写した値をそのまま使うので、写し間違いは①の確認のなかで拾います。

指標の幅は、営業部長とエリアマネージャーが決めて表にします。 「予算比が95%を下回る」「人件費率が店の目安を3ポイント超える」「廃棄率が前月の平均の1.5倍を超える」のような決まりです。店の形(駅前の居酒屋、郊外のダイニング)で目安が違うので、店舗台帳の店の区分ごとに幅を持たせます。

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

Step1

処理の起点を決める

トリガーは3つ置きます。 1つ目は、フォームの回答先のスプレッドシートに付ける、送信のたびに動くトリガーです。Apps Script のインストール型のトリガーには、フォームそのものに付けるものと、回答先のスプレッドシートに付けるものの2つの版があるとされています。処理は、数字の欄の形の確認と、事故やけがを思わせる語の確認だけに絞ります。

2つ目は、毎週月曜の朝5時台に動く時間主導型のトリガーで、前週の月曜から日曜までを対象にします。3つ目は、毎月2日の朝に動く時間主導型のトリガーで、前月分の月次の報告を作ります。時間主導型のトリガーは毎分から月に1回までの間隔で動かせ、公式のページでは、9時に設定すると9時から10時のあいだのどこかで動くとされています。深夜に閉店する店の日曜の日報が出そろってから動くよう、月曜の早朝に置きます。

インストール型のトリガーは、作った人のアカウントで動きます。 公式のページにそう書かれており、Gmail の下書きもそのアカウントのメールボックスにできます。そこで、送信のたびのトリガーと月次のトリガーは店舗運営部の共用のアカウントで作り、週次のトリガーだけは、エリアマネージャーが自分のアカウントで自分のエリアの分を作ります。 週次の報告の下書きが、本人の Gmail に営業部長あてでできるようにするためです。エリアマネージャーが替わるときは、トリガーの作り直しを引き継ぎの手順に入れます。 トリガーが失敗すると、作った人に失敗のまとめのメールが届きます。

Step2

入力データを集める

データ中身取得元
営業日報店舗、営業日、売上、客数、組数、予算、人件費の時間、廃棄の額、苦情の件数、コメント回答のスプレッドシート
店舗台帳店舗コード、店名、エリア、エリアマネージャー、店の区分、定休日店舗台帳のシート
予算表店ごと・日ごとの売上の予算予算表のシート
指標の幅店の区分ごとの人件費率の目安、予算比・廃棄率の幅指標の幅のシート
スタッフの名簿店ごとのスタッフの名前と呼び名(伏せ字のためだけに使う)スタッフの名簿のシート
前週の確定版エリアマネージャーが直して送った前週の報告週次の確定版のシート

質を決めるのは、店舗台帳の定休日です。 日報が出ていない日を数えるとき、定休日と臨時休業を除かないと、休みの日まで「日報の抜け」と出ます。 臨時休業はエリアマネージャーが台帳の欄に入れます。

前週の確定版を持つのは、「続いている話」を拾うためです。 前週に本部へ依頼した製氷機の修理が、今週のコメントにまだ出てくるなら、依頼が片づいていないということです。 確定版の「本部への依頼」の欄を、今週の要約と並べて出します。

Step3

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

取るものどう取るか何に使うか
前週の日報回答のシートを一度に読み、営業日で前週に絞り、店舗コードでまとめる数字の集計と、コメントの要約
予算予算表を店舗コードと日付で引く予算比
店の情報店舗台帳を店舗コードで引くエリア、宛先、区分、定休日
指標の幅指標の幅のシートを店の区分で引く印を付ける規則
前週の依頼週次の確定版のシートを店舗コードで引く続いている話の照合

シートは範囲を一度に読み、スクリプトの中で店舗コードをキーにまとめます。 36店×7日で250件ほどなので量は多くありませんが、1行ずつ読むと遅くなります。営業日は、フォームの送信日時ではなく日報の「営業日」の欄で決めます。 深夜0時を回ってから出された日報が翌日の扱いにならないようにするためです。

送信のたびのトリガーでは、フォームの送信のイベントの値を使います。 公式のページでは、スプレッドシートのフォームの送信のイベントには、質問の名前と回答の組(namedValues)や、スプレッドシートの並びどおりの回答(values)が入るとされ、例では1つの回答も配列で返っています。値は配列の1つ目を取り出して使います。

Step4

AIへ渡す前に整形する

  1. 数字の欄の形の確認 … 売上・客数・人件費の時間が数として読めるか、0や空でないか。送信のたびに確かめ、おかしければ店長に打ち直しを頼む知らせを出します
  2. 重複の除去 … 同じ店・同じ営業日の日報が2件あれば、後に出たほうを使い、前のほうに印を付けます
  3. 出ていない日の数え上げ … 店舗台帳の定休日と臨時休業を除いて、日報の無い営業日を数えます
  4. 週の指標の計算 … 売上の合計、予算比、客数、客単価、人件費率(人件費の時間×店の平均時給÷売上)、廃棄率、苦情の件数を出します
  5. 印を付ける … 指標の幅のシートの規則に照らし、外れた指標に印と理由を付けます
  6. 伏せ字 … コメントの中のスタッフの名前と呼び名を【スタッフ】に、電話番号やメールアドレスを【連絡先】に置き換えます
  7. コメントの並べ方 … 1日ずつ「営業日|曜日|コメント」の1行にし、日付の順に並べます

4番目の人件費率に使う平均時給は、店舗台帳に店ごとに持たせます。 日報には時間しか書かれないためで、エリアマネージャーが見ている物差しをそのまま計算に写します。 計算の式は報告の欄外に書き、営業部長が同じ式で読めるようにします。

6番目を省かないでください。 店長のコメントには「【スタッフ】が今週で辞める」「【スタッフ】の遅刻が続いた」のような、働く人の事情が書かれます。 アルバイトには学生も多く、その名前を外のサービスに渡す理由はありません。

Step5

AIに処理させる

させるのは、1店1週間分のコメントを、決まった話題ごとに要約し、本部への依頼を書き出すことです。

話題書くこと例
人手欠員、急な休み、採用、教育の出来事「【スタッフ】が今週で退職」
設備故障、不具合、修理の手配製氷機、エアコン、レジ
食材・仕入欠品、入荷の遅れ、品質鮮魚の入荷の遅れ
お客様の声ほめられたこと、苦情、要望料理の提供の遅れへの苦情
売場・営業天候、近隣の催し、予約の動き近くの会場の催しで混雑
本部への依頼本部に動いてほしいと書かれたこと修理の手配、販促物の追加

話題ごとに、根拠にした営業日を付けさせます。 同じ話が火曜と木曜に出ていれば、1つの要約にまとめ、日付を2つ付けさせます。 1日ずつ読んでいると気づきにくい「続いている話」が、ここで見えるようになります。

本部への依頼は、ほかの話題と分けて書き出させます。 営業部長が週の会議で手を打つのは、主にここです。本文に埋もれると拾い漏れるという第3章の(c)を、出力の形で防ぎます。

させないこと理由
数字を書く・計算する数字はスクリプトが日報の欄から出す。AI には渡さない
店や店長の良し悪しを評価する評価は営業部長とエリアマネージャーの仕事
「気になる店」を選ぶ数字は規則で拾う。コメントは話題として書き出すだけ
スタッフの事情を推し量る退職や遅刻の理由を書かない。書かれた出来事だけ
コメントにない出来事を補う日報に書かれたことの要約に限る
打ち手を提案する何をするかはエリアマネージャーが決める

2行目と3行目は、とくに強く禁じます。 「店長のコメントが短く、意欲の低下がうかがえる」のような一文は、要約を頼むと出てきやすいものです。店長の評価は人事の判断につながるので、要約の段階で書かせません。

Step6

指示内容を固定する

あなたは飲食チェーンの店舗運営部で、エリアマネージャーが週次の報告を
書くのを手伝う担当です。以下は1つの店の1週間分の営業日報のコメントです。
このコメントだけを使って、話題ごとに要約してください。

【話題】
staffing(人手)/equipment(設備)/supply(食材・仕入)/
customer(お客様の声)/business(売場・営業)/hq_request(本部への依頼)

【書き方】
- topics:話題ごとに、出来事を1〜3文で要約する。
    同じ出来事が複数の日に出ていれば1つにまとめ、dates にすべての営業日を入れる。
    その話題の記述が無ければ、その話題は入れない。
- hq_requests:本部に動いてほしいと書かれていることを、1件ずつ書き出す。
    何を、誰に(分かれば)、いつまでに(書かれていれば)を、書かれたとおりに。
- positives:お客様にほめられたこと、うまくいったことを2つまで。
- 文は「〜があった」「〜と書かれている」のように、出来事として書く。

【厳守事項】
- 金額・人数・時間・割合などの数字を書かないでください。
  コメントに数字が書かれていても、要約に写さないでください。
- 店や店長、スタッフを評価する言葉(意欲、怠慢、優秀、問題がある等)を
  使わないでください。
- スタッフの退職・欠勤・遅刻の理由を推し量らないでください。
- コメントに書かれていない出来事を補わないでください。
- 対策や打ち手を提案しないでください。
- 【スタッフ】【連絡先】の記号はそのまま使い、人物を推測しないでください。
- 食品の事故、けが、火災、警察への連絡を思わせる記述があれば、
  要約に含めたうえで urgent_dates にその営業日を入れてください。

【店の区分】{store_type}
【前週に本部へ依頼した事項】{last_week_requests}
【コメントの一覧】{comments}

数字を「写さない」とまで書いているのは、コメントの中にも数字があるからです。 「予約が20組入った」と書かれていると、要約に写します。写した数字は、スクリプトが計算した表の数字と並んで報告に載り、どちらが正しいのか分からなくなります。 数字の出どころを表の側だけにします。

前週の依頼を渡しているのは、続いているかどうかを書かせるためではありません。 今週のコメントに同じ設備や同じ依頼が出てきたとき、同じ話として1つにまとめやすくするためです。続いているかどうかの印は、スクリプトが前週の確定版と話題を突き合わせて付けます。

Step7

出力形式を固定する

OpenAI API の Responses API で、構造化出力を使って次の形の JSON を受け取ります。 公式のページでは、text.format に type: "json_schema" と strict: true を指定する書き方が示されています。

{
  "store_code": "S-118",
  "week": "2026-10-19",
  "topics": [
    { "topic": "equipment", "summary": "", "dates": ["2026-10-20", "2026-10-22"] }
  ],
  "hq_requests": [ { "request": "", "dates": ["2026-10-22"] } ],
  "positives": [ { "text": "", "dates": [] } ],
  "urgent_dates": [],
  "needs_review": ""
}

1つ目の理由は、日付をスクリプトで検算できることです。

検査合わないとき
dates がすべて、その店の前週の日報の営業日にある確認待ち(存在しない日付)
dates が空の要約がない確認待ち(根拠の無い要約)
要約の本文に数字がない数字を伏せて確認待ち
本文に評価の語の一覧(意欲、怠慢、優秀など)がない確認待ち
topic が決めた6つのどれか確認待ち
応答に refusal が入っていないその店は要約なしで、コメントの原文を下書きに添える

最後の行は、公式のページの記述から来ます。 公式のページでは、拒否はスキーマに従うとは限らないため、応答に refusal という項目が入るとされています。拒否が返った店は、要約を作らずにコメントの原文をそのまま下書きに添えます。 また、出力の上限に達したときは応答の status が incomplete になるとされているので、その場合もやり直すか確認待ちにします。

2つ目の理由は、話題の順に報告の様式へ差し込めることです。 店ごとの欄は、数字の表、印、本部への依頼、話題ごとの要約、ほめられたことの順に並べ、営業部長がどの店でも同じ場所を見れば同じことが分かるようにします。

Step8

システムへ連携する

つなぎ先方式内容
回答のスプレッドシート送信のトリガーと読み取り形の確認、語の確認、前週の日報の読み取り
店舗台帳・予算表・指標の幅Apps Script の読み取り宛先、予算、規則
OpenAI APIUrlFetchApp.fetch店ごとにコメントの要約を受け取る
GmailGmailApp.createDraftエリアマネージャーあての報告の下書き、至急の知らせ
週次の確定版Apps Script の書き込みエリアマネージャーが送った版を写す

API の呼び出しでは muteHttpExceptions を true にします。 公式のページでは、これを true にすると失敗の応答でも例外を投げず、応答を返すとされています。応答のコードを見て、混み合いなら時間をおいてやり直し、続けて失敗した店は要約なしで下書きを作ります。 要約が無くても数字の表は出せるので、報告そのものは止めません。 API キーはスクリプトのプロパティに置きます。公式のページでは、スクリプトのプロパティはそのスクリプトの利用者全員で共有され、スクリプトの間では共有されないとされています。

Gmail は下書きまでです。 createDraft は宛先・件名・本文のほか、HTML の本文、差出人の表示名、返信先などを指定して下書きを作れるとされています。数字の表は HTML の本文で表にし、 返信先は店舗運営部の共用のアドレスにします。このメソッドを使うには https://mail.google.com/ のスコープの承認が要るとされています。

確定版は、エリアマネージャーが送ったメールから写すのではなく、確認の一覧の「送った」欄に印を付けた時点の内容を写します。 送ったメールを読み取る処理を足すより、印を付けるほうが壊れにくいからです。

Step9

人が確認する

9店分の下書きを、エリアマネージャーが全部読みます。 下書きは1通に9店分が並び、冒頭に「数字で印の付いた店」と「本部への依頼」がまとまっています。

  1. 至急の知らせと urgent_dates を先に見る … 店長に電話で状況を確かめたかを確かめます
  2. 数字で印の付いた店を見る … 印の理由を読み、自分が店で見たことと合っているかを考えて一言を足します
  3. 本部への依頼を確かめる … 抜けている依頼、すでに片づいた依頼がないか。前週から続いている依頼には期限を書きます
  4. 話題ごとの要約を流し読む … 要約の日付から、気になるものだけ元のコメントを開きます
  5. 直して送る … 送ったら確認の一覧に印を付けます

2番目が、この構成でエリアマネージャーにしかできない仕事です。 予算比が割れていても、近くの道路工事のせいだと店で聞いていれば、報告に書く一言が変わります。数字の印は規則で出ますが、その意味を書くのは店を回っている人です。

1店5分を目安にします。 印の付いた店と依頼の多い店に時間を使い、落ち着いている店は流し読みで終えます。

Step10

例外に対処する

起きること対応
日報が出ていない日がある数字の表に「未提出」と出し、その日を除いて計算する。埋め合わせの値を作らない
数字の欄が空・桁がおかしい送信のたびに店長に打ち直しを頼む。直らなければ印を付けて計算から外す
同じ営業日の日報が2件後のものを使い、前のものに印を付ける
臨時休業が台帳に入っていない「日報の抜け」と出る。エリアマネージャーが台帳に入れて再計算
コメントが空の週要約を作らず「コメントなし」と出す
食品の事故・けがを思わせる語送信の時点で知らせる。週次の報告を待たない
API の拒否・出力の打ち切り・応答なし要約なしで、コメントの原文を下書きに添える
1回の実行が時間切れになる処理済みの印を見て、続きを数分後のトリガーで作る

最後の行は、Apps Script の上限から来ます。 公式の上限の表では、スクリプトの実行時間は1回あたり6分で、トリガーで動かした合計の実行時間は Google Workspace のアカウントで1日6時間です。36店分の要約は1回で終わることが多いものの、混み合いのやり直しが重なると6分に近づくので、エリアごとに9店ずつ作り、残りは1回きりのトリガーで続きを作ります。 トリガーはユーザー・スクリプトごとに20個までとされているので、続きのトリガーは動いたら消します。

Step11

記録を残す

  • 実行の日時、対象の週、店ごとの日報の件数と未提出の日
  • 店ごとの週の指標と、付けた印と理由(計算に使った値と式)
  • AI に渡したコメントの一覧(伏せ字の後)と、AI が返した JSON の全文
  • 検査の結果と、確認待ちにした理由
  • 至急の知らせを出した日時と、その日報
  • エリアマネージャーが直して送った確定版

2つ目で計算に使った値と式を残すのは、第3章の(b)を繰り返さないためです。 営業部長が数字に疑問を持ったとき、日報のどの欄の値から、どの式で出したかをすぐに示せます。

最後の確定版が、月次の報告の材料になります。 月次の報告は、4週分の確定版と、月の数字の集計から作ります。AI の要約ではなく、エリアマネージャーが直した後の版をもとにするので、月次で同じ直しを繰り返さずに済みます。

04実装レベルの3段階

最小構成:置き換えたコメントを ChatGPT の画面に貼って要約させ、数字は手で集計する / 1店ごとのコメントの要約
半自動化:上記+Apps Script で数字を集計して印を付け、API でコメントを要約し、Gmail の下書きにする / 集計、印、要約、日付の検算、下書き、月次のまとめ
本格構成:上記+本部への依頼を依頼の管理表に1件ずつ起こし、担当の部署と期限を付けて追う / 依頼の起票と進み具合の管理

最小構成では144件をさばけません。 貼り付けと手の集計が残るので、確かめるための段階です。 本記事の想定は半自動化です。 月曜の朝にエリアマネージャーごとの下書きが届き、午前中に直して送ります。1件15分が5分になるのはこの段階です。 差が大きいのは、①の転記と計算、②の抜けの確認がスクリプトに移り、③の読み込みが「要約を読み、日付から気になる原文を開く」に変わるからです。 本格構成は、本部への依頼が要約から安定して拾えるようになってから進めます。 依頼の管理表に起こすと、修理や販促の担当の部署が直接見るので、拾い漏れも拾いすぎも、そのまま本部の仕事に響きます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 30〜50店舗ほどの飲食チェーンで、店長が毎日の営業日報を Google フォームで出し、エリアマネージャーが受け持ちの店の日報を読んで週次・月次の報告を書いている場合。日報に売上・客数・人件費・廃棄などの数字の欄と、店長が自由に書くコメントの欄の両方があり、エリアマネージャーが数字の確認とコメントの読み込みに毎週まとまった時間を使っている場合。報告の書き方がエリアマネージャーごとにばらばらな場合。
向いていない
  1. 店舗が数店で、オーナーが毎日すべての店に顔を出している場合。POS と勤怠の仕組みに店舗別の分析画面があり、日報のコメントをほとんど使っていない場合。日報がまだ紙や LINE のメッセージで、決まった欄で集まっていない場合。なお、店長の評価や、店の閉店・人員配置の判断はこの構成の対象外です。

07最小構成で試す方法

  1. 受け持ちの9店から3店を選ぶ(コメントの長い店・短い店・前週に問題のあった店を混ぜる)
  2. その3店の前週の日報のコメントを写し、スタッフの名前を【スタッフ】に置き換える
  3. 手元の ChatGPT の画面に、第7章のプロンプトと1店ずつのコメントを貼る
  4. 出てきた要約を、エリアマネージャーが前週に書いた報告と並べて読み比べる
  5. 数字は、これまでどおり手で集計した表を横に置く

数字の集計は、最小構成でも AI に頼まないでください。 表計算の式で出せるものを AI に計算させると、この構成でいちばん守りたい「数字の出どころ」を最初から崩すことになります。

出てきた内容判断
前週の報告と同じ話題を拾えているスクリプトで日報からつなぐ段階に進む
本部への依頼の拾い漏れがない構成は有効。依頼の欄をそのまま使える
数字を写してくる指示の書き方で直る。検査で止める
店長を評価する一文が入る禁止の語を足し、検査の一覧に入れる

2行目を最初に見てください。 営業部長が報告でいちばん使うのは本部への依頼で、ここの拾い漏れが少ないかどうかで、この構成の値打ちが決まります。

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

問題対策
要約にコメントの数字が写る写さないと指示し、検査で止める。 数字の出どころは表だけ
店長を評価する一文が入る評価の語を禁じ、検査の一覧に入れる
AI が「気になる店」を選び始める数字は規則で拾い、AI には話題を書き出させるだけ
存在しない日付の要約が出る日付を日報と突き合わせ、確認待ちにする
定休日が「日報の抜け」と出る店舗台帳の定休日と臨時休業を先に除く
深夜の日報が翌日の扱いになる送信日時ではなく「営業日」の欄で決める
スタッフの名前が外に出る名簿で伏せ字にする。呼び名も名簿に入れる
食品の事故が月曜まで埋もれる送信のたびに語を見て知らせる
拒否・打ち切りで報告が止まる要約なしでも数字の表で下書きを作る
担当者のアカウントでトリガーを作る作成者のアカウントで動く。共用のアカウントで作る

上の3行が、この構成の失敗のほとんどです。 どれも「AI が数字や評価に踏み込む」失敗で、数字を渡さず、評価の語を検査で止め、気になる店を規則で決めておけば、起きようがありません。

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

この構成で扱うデータ: 店ごとの売上・予算・人件費、店長のコメントに書かれたスタッフの事情とお客様の声、そして店長の名前です。

  1. 外部へ渡す範囲を、要約に必要なものまでに限る … OpenAI API に渡すのは、伏せ字を済ませたコメントと店の区分だけです。売上・予算・人件費の数字は渡しません
  2. API のデータの扱いを確かめる … 公式のページでは、API に送ったデータは、利用者が共有を選ばない限りモデルの学習や改善には使われないとされています。不正利用の監視のログは最長30日保たれ、Responses API は既定でアプリケーションの状態を30日保つとされているので、保存の設定と、自社の取り決めとの関係を確かめておきます
  3. 保存先の地域 … 公式のページでは、日本はデータの保存の地域として選べる一方、処理の地域としては挙げられていません。コメントが国外で処理されうる前提で、社内の規程に照らしておきます
  4. 店長やスタッフの評価に使わない … 要約は店の出来事の報告です。店長の評価や、スタッフの処遇の材料にしないことを、店舗運営部の決まりとして書いておきます
  5. 送信を自動にしない … 下書きまでです。報告に一言を足すのはエリアマネージャーの仕事です
  6. API キーをスクリプトに直接書かない … スクリプトのプロパティに置き、スクリプトの編集権限を店舗運営部の担当に限ります

誤りが起きた場合のリスクは、誤った数字で店に手を打つことと、要約が店長の評価にすり替わることの2つです。前者は数字をスクリプトだけで出すことで、後者は評価の語を止めることと使い方の決まりで防ぎます。

10まず何から始めるか

1週目:指標の幅を決める

営業部長とエリアマネージャーで、予算比・人件費率・廃棄率の「気になる」の幅を店の区分ごとに決めます。 あわせて店舗台帳に定休日・平均時給・店の区分の列を足します。

2週目:3店で試す

3店のコメントを置き換えて、手元の ChatGPT の画面で要約させます。本部への依頼の拾い漏れと、数字の写し込みを最優先で見ます。

3週目:数字の集計と印をスクリプトにする

Apps Script で回答のシートを読み、店ごとの週の指標と印、日報の抜けまでを作ります。この時点では要約を作らず、数字の表だけをエリアマネージャーが手の集計と見比べます。

4週目:要約と下書きまでつなぐ

API で要約を作り、日付の検算と語の検査を足して、Gmail の下書きを作るところまで組みます。最初の週は、1つのエリアの9店だけで回します。

2か月目: 4エリアに広げ、送信のたびの形の確認と至急の知らせを足します。月次の報告の下書きを、週次の確定版から作ります。3か月目以降: 1件あたりの確認の時間を測り、指標の幅を見直します。36店の週次の報告が、月曜の午前中に同じ形でそろうようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-26/最終更新:2026-10-26
確認した内容情報源確認日
時間主導型のトリガーが毎分から月1回まで動かせ、時刻がずれうること。インストール型のトリガーが作成者のアカウントで動くこと。フォームの送信のトリガーにフォーム用とスプレッドシート用の2つの版があること。失敗時にまとめのメールが届くことGoogle: Installable triggers2026-10-26
スプレッドシートのフォームの送信のイベントに namedValues・values などがあり、回答が配列で返ることGoogle: Event objects2026-10-26
実行時間が1回6分、トリガーの合計実行時間が Workspace で1日6時間、トリガーがユーザー・スクリプトごとに20個であることGoogle: Quotas for Google Services2026-10-26
muteHttpExceptions を true にすると、失敗の応答でも例外を投げず応答を返すことGoogle: Class UrlFetchApp2026-10-26
スクリプトのプロパティがスクリプトの利用者全員で共有され、スクリプトの間では共有されないことGoogle: Properties Service2026-10-26
createDraft が宛先・件名・本文と、HTML の本文・表示名・返信先などの指定で下書きを作ること。https://mail.google.com/ のスコープが要ることGoogle: Class GmailApp2026-10-26
Responses API で text.format に json_schema と strict: true を指定すること。拒否が refusal として返ること。出力の上限に達すると status が incomplete になることOpenAI: Structured model outputs2026-10-26
API のデータが既定では学習に使われないこと。不正利用の監視のログが最長30日、Responses API のアプリケーションの状態が既定で30日保たれること。日本が保存の地域として選べ、処理の地域には挙げられていないことOpenAI: Data controls in the OpenAI platform2026-10-26

指標の幅や、どこからを「気になる店」とするかは、自社で決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。

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

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

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

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