飲食チェーンの店長がフォームで出す営業日報を、数字は Apps Script で集計し、コメントは AI で要約して、エリアマネージャーの週次・月次の報告と気になる店の一覧にする
店長が毎日フォームで出す営業日報から、売上・客数・人件費・廃棄の数字を Apps Script が店ごとに週と月で集計し、コメント欄は AI が話題ごとに要約します。エリアマネージャーは、その2つを並べた下書きを直して、上長への週次・月次の報告にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 宿泊/小売/飲食
- 対象部門
- 営業
- 対象業務
- 要約/集計・分析
- 主な課題
- データ分析に時間がかかる/属人化している/書類作成に時間がかかる
- AIで行う処理
- 要約
- 主な効果
- 品質標準化/対応スピード向上/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月曜の朝、回答のスプレッドシートを受け持ちの店と前週の日付で絞り込む
- 店ごとに7日分の数字を集計用の表に写し、週の売上・客数・客単価・予算比・人件費率・廃棄率を計算する
- 日報が出ていない日がないかを確かめ、抜けがあれば店長に電話する
- 7日分のコメントを読み、設備・人手・食材・お客様の声・本部への依頼を拾ってメモする
- 店ごとに、数字の一言とコメントの要点を数行ずつ報告の様式に書く
- 予算比が大きく割れた店や、苦情の多かった店を「気になる店」として冒頭に書く
- 月初に、4週分の報告を読み直して月次の報告にまとめる
- 人店長がこれまでどおり、閉店後に営業日報をフォームで出す
- 自動送信のたびに Apps Script が動き、数字の欄の形を確かめ、コメントに食品の事故やけがを思わせる語があればエリアマネージャーに知らせる
- 自動毎週月曜の朝に Apps Script が動き、前週の日報を店ごとに集める。出ていない日を数える
- 自動店ごとに、週の売上・客数・客単価・予算比・人件費率・廃棄率・苦情の件数を計算し、決めた幅を外れた指標に印を付ける
- 自動コメントからスタッフの名前と連絡先を伏せ、日付付きの一覧にして OpenAI API に渡し、話題ごとの要約を JSON で受け取る
- 自動要約に付いた日付が、その店の前週の日報にあるかを突き合わせる
- 自動数字の表、印、要約、本部への依頼を並べた週次の報告の下書きを、エリアマネージャーの Gmail の下書きに作る
- 人エリアマネージャーが下書きを読み、気になる店の欄を直して営業部長に送る
- 自動月初に、前月分の確定した週次の報告と、月の数字の集計から月次の報告の下書きを作る
各工程の詳しい説明を読む
- 月曜の朝、回答のスプレッドシートを受け持ちの店と前週の日付で絞り込む
- 店ごとに7日分の数字を集計用の表に写し、週の売上・客数・客単価・予算比・人件費率・廃棄率を計算する
- 日報が出ていない日がないかを確かめ、抜けがあれば店長に電話する
- 7日分のコメントを読み、設備・人手・食材・お客様の声・本部への依頼を拾ってメモする
- 店ごとに、数字の一言とコメントの要点を数行ずつ報告の様式に書く
- 予算比が大きく割れた店や、苦情の多かった店を「気になる店」として冒頭に書く
- 月初に、4週分の報告を読み直して月次の報告にまとめる
(a)読み切れない。 9店×7日で63件の日報を、2番から5番まで通すと1店15分、9店で2時間を超えます。 机に向かえる半日のうち大半がこれで消え、店長への折り返しや本部への依頼の手配が後回しになります。
(b)数字の転記で誤る。 2番は日報の欄の値を集計の表に写して計算しています。桁を1つ写し間違えると、その店の人件費率が大きく外れて見えます。 営業部長がその数字をもとに店長に電話を入れ、後から写し間違いと分かったことがあります。
(c)書き方がエリアマネージャーごとに違う。 数字を細かく書く人もいれば、コメントの話ばかり書く人もいます。営業部長は4人の報告を並べて読みますが、同じ物差しで比べられません。 本部への依頼も、報告の本文に埋もれていると拾い漏れます。
(d)コメントの埋もれ。 「製氷機の音がおかしい」と火曜に書かれ、木曜に「氷が足りない」と書かれていても、別の日のコメントを読み合わせないとつながりません。 1日ずつ読んでいると、同じ話が週の中で何度も出ていることに気づきにくくなります。
- 【人】 店長がこれまでどおり、閉店後に営業日報をフォームで出す
- 【自動】 送信のたびに Apps Script が動き、数字の欄の形を確かめ、コメントに食品の事故やけがを思わせる語があればエリアマネージャーに知らせる
- 【自動】 毎週月曜の朝に Apps Script が動き、前週の日報を店ごとに集める。出ていない日を数える
- 【自動】 店ごとに、週の売上・客数・客単価・予算比・人件費率・廃棄率・苦情の件数を計算し、決めた幅を外れた指標に印を付ける
- 【自動】 コメントからスタッフの名前と連絡先を伏せ、日付付きの一覧にして OpenAI API に渡し、話題ごとの要約を JSON で受け取る
- 【自動】 要約に付いた日付が、その店の前週の日報にあるかを突き合わせる
- 【自動】 数字の表、印、要約、本部への依頼を並べた週次の報告の下書きを、エリアマネージャーの Gmail の下書きに作る
- 【人】 エリアマネージャーが下書きを読み、気になる店の欄を直して営業部長に送る
- 【自動】 月初に、前月分の確定した週次の報告と、月の数字の集計から月次の報告の下書きを作る
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 Script | Power Automate、Make |
| 生成AI | OpenAI API(Responses API、構造化出力) | Claude API、Gemini API |
| 保管 | Google スプレッドシート(回答、店舗台帳、予算表、指標の幅、週次の確定版、処理ログ) | - |
| 入力 | Google フォーム(営業日報) | - |
| メール | Gmail(報告の下書きの作成と、至急の知らせ) | - |
新しく足すのは、Apps Script と、指標の幅・週次の確定版・処理ログのシートだけです。 フォームの欄も、店長の書き方も変えません。POS と勤怠の仕組みにはつなぎません。店長が POS と勤怠から写した値をそのまま使うので、写し間違いは①の確認のなかで拾います。
指標の幅は、営業部長とエリアマネージャーが決めて表にします。 「予算比が95%を下回る」「人件費率が店の目安を3ポイント超える」「廃棄率が前月の平均の1.5倍を超える」のような決まりです。店の形(駅前の居酒屋、郊外のダイニング)で目安が違うので、店舗台帳の店の区分ごとに幅を持たせます。
03どうやって実装するのか
処理の起点を決める
トリガーは3つ置きます。 1つ目は、フォームの回答先のスプレッドシートに付ける、送信のたびに動くトリガーです。Apps Script のインストール型のトリガーには、フォームそのものに付けるものと、回答先のスプレッドシートに付けるものの2つの版があるとされています。処理は、数字の欄の形の確認と、事故やけがを思わせる語の確認だけに絞ります。
2つ目は、毎週月曜の朝5時台に動く時間主導型のトリガーで、前週の月曜から日曜までを対象にします。3つ目は、毎月2日の朝に動く時間主導型のトリガーで、前月分の月次の報告を作ります。時間主導型のトリガーは毎分から月に1回までの間隔で動かせ、公式のページでは、9時に設定すると9時から10時のあいだのどこかで動くとされています。深夜に閉店する店の日曜の日報が出そろってから動くよう、月曜の早朝に置きます。
インストール型のトリガーは、作った人のアカウントで動きます。 公式のページにそう書かれており、Gmail の下書きもそのアカウントのメールボックスにできます。そこで、送信のたびのトリガーと月次のトリガーは店舗運営部の共用のアカウントで作り、週次のトリガーだけは、エリアマネージャーが自分のアカウントで自分のエリアの分を作ります。 週次の報告の下書きが、本人の Gmail に営業部長あてでできるようにするためです。エリアマネージャーが替わるときは、トリガーの作り直しを引き継ぎの手順に入れます。 トリガーが失敗すると、作った人に失敗のまとめのメールが届きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 営業日報 | 店舗、営業日、売上、客数、組数、予算、人件費の時間、廃棄の額、苦情の件数、コメント | 回答のスプレッドシート |
| 店舗台帳 | 店舗コード、店名、エリア、エリアマネージャー、店の区分、定休日 | 店舗台帳のシート |
| 予算表 | 店ごと・日ごとの売上の予算 | 予算表のシート |
| 指標の幅 | 店の区分ごとの人件費率の目安、予算比・廃棄率の幅 | 指標の幅のシート |
| スタッフの名簿 | 店ごとのスタッフの名前と呼び名(伏せ字のためだけに使う) | スタッフの名簿のシート |
| 前週の確定版 | エリアマネージャーが直して送った前週の報告 | 週次の確定版のシート |
質を決めるのは、店舗台帳の定休日です。 日報が出ていない日を数えるとき、定休日と臨時休業を除かないと、休みの日まで「日報の抜け」と出ます。 臨時休業はエリアマネージャーが台帳の欄に入れます。
前週の確定版を持つのは、「続いている話」を拾うためです。 前週に本部へ依頼した製氷機の修理が、今週のコメントにまだ出てくるなら、依頼が片づいていないということです。 確定版の「本部への依頼」の欄を、今週の要約と並べて出します。
データの取得方法を決める
| 取るもの | どう取るか | 何に使うか |
|---|---|---|
| 前週の日報 | 回答のシートを一度に読み、営業日で前週に絞り、店舗コードでまとめる | 数字の集計と、コメントの要約 |
| 予算 | 予算表を店舗コードと日付で引く | 予算比 |
| 店の情報 | 店舗台帳を店舗コードで引く | エリア、宛先、区分、定休日 |
| 指標の幅 | 指標の幅のシートを店の区分で引く | 印を付ける規則 |
| 前週の依頼 | 週次の確定版のシートを店舗コードで引く | 続いている話の照合 |
シートは範囲を一度に読み、スクリプトの中で店舗コードをキーにまとめます。 36店×7日で250件ほどなので量は多くありませんが、1行ずつ読むと遅くなります。営業日は、フォームの送信日時ではなく日報の「営業日」の欄で決めます。 深夜0時を回ってから出された日報が翌日の扱いにならないようにするためです。
送信のたびのトリガーでは、フォームの送信のイベントの値を使います。 公式のページでは、スプレッドシートのフォームの送信のイベントには、質問の名前と回答の組(namedValues)や、スプレッドシートの並びどおりの回答(values)が入るとされ、例では1つの回答も配列で返っています。値は配列の1つ目を取り出して使います。
AIへ渡す前に整形する
- 数字の欄の形の確認 … 売上・客数・人件費の時間が数として読めるか、0や空でないか。送信のたびに確かめ、おかしければ店長に打ち直しを頼む知らせを出します
- 重複の除去 … 同じ店・同じ営業日の日報が2件あれば、後に出たほうを使い、前のほうに印を付けます
- 出ていない日の数え上げ … 店舗台帳の定休日と臨時休業を除いて、日報の無い営業日を数えます
- 週の指標の計算 … 売上の合計、予算比、客数、客単価、人件費率(人件費の時間×店の平均時給÷売上)、廃棄率、苦情の件数を出します
- 印を付ける … 指標の幅のシートの規則に照らし、外れた指標に印と理由を付けます
- 伏せ字 … コメントの中のスタッフの名前と呼び名を【スタッフ】に、電話番号やメールアドレスを【連絡先】に置き換えます
- コメントの並べ方 … 1日ずつ「営業日|曜日|コメント」の1行にし、日付の順に並べます
4番目の人件費率に使う平均時給は、店舗台帳に店ごとに持たせます。 日報には時間しか書かれないためで、エリアマネージャーが見ている物差しをそのまま計算に写します。 計算の式は報告の欄外に書き、営業部長が同じ式で読めるようにします。
6番目を省かないでください。 店長のコメントには「【スタッフ】が今週で辞める」「【スタッフ】の遅刻が続いた」のような、働く人の事情が書かれます。 アルバイトには学生も多く、その名前を外のサービスに渡す理由はありません。
AIに処理させる
させるのは、1店1週間分のコメントを、決まった話題ごとに要約し、本部への依頼を書き出すことです。
| 話題 | 書くこと | 例 |
|---|---|---|
| 人手 | 欠員、急な休み、採用、教育の出来事 | 「【スタッフ】が今週で退職」 |
| 設備 | 故障、不具合、修理の手配 | 製氷機、エアコン、レジ |
| 食材・仕入 | 欠品、入荷の遅れ、品質 | 鮮魚の入荷の遅れ |
| お客様の声 | ほめられたこと、苦情、要望 | 料理の提供の遅れへの苦情 |
| 売場・営業 | 天候、近隣の催し、予約の動き | 近くの会場の催しで混雑 |
| 本部への依頼 | 本部に動いてほしいと書かれたこと | 修理の手配、販促物の追加 |
話題ごとに、根拠にした営業日を付けさせます。 同じ話が火曜と木曜に出ていれば、1つの要約にまとめ、日付を2つ付けさせます。 1日ずつ読んでいると気づきにくい「続いている話」が、ここで見えるようになります。
本部への依頼は、ほかの話題と分けて書き出させます。 営業部長が週の会議で手を打つのは、主にここです。本文に埋もれると拾い漏れるという第3章の(c)を、出力の形で防ぎます。
| させないこと | 理由 |
|---|---|
| 数字を書く・計算する | 数字はスクリプトが日報の欄から出す。AI には渡さない |
| 店や店長の良し悪しを評価する | 評価は営業部長とエリアマネージャーの仕事 |
| 「気になる店」を選ぶ | 数字は規則で拾う。コメントは話題として書き出すだけ |
| スタッフの事情を推し量る | 退職や遅刻の理由を書かない。書かれた出来事だけ |
| コメントにない出来事を補う | 日報に書かれたことの要約に限る |
| 打ち手を提案する | 何をするかはエリアマネージャーが決める |
2行目と3行目は、とくに強く禁じます。 「店長のコメントが短く、意欲の低下がうかがえる」のような一文は、要約を頼むと出てきやすいものです。店長の評価は人事の判断につながるので、要約の段階で書かせません。
指示内容を固定する
あなたは飲食チェーンの店舗運営部で、エリアマネージャーが週次の報告を
書くのを手伝う担当です。以下は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つにまとめやすくするためです。続いているかどうかの印は、スクリプトが前週の確定版と話題を突き合わせて付けます。
出力形式を固定する
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つ目の理由は、話題の順に報告の様式へ差し込めることです。 店ごとの欄は、数字の表、印、本部への依頼、話題ごとの要約、ほめられたことの順に並べ、営業部長がどの店でも同じ場所を見れば同じことが分かるようにします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 回答のスプレッドシート | 送信のトリガーと読み取り | 形の確認、語の確認、前週の日報の読み取り |
| 店舗台帳・予算表・指標の幅 | Apps Script の読み取り | 宛先、予算、規則 |
| OpenAI API | UrlFetchApp.fetch | 店ごとにコメントの要約を受け取る |
| Gmail | GmailApp.createDraft | エリアマネージャーあての報告の下書き、至急の知らせ |
| 週次の確定版 | Apps Script の書き込み | エリアマネージャーが送った版を写す |
API の呼び出しでは muteHttpExceptions を true にします。 公式のページでは、これを true にすると失敗の応答でも例外を投げず、応答を返すとされています。応答のコードを見て、混み合いなら時間をおいてやり直し、続けて失敗した店は要約なしで下書きを作ります。 要約が無くても数字の表は出せるので、報告そのものは止めません。 API キーはスクリプトのプロパティに置きます。公式のページでは、スクリプトのプロパティはそのスクリプトの利用者全員で共有され、スクリプトの間では共有されないとされています。
Gmail は下書きまでです。 createDraft は宛先・件名・本文のほか、HTML の本文、差出人の表示名、返信先などを指定して下書きを作れるとされています。数字の表は HTML の本文で表にし、 返信先は店舗運営部の共用のアドレスにします。このメソッドを使うには https://mail.google.com/ のスコープの承認が要るとされています。
確定版は、エリアマネージャーが送ったメールから写すのではなく、確認の一覧の「送った」欄に印を付けた時点の内容を写します。 送ったメールを読み取る処理を足すより、印を付けるほうが壊れにくいからです。
人が確認する
9店分の下書きを、エリアマネージャーが全部読みます。 下書きは1通に9店分が並び、冒頭に「数字で印の付いた店」と「本部への依頼」がまとまっています。
- 至急の知らせと
urgent_datesを先に見る … 店長に電話で状況を確かめたかを確かめます - 数字で印の付いた店を見る … 印の理由を読み、自分が店で見たことと合っているかを考えて一言を足します
- 本部への依頼を確かめる … 抜けている依頼、すでに片づいた依頼がないか。前週から続いている依頼には期限を書きます
- 話題ごとの要約を流し読む … 要約の日付から、気になるものだけ元のコメントを開きます
- 直して送る … 送ったら確認の一覧に印を付けます
2番目が、この構成でエリアマネージャーにしかできない仕事です。 予算比が割れていても、近くの道路工事のせいだと店で聞いていれば、報告に書く一言が変わります。数字の印は規則で出ますが、その意味を書くのは店を回っている人です。
1店5分を目安にします。 印の付いた店と依頼の多い店に時間を使い、落ち着いている店は流し読みで終えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 日報が出ていない日がある | 数字の表に「未提出」と出し、その日を除いて計算する。埋め合わせの値を作らない |
| 数字の欄が空・桁がおかしい | 送信のたびに店長に打ち直しを頼む。直らなければ印を付けて計算から外す |
| 同じ営業日の日報が2件 | 後のものを使い、前のものに印を付ける |
| 臨時休業が台帳に入っていない | 「日報の抜け」と出る。エリアマネージャーが台帳に入れて再計算 |
| コメントが空の週 | 要約を作らず「コメントなし」と出す |
| 食品の事故・けがを思わせる語 | 送信の時点で知らせる。週次の報告を待たない |
| API の拒否・出力の打ち切り・応答なし | 要約なしで、コメントの原文を下書きに添える |
| 1回の実行が時間切れになる | 処理済みの印を見て、続きを数分後のトリガーで作る |
最後の行は、Apps Script の上限から来ます。 公式の上限の表では、スクリプトの実行時間は1回あたり6分で、トリガーで動かした合計の実行時間は Google Workspace のアカウントで1日6時間です。36店分の要約は1回で終わることが多いものの、混み合いのやり直しが重なると6分に近づくので、エリアごとに9店ずつ作り、残りは1回きりのトリガーで続きを作ります。 トリガーはユーザー・スクリプトごとに20個までとされているので、続きのトリガーは動いたら消します。
記録を残す
- 実行の日時、対象の週、店ごとの日報の件数と未提出の日
- 店ごとの週の指標と、付けた印と理由(計算に使った値と式)
- AI に渡したコメントの一覧(伏せ字の後)と、AI が返した JSON の全文
- 検査の結果と、確認待ちにした理由
- 至急の知らせを出した日時と、その日報
- エリアマネージャーが直して送った確定版
2つ目で計算に使った値と式を残すのは、第3章の(b)を繰り返さないためです。 営業部長が数字に疑問を持ったとき、日報のどの欄の値から、どの式で出したかをすぐに示せます。
最後の確定版が、月次の報告の材料になります。 月次の報告は、4週分の確定版と、月の数字の集計から作ります。AI の要約ではなく、エリアマネージャーが直した後の版をもとにするので、月次で同じ直しを繰り返さずに済みます。
04実装レベルの3段階
最小構成では144件をさばけません。 貼り付けと手の集計が残るので、確かめるための段階です。 本記事の想定は半自動化です。 月曜の朝にエリアマネージャーごとの下書きが届き、午前中に直して送ります。1件15分が5分になるのはこの段階です。 差が大きいのは、①の転記と計算、②の抜けの確認がスクリプトに移り、③の読み込みが「要約を読み、日付から気になる原文を開く」に変わるからです。 本格構成は、本部への依頼が要約から安定して拾えるようになってから進めます。 依頼の管理表に起こすと、修理や販促の担当の部署が直接見るので、拾い漏れも拾いすぎも、そのまま本部の仕事に響きます。
05工数削減シミュレーション
導入後 144件 × 5分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 30〜50店舗ほどの飲食チェーンで、店長が毎日の営業日報を Google フォームで出し、エリアマネージャーが受け持ちの店の日報を読んで週次・月次の報告を書いている場合。日報に売上・客数・人件費・廃棄などの数字の欄と、店長が自由に書くコメントの欄の両方があり、エリアマネージャーが数字の確認とコメントの読み込みに毎週まとまった時間を使っている場合。報告の書き方がエリアマネージャーごとにばらばらな場合。
- 店舗が数店で、オーナーが毎日すべての店に顔を出している場合。POS と勤怠の仕組みに店舗別の分析画面があり、日報のコメントをほとんど使っていない場合。日報がまだ紙や LINE のメッセージで、決まった欄で集まっていない場合。なお、店長の評価や、店の閉店・人員配置の判断はこの構成の対象外です。
07最小構成で試す方法
- 受け持ちの9店から3店を選ぶ(コメントの長い店・短い店・前週に問題のあった店を混ぜる)
- その3店の前週の日報のコメントを写し、スタッフの名前を【スタッフ】に置き換える
- 手元の ChatGPT の画面に、第7章のプロンプトと1店ずつのコメントを貼る
- 出てきた要約を、エリアマネージャーが前週に書いた報告と並べて読み比べる
- 数字は、これまでどおり手で集計した表を横に置く
数字の集計は、最小構成でも AI に頼まないでください。 表計算の式で出せるものを AI に計算させると、この構成でいちばん守りたい「数字の出どころ」を最初から崩すことになります。
| 出てきた内容 | 判断 |
|---|---|
| 前週の報告と同じ話題を拾えている | スクリプトで日報からつなぐ段階に進む |
| 本部への依頼の拾い漏れがない | 構成は有効。依頼の欄をそのまま使える |
| 数字を写してくる | 指示の書き方で直る。検査で止める |
| 店長を評価する一文が入る | 禁止の語を足し、検査の一覧に入れる |
2行目を最初に見てください。 営業部長が報告でいちばん使うのは本部への依頼で、ここの拾い漏れが少ないかどうかで、この構成の値打ちが決まります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 要約にコメントの数字が写る | 写さないと指示し、検査で止める。 数字の出どころは表だけ |
| 店長を評価する一文が入る | 評価の語を禁じ、検査の一覧に入れる |
| AI が「気になる店」を選び始める | 数字は規則で拾い、AI には話題を書き出させるだけ |
| 存在しない日付の要約が出る | 日付を日報と突き合わせ、確認待ちにする |
| 定休日が「日報の抜け」と出る | 店舗台帳の定休日と臨時休業を先に除く |
| 深夜の日報が翌日の扱いになる | 送信日時ではなく「営業日」の欄で決める |
| スタッフの名前が外に出る | 名簿で伏せ字にする。呼び名も名簿に入れる |
| 食品の事故が月曜まで埋もれる | 送信のたびに語を見て知らせる |
| 拒否・打ち切りで報告が止まる | 要約なしでも数字の表で下書きを作る |
| 担当者のアカウントでトリガーを作る | 作成者のアカウントで動く。共用のアカウントで作る |
上の3行が、この構成の失敗のほとんどです。 どれも「AI が数字や評価に踏み込む」失敗で、数字を渡さず、評価の語を検査で止め、気になる店を規則で決めておけば、起きようがありません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 店ごとの売上・予算・人件費、店長のコメントに書かれたスタッフの事情とお客様の声、そして店長の名前です。
- 外部へ渡す範囲を、要約に必要なものまでに限る … OpenAI API に渡すのは、伏せ字を済ませたコメントと店の区分だけです。売上・予算・人件費の数字は渡しません
- API のデータの扱いを確かめる … 公式のページでは、API に送ったデータは、利用者が共有を選ばない限りモデルの学習や改善には使われないとされています。不正利用の監視のログは最長30日保たれ、Responses API は既定でアプリケーションの状態を30日保つとされているので、保存の設定と、自社の取り決めとの関係を確かめておきます
- 保存先の地域 … 公式のページでは、日本はデータの保存の地域として選べる一方、処理の地域としては挙げられていません。コメントが国外で処理されうる前提で、社内の規程に照らしておきます
- 店長やスタッフの評価に使わない … 要約は店の出来事の報告です。店長の評価や、スタッフの処遇の材料にしないことを、店舗運営部の決まりとして書いておきます
- 送信を自動にしない … 下書きまでです。報告に一言を足すのはエリアマネージャーの仕事です
- API キーをスクリプトに直接書かない … スクリプトのプロパティに置き、スクリプトの編集権限を店舗運営部の担当に限ります
誤りが起きた場合のリスクは、誤った数字で店に手を打つことと、要約が店長の評価にすり替わることの2つです。前者は数字をスクリプトだけで出すことで、後者は評価の語を止めることと使い方の決まりで防ぎます。
10まず何から始めるか
1週目:指標の幅を決める
営業部長とエリアマネージャーで、予算比・人件費率・廃棄率の「気になる」の幅を店の区分ごとに決めます。 あわせて店舗台帳に定休日・平均時給・店の区分の列を足します。
2週目:3店で試す
3店のコメントを置き換えて、手元の ChatGPT の画面で要約させます。本部への依頼の拾い漏れと、数字の写し込みを最優先で見ます。
3週目:数字の集計と印をスクリプトにする
Apps Script で回答のシートを読み、店ごとの週の指標と印、日報の抜けまでを作ります。この時点では要約を作らず、数字の表だけをエリアマネージャーが手の集計と見比べます。
4週目:要約と下書きまでつなぐ
API で要約を作り、日付の検算と語の検査を足して、Gmail の下書きを作るところまで組みます。最初の週は、1つのエリアの9店だけで回します。
2か月目: 4エリアに広げ、送信のたびの形の確認と至急の知らせを足します。月次の報告の下書きを、週次の確定版から作ります。3か月目以降: 1件あたりの確認の時間を測り、指標の幅を見直します。36店の週次の報告が、月曜の午前中に同じ形でそろうようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から月1回まで動かせ、時刻がずれうること。インストール型のトリガーが作成者のアカウントで動くこと。フォームの送信のトリガーにフォーム用とスプレッドシート用の2つの版があること。失敗時にまとめのメールが届くこと | Google: Installable triggers | 2026-10-26 |
スプレッドシートのフォームの送信のイベントに namedValues・values などがあり、回答が配列で返ること | Google: Event objects | 2026-10-26 |
| 実行時間が1回6分、トリガーの合計実行時間が Workspace で1日6時間、トリガーがユーザー・スクリプトごとに20個であること | Google: Quotas for Google Services | 2026-10-26 |
muteHttpExceptions を true にすると、失敗の応答でも例外を投げず応答を返すこと | Google: Class UrlFetchApp | 2026-10-26 |
| スクリプトのプロパティがスクリプトの利用者全員で共有され、スクリプトの間では共有されないこと | Google: Properties Service | 2026-10-26 |
createDraft が宛先・件名・本文と、HTML の本文・表示名・返信先などの指定で下書きを作ること。https://mail.google.com/ のスコープが要ること | Google: Class GmailApp | 2026-10-26 |
Responses API で text.format に json_schema と strict: true を指定すること。拒否が refusal として返ること。出力の上限に達すると status が incomplete になること | OpenAI: Structured model outputs | 2026-10-26 |
| API のデータが既定では学習に使われないこと。不正利用の監視のログが最長30日、Responses API のアプリケーションの状態が既定で30日保たれること。日本が保存の地域として選べ、処理の地域には挙げられていないこと | OpenAI: Data controls in the OpenAI platform | 2026-10-26 |
指標の幅や、どこからを「気になる店」とするかは、自社で決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1827)についてのご相談はこちらから。
