飲食店の店長がチャットに書いた仕入れのメモから、仕入先ごとの品目・数量・納品日を拾って発注の文を下書きし、いつもの発注量と大きく違うものを示す
店長が営業の終わりにチャットへ書いた仕入れのメモから、品目・数量・単位・納品日を拾い、仕入先ごとの発注の文を下書きしてメモのスレッドに返します。いつもの発注量と大きく違う品目には印を付けます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Zapier
- 対象業界
- 介護/宿泊/飲食
- 対象部門
- 購買
- 対象業務
- データ入力・転記/書類作成
- 主な課題
- 入力作業が多い/属人化している/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 店長が営業の終わりに、仕入れのチャンネルにメモを書く
- メモを見返し、品目ごとにどの仕入先へ頼むものかを思い出して、仕入先ごとに書き分ける
- 「1箱」「樽」「ケース」などの単位を、仕入先が受け付ける単位と入数に直す
- 先週の同じ曜日にどれだけ頼んだかを思い出し、量がおかしくないかを見る
- 仕入先ごとの締めの時刻と納品の曜日に間に合うかを確かめる
- 電話をかける、FAXを書く、発注サイトに入力する
- 頼んだ内容を発注のメモとして残す(残さない店もある)
- 人店長が営業の終わりに、仕入れのチャンネルにこれまでどおりメモを書く
- 自動Make のシナリオが新しいメッセージを拾い、仕入れのメモかどうかを見分ける
- 自動品目の一覧と、その店の仕入先・締めの時刻・納品の曜日をスプレッドシートから引く
- 自動Claude がメモから品目・数量・単位・納品日を1行ずつ拾い、品目の一覧の名前にそろえる
- 自動シナリオが単位を仕入先の受け付ける単位に直し、締めと納品の曜日を確かめる
- 自動過去4週の同じ曜日の発注量と比べ、決まった倍率を外れる品目に印を付ける
- 自動仕入先ごとに、決まった書式で発注の文を組み立て、メモのスレッドに返信する
- 人店長が下書きと印の付いた品目を見て、必要なら直したメモを書き直す
- 人店長が下書きを使って、仕入先へ電話・FAX・発注サイトで発注する
- 人発注を終えたら、下書きの返信に決まった絵文字の反応を付ける
- 自動反応を合図に、その日の発注記録を「確定」にする
各工程の詳しい説明を読む
- 店長が営業の終わりに、仕入れのチャンネルにメモを書く
- メモを見返し、品目ごとにどの仕入先へ頼むものかを思い出して、仕入先ごとに書き分ける
- 「1箱」「樽」「ケース」などの単位を、仕入先が受け付ける単位と入数に直す
- 先週の同じ曜日にどれだけ頼んだかを思い出し、量がおかしくないかを見る
- 仕入先ごとの締めの時刻と納品の曜日に間に合うかを確かめる
- 電話をかける、FAXを書く、発注サイトに入力する
- 頼んだ内容を発注のメモとして残す(残さない店もある)
(a)書き分けが毎日の手作業になっている。 メモには仕入先が書かれていません。店長の頭の中で「キャベツは八百屋」「豚バラは精肉」と振り分けているので、その店の仕入先を覚えていない新しい店長や応援の社員には同じことができません。
(b)単位と桁の間違いが、納品されるまで分からない。 「玉ねぎ1箱」を八百屋のサイトに「1」と入れたら1キロの扱いだった、「豚バラ5キロ」を「50」と打った、といった間違いは、届いた箱の数を見るまで誰も気づきません。 生鮮は返品が難しく、その日のうちに使い切れない分はそのまま損になります。
(c)いつもの量は店長の記憶にしかない。 先週の同じ曜日にどれだけ頼んだかを、店長は感覚で覚えています。感覚で比べているので、店長が休んだ日や交代した直後にずれます。 本部の購買も、各店がふだんどれだけ頼んでいるかを一覧で見る手段がありません。
(d)締めと納品日の取り違え。 酒屋は火曜と金曜しか納品しないのに水曜の分を頼んでしまう、鮮魚の締めを過ぎてから頼む、といった取り違えが、店長の交代や応援の日に集中して起きます。
- 【人】 店長が営業の終わりに、仕入れのチャンネルにこれまでどおりメモを書く
- 【自動】 Make のシナリオが新しいメッセージを拾い、仕入れのメモかどうかを見分ける
- 【自動】 品目の一覧と、その店の仕入先・締めの時刻・納品の曜日をスプレッドシートから引く
- 【自動】 Claude がメモから品目・数量・単位・納品日を1行ずつ拾い、品目の一覧の名前にそろえる
- 【自動】 シナリオが単位を仕入先の受け付ける単位に直し、締めと納品の曜日を確かめる
- 【自動】 過去4週の同じ曜日の発注量と比べ、決まった倍率を外れる品目に印を付ける
- 【自動】 仕入先ごとに、決まった書式で発注の文を組み立て、メモのスレッドに返信する
- 【人】 店長が下書きと印の付いた品目を見て、必要なら直したメモを書き直す
- 【人】 店長が下書きを使って、仕入先へ電話・FAX・発注サイトで発注する
- 【人】 発注を終えたら、下書きの返信に決まった絵文字の反応を付ける
- 【自動】 反応を合図に、その日の発注記録を「確定」にする
8番目が、この設計の分かれ目です。 下書きは出ますが、送るかどうかと、印の付いた品目をどうするかは店長が決めます。 宴会の予約が入っていれば多いのが正しく、印は「確かめた」で終わります。
7番目の文を、AIに書かせていないのも意図してのことです。 文の組み立ては、仕入先ごとの書式にスプレッドシートの値を差し込むだけにしています。AIに文を書かせると、数量を言い換えたり、丁寧にしようとして余計な一文を足したりします。 発注の文で困るのは、メモに無い数字が文に入ることです。
02今回想定するシステム構成
店長のメモ(Slack:店舗ごとの仕入れのチャンネル) ▼【トリガー】Watch Public Channel Messages(15分ごと) Make のシナリオ ├──▶ 仕入れのメモかの判定(先頭の記号と投稿者) ├──▶ Google Sheets(Search Rows)で品目の一覧・仕入先の決まりを引く ▼ Claude API(Make an API Call で Messages API を呼ぶ) │ 品目・数量・単位・納品日を1行ずつ、構造化出力でJSON ▼ Iterator で1行ずつに分ける ├──▶ 単位の換算(品目の一覧の入数) ├──▶ 締めの時刻と納品の曜日の確認 ├──▶ 過去4週の同じ曜日の発注量と比べる ▼ Router ├─ 品目が一覧に無い・数量が読めない → 確認の一覧へ └─ Fallback → 仕入先ごとにまとめる ▼ 仕入先ごとの書式に差し込み → Send a Message(メモのスレッドに返信) Google Sheets(Add a Row)で発注記録に「下書き」 ▼【別のシナリオ】Watch New Events(反応が付いたら) 発注記録を「確定」に更新
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | Make | Zapier、n8n、Power Automate |
| 生成AI | Claude API(メモからの品目・数量・単位・納品日の抽出) | OpenAI API、Gemini API |
| 台帳 | Google スプレッドシート(品目の一覧、仕入先の決まり、発注記録、書式) | Airtable |
| チャット | Slack(店舗ごとの仕入れのチャンネル) | Google Chat、Microsoft Teams |
新しく足すのは、Make のシナリオ2本と、スプレッドシートのシート4枚だけです。 品目の一覧はすでに本部が持っているので、そこに店長たちが使う呼び方の列と、仕入先の受け付ける単位と入数の列を足すのが最初の準備作業です。
メモは、Make の Slack アプリの Watch Public Channel Messages で拾います。 公開チャンネルに新しいメッセージが加わったときに動くトリガーです。Watch のモジュールは、1回の実行で拾う件数(Limit)が既定で2件になっています。12店舗が閉店後の同じ時間帯に書くので、この値を上げておかないと、取りこぼしではなく後回しが起きます。
返信は Send a Message の Thread message ID(timestamp)の欄にメモのタイムスタンプを入れて、スレッドに返します。 店長はメモの下に下書きが付くので、どのメモに対する下書きかを迷いません。なお、Slack(bot)の接続で送るときは、ボットがそのチャンネルのメンバーでないと「Error 200: Channel Not Found」になります。 店舗のチャンネルを増やしたら、ボットも招きます。
Claude は、Make の Anthropic Claude アプリの Make an API Call で Messages API を呼び、output_config.format に JSON スキーマを渡します。 アプリには Create a Prompt もありますが、アプリの説明に構造化出力の設定が見当たらないためです。構造化出力ではスキーマに沿った正しいJSONがテキストのブロックで返るとされ、品目の状態の値が決まった語以外になることを防げます。
1行ずつの処理は Iterator で分けます。 Iterator は配列を一連のバンドルに変えるモジュールで、AIが返した品目の配列を1品目ずつのバンドルにして、換算と比較を同じ手順でかけます。
03どうやって実装するのか
処理の起点を決める
店舗ごとの仕入れのチャンネルに新しいメッセージが加わったことを起点にします。 シナリオは15分ごとに動かします。Make のスケジュールは一定の間隔、毎日、平日、週ごと、月ごと、日付の指定などから選べ、一定の間隔の最小の長さはプランによって決まるとされています。閉店の後に書かれたメモが、15分以内に下書きになって返ってくれば、店長が帰る前に発注を済ませられます。
チャンネルにはメモ以外の書き込みも混ざります。 「明日のランチ、豆腐が足りないかも」のような相談や、本部からの連絡です。そこで、仕入れのメモは先頭に「【仕入れ】」を付けて書く決まりにし、シナリオの最初のフィルターで先頭の記号を見ます。記号の無い書き込みはAIに渡しません。AIに「これは仕入れのメモか」を判断させると、相談の文から品目を拾って下書きを作ってしまいます。
同じ日のメモが2本あるときは、後の1本をその日の正とします。 店長が書き直したときに、前の下書きと混ざらないようにするためです。2本目の下書きの冒頭には「先のメモを置き換えました」と書きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 仕入れのメモ | メモの本文、投稿した日時、投稿者、チャンネル(=店舗)、タイムスタンプ | Slack |
| 品目の一覧 | 品目コード、正式な品目名、店長たちが使う呼び方、仕入先、仕入先の受け付ける単位、入数 | スプレッドシート(品目) |
| 仕入先の決まり | 仕入先、送り方(電話/FAX/発注サイト)、締めの時刻、納品の曜日、店舗ごとの取引の有無 | スプレッドシート(仕入先) |
| 過去の発注記録 | 店舗、品目コード、数量、納品日、状態(下書き/確定) | スプレッドシート(発注記録) |
| 発注の文の書式 | 仕入先ごとの冒頭・品目の並べ方・結び | スプレッドシート(書式) |
質を決めるのは、品目の一覧の「呼び方」の列です。 「生中の樽」「生樽」「ビール樽」「中生10L」が同じ品目だと分かる手がかりは、この列にしかありません。AIが一般的な知識で「たぶんこれ」と当てるのではなく、この列から選ぶように作ります。
入数の列も同じくらい効きます。 「玉ねぎ1箱」を八百屋が受け付ける単位に直すには、1箱が何キロかを知っている必要があります。入数が空の品目は換算せず、確認に回します。
データの取得方法を決める
メモは Slack のトリガーが返す本文とタイムスタンプをそのまま使います。チャンネルから店舗を決めるので、チャンネルと店舗の対応はスプレッドシートの仕入先のシートに1列持たせます。
| 取るもの | どこから | どう取るか |
|---|---|---|
| メモの本文とタイムスタンプ | Slack | Watch Public Channel Messages |
| 品目の一覧 | スプレッドシート(品目) | Search Rows で、その店舗が取引のある仕入先の品目だけ |
| 仕入先の決まり | スプレッドシート(仕入先) | Search Rows で、その店舗の行 |
| 過去4週の同じ曜日の発注量 | スプレッドシート(集計) | Search Rows で、店舗・品目・曜日を指定 |
| 発注の文の書式 | スプレッドシート(書式) | Search Rows で、仕入先ごと |
品目の一覧は、全品目ではなくその店舗が取引のある仕入先の品目だけを渡します。 全店の品目を渡すと、その店舗では扱っていない仕入先の品目に当ててしまいます。1店舗あたり150品目前後に収まります。
過去4週の同じ曜日の発注量は、シナリオで計算しません。 スプレッドシートに集計のシートを1枚作り、発注記録のうち「確定」の行から、店舗・品目・曜日ごとの中央値を関数で出しておきます。 シナリオはそれを Search Rows で引くだけです。計算の式がシートの上に見えているので、本部の購買が倍率や期間を変えたいときに、シナリオを開かずに直せます。
AIへ渡す前に整形する
- 先頭の記号の確認 … 「【仕入れ】」で始まらないものは、ここで終わりにします
- 投稿者の確認 … その店舗の店長と、登録した応援の社員だけを通します。ボット自身の投稿は除きます
- 日付の手がかりの用意 … 投稿した日時から、その日から14日分の日付と曜日の表を作ってAIに渡します。「明日」「金曜」を日付に直すのはこの表だけを根拠にさせます
- 閉店後の日付のずれの処理 … 0時を過ぎてから書かれたメモは、営業日としては前日のメモとして扱います。「明日」が1日ずれるのを防ぐためです
- 全角と半角の統一 … 数字と記号を半角にそろえます。「5キロ」「5kg」を同じ形にします
- 重複の確認 … 同じ店舗の同じ営業日のメモが既に処理されていれば、置き換えとして印を付けます
4番目を忘れると、0時を回る店では「明日」が店長の頭の中より1日先になります。
AIに処理させる
させるのは、メモを1品目ずつの行に分け、品目の一覧の中から当てはまる品目を選び、書かれた数量・単位・納品日をそのまま写すことだけです。
| 拾う項目 | 拾い方 | 判断できないときの扱い |
|---|---|---|
| 書かれていた文字列 | メモのうち、その品目に当たる部分をそのまま写す | - |
| 品目コード | 品目の一覧の「呼び方」の列から選ぶ | 当てはまるものが無ければ unknown_item |
| 数量 | 書かれた数字をそのまま | 数字が無い・「少し」なら unclear_quantity |
| 単位 | 書かれた単位をそのまま(箱、キロ、玉、樽、ケース) | 書かれていなければ空にする |
| 納品日 | 日付の表から選ぶ。書かれていなければ空 | 2つの日付に読めるなら unclear_date |
| 備考 | 「細めで」「大きめ」など、品目に付いた注文 | 無ければ空 |
単位の換算はさせません。 「玉ねぎ1箱」は、quantity: 1、unit: "箱" として返させ、10キロへの直しはシナリオが入数の列で行います。AIに換算させると、入数を一般的な知識で補って、店ごとに違う箱の大きさを無視します。
| させないこと | 理由 |
|---|---|
| 量が多い・少ないの判断 | 宴会の予約などの事情はメモに書かれていない。比較は規則で行う |
| 単位の換算 | 入数は仕入先と品目で違う。一覧の値でシナリオが行う |
| 品目の補完 | 「いつもの」「先週と同じ」から品目を推し量らない |
| 発注の文の作成 | 文は書式に値を差し込んで作る。言い換えを入れない |
| 仕入先の選び直し | 一覧で決まっている仕入先を、品目の性質から変えない |
3行目が、いちばん起きやすい失敗です。 「先週と同じで」と書かれたメモを渡すと、AIは過去の発注記録が無くても、それらしい品目を並べようとします。そういうメモは unclear_quantity で返させ、下書きを作らずに店長へ聞き返します。
指示内容を固定する
あなたは飲食店の本部で、店長が書いた仕入れのメモを品目ごとの行に分ける担当です。
メモに書かれていることだけを拾ってください。推測で埋めないでください。
【やること】
メモを1品目ずつに分け、品目ごとに次の項目を返してください。
- raw_text:メモのうち、その品目に当たる部分をそのまま写す
- item_code:下の【品目の一覧】の「呼び方」に当たる品目のコード
- quantity:書かれた数量の数字。書かれていなければ null
- unit:書かれた単位をそのまま(箱、キロ、玉、樽、ケースなど)。無ければ空
- delivery_date:下の【日付の表】から選んだ日付。書かれていなければ null
- note:「細めで」「大きめ」など、その品目に付いた注文
- status:ok / unknown_item / unclear_quantity / unclear_date のいずれか
【厳守事項】
- item_code は【品目の一覧】にあるものだけを使ってください。
当てはまるものが無いときは item_code を空にし、status を unknown_item にしてください。
似ているからといって別の品目のコードを当てないでください。
- 数量と単位は書かれたとおりに返してください。
キロへの直し、箱の入数での掛け算などの換算はしないでください。
- 「いつもの」「先週と同じ」「少し」のように数量が書かれていないときは、
quantity を null にし、status を unclear_quantity にしてください。
- 「明日」「金曜」などは【日付の表】だけを根拠に日付にしてください。
2つの日付に読めるときは delivery_date を null にし、status を unclear_date にしてください。
- メモ全体に1つの納品日が書かれているときは、それを各品目に入れてください。
- 量が多い・少ないの意見、仕入先の提案、発注の文は書かないでください。
- 仕入れと関係のない文(相談・連絡)は、品目として返さないでください。
【このメモの営業日】{business_date}({weekday})
【日付の表】{calendar_14days}
【品目の一覧】{item_list}
【メモ】{memo_text}
「似ているからといって別の品目のコードを当てない」を書かないと、unknown_item がほとんど出なくなります。 一覧に「長ねぎ」しかない店で「青ねぎ」と書かれると、AIは長ねぎを当てます。一覧に無い品目は、一覧に足すか、別の仕入先に頼む品物かのどちらかで、どちらにしても人が決めることです。
換算の禁止を独立した1行にしているのは、AIが親切で換算するからです。 「1箱」を「10kg」と書き換えて返すと、シナリオがさらに入数を掛けて100キロになります。換算を1か所に決めておくことが、桁の間違いを防ぐいちばんの手当てです。
出力形式を固定する
次の形のJSONで受け取ります。 スキーマは output_config.format に type: "json_schema" で渡します。
{
"store_code": "S05",
"business_date": "2026-10-08",
"items": [
{
"raw_text": "玉ねぎ1箱",
"item_code": "V012",
"quantity": 1,
"unit": "箱",
"delivery_date": "2026-10-09",
"note": "",
"status": "ok | unknown_item | unclear_quantity | unclear_date"
}
],
"not_order_text": ""
}
not_order_text には、メモの中で品目として拾わなかった文を入れます。店長が「ここは拾われていない」と気づける場所です。
JSONで受け取る1つ目の理由は、品目を1行ずつ規則にかけられることです。 Iterator で items を1品目ずつに分け、換算、締めと納品の曜日の確認、いつもの量との比較を、同じ手順で順にかけます。
2つ目は、status で振り分けられることです。 Router で、ok 以外の品目を確認の一覧へ、それ以外を仕入先ごとのまとめへ送ります。Router の経路は並行ではなく順に処理され、どの経路の条件にも合わないデータはフォールバックの経路が処理します。 確認の経路を先に置き、フォールバックを下書きの経路にします。
3つ目は、値の大小を規則で比べられることです。 シナリオは換算した数量を、集計のシートの中央値と比べ、次の規則で印を付けます。
| 印 | 条件 | 下書きでの表示 |
|---|---|---|
| 多い | 中央値の2倍以上 | 「⚠ いつもの約2倍以上(いつもは5キロ)」 |
| 少ない | 中央値の半分以下 | 「⚠ いつもの半分以下(いつもは5キロ)」 |
| 初めて | 過去4週の同じ曜日に記録が無い | 「初めての発注です」 |
| 締め切れ | 締めの時刻を過ぎている | 「⚠ 締め(21時)を過ぎています」 |
| 曜日外 | 仕入先の納品の曜日でない | 「⚠ この仕入先は火・金のみ納品」 |
倍率は2倍と半分から始めます。 狭くすると印が毎日出て、読まれなくなります。
スレッドに返す下書きは、次の形です。
【八百屋 〇〇青果 様】(電話)10/9(木)納品
いつもお世話になっております。〇〇店です。
・キャベツ 3玉
・玉ねぎ 10kg(メモ:1箱)
・豚バラ → 精肉のほうへ
よろしくお願いいたします。
【確認してください】
⚠ 玉ねぎ:いつもの約2倍以上(いつもは5kg)
? 「青ねぎ少し」:品目の一覧に無く、数量も書かれていません
換算した品目には、元のメモの書き方を括弧で残します。 「10kg(メモ:1箱)」とあれば、店長は入数の誤りにその場で気づけます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Slack | Make の Slack アプリ | メモを拾う/スレッドに下書きを返す/反応を拾う |
| Claude API | Make an API Call | メモから品目の行を拾う |
| スプレッドシート(品目・仕入先・書式・集計) | Search Rows | 一覧と決まりといつもの量を引く |
| スプレッドシート(発注記録) | Add a Row / Update a Row | 下書きを記録し、確定にする |
仕入先へは何も送りません。 電話もFAXも発注サイトも、店長が下書きを見て行います。送信を自動にすると、印の付いた品目を確かめる前に発注が出ます。
確定は、店長が下書きの返信に決まった絵文字の反応を付けたことで行います。 2本目のシナリオを Slack の Watch New Events で作り、反応のイベントを受けます。反応が付いた返信のタイムスタンプで発注記録を引き、「下書き」を「確定」に更新します。 いつもの量の計算は「確定」の行だけを使うので、下書きのまま放置されたものが、いつもの量を狂わせません。
人が確認する
店長が見るのは、スレッドに返ってきた下書きの全文です。 ただし、時間をかけるのは「確認してください」の欄だけです。
- 「確認してください」の欄を先に読む … 多い・少ない・初めて・締め切れ・曜日外と、拾えなかった品目
- 換算の括弧を見る … 「10kg(メモ:1箱)」のように元の書き方と並べて、入数が合っているかを確かめる
- 直すときは、メモを書き直す … 下書きの文を手で直すのではなく、【仕入れ】のメモを書き直して再投稿する。後の1本が正になる
- 発注を終えたら反応を付ける … 付けたものだけが「確定」になり、いつもの量の計算に入る
3番目を「メモを書き直す」にしているのは、記録を1か所に保つためです。 下書きの文を手で直して送ると、発注記録には直す前の数量が残り、翌週のいつもの量が、実際に頼んだ量とずれます。
本部の購買は、毎週月曜に確認の一覧を見ます。 unknown_item が繰り返し出る呼び方は、品目の一覧の「呼び方」の列に足します。この作業が、翌週からの unknown_item を減らすいちばんの近道です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 【仕入れ】の記号を付け忘れた | 下書きは出ない。下書きが15分たっても来なければ記号を確かめると店長に伝えておく |
| 一覧に無い品目 | unknown_item で「確認してください」へ。本部が呼び方を足す |
| 数量が書かれていない | unclear_quantity。その品目は下書きに入れず、店長に聞き返す |
| 入数が空の品目 | 換算せず、元の単位のまま「入数未登録」と書いて確認へ |
| 締めの時刻を過ぎている | 下書きは出し、「締めを過ぎています」と先頭に書く。送るかは店長が仕入先と話して決める |
| 納品の曜日でない | 印を付け、次の納品日を並べて書く |
| ボットがチャンネルにいない | Send a Message が「Channel Not Found」で止まる。本部へ通知し、ボットを招く |
AIの応答が max_tokens で止まった | JSONが途中で切れることがある。上限を上げて1回だけやり直し、だめなら確認へ |
| AIが応答を拒否した | stop_reason が refusal のときはスキーマに沿わないことがある。下書きを作らず確認へ |
| 同じ営業日のメモが2本 | 後の1本を正にし、前の下書きの発注記録を「置き換え済み」にする |
上から4行目までで、例外のほとんどを占めます。 どれもAIの精度ではなく、記号の付け忘れと、品目の一覧の手入れの問題です。 最初の1か月は、本部が毎朝この4種類の件数を数えます。
構造化出力でも、スキーマに沿わない応答が返る場面があります。 公式の説明では、応答を拒否したときは拒否のメッセージが優先されてスキーマに沿わないことがあり、max_tokens で止まったときは出力が途中で終わることがあるとされています。シナリオは stop_reason を見てから JSON を読みます。
記録を残す
- メモの本文、投稿日時、投稿者、チャンネル、タイムスタンプ
- AIが返したJSONの全文と、そのときの品目の一覧の版
- 換算した後の数量と、使った入数
- いつもの量の比較の結果(中央値、倍率、印)
- スレッドに返した下書きの全文とタイムスタンプ
- 確定の反応を付けた日時と人
- 置き換えたメモと、置き換えられたメモの対応
2つ目の「品目の一覧の版」を残すのは、呼び方の列が毎週増えるからです。 ある日の unknown_item が、そのときの一覧に無かったからなのか、AIが拾い損ねたからなのかは、当時の一覧が残っていないと分かりません。
04実装レベルの3段階
本記事の想定は半自動化です。 1件12分が4分になる見込みは、この段階で置いています。送るのは店長のままなので、仕入先ごとに違う送り方をそのまま残せます。 本格構成に進めるのは、発注をデータで受け付ける仕入先がある場合だけです。 電話とFAXの仕入先が多いうちは、誤った数量がそのまま出ていく経路が1本増えるだけです。
05工数削減シミュレーション
導入後 300件 × 4分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 10店舗前後の居酒屋・定食・ダイニングなどのチェーンで、店長が営業の終わりに仕入れの内容をチャットにメモし、そのメモを見ながら八百屋・精肉・鮮魚・酒屋などへ仕入先ごとに発注を書き分けている場合。品目の呼び方や単位が店長ごとに違い、桁の打ち間違いや頼み忘れが月に何度か起きている場合。Slack と Google スプレッドシートを使っている、または使い始められる場合。
- 仕入先が1〜2社で、店長がメモを書かずに直接発注しても困っていない場合。本部が全店の発注を一括で受け、受発注のシステムで品目と数量を選んで発注しており、自由な文のメモが発生しない場合。なお、何をどれだけ仕入れるかの判断と、仕入先への発注そのものは、この構成では代替できません。
07最小構成で試す方法
- 1店舗を選び、先週の7日分のメモを Slack から写す
- その店舗の品目の一覧(呼び方の列つき)を表にして用意する
- 手元のAIサービスに、第7章のプロンプトと品目の一覧と、メモを1日分ずつ貼る
- 返ってきた行を、その日に実際に発注した内容と1品目ずつ見比べる
- 品目の取り違え、換算のしすぎ、拾い漏れを数える
見るべきは、正しく拾えた数より、間違え方です。
| 出てきた内容 | 判断 |
|---|---|
| ほぼすべての品目が実際の発注と一致した | Make のシナリオに進む |
| 一覧に無い品目を、似た別の品目に当てた | 呼び方の列が足りない。列を足してやり直す |
| 「1箱」を勝手にキロに直した | 指示の書き方で直る。構成は有効 |
| メモにある品目が実際の発注に無い | 店長がメモの後で変えている。 書き直しの決まりを先に作る |
4行目が出たら、AIより先に運用を見直します。 メモを書いた後に電話口で量を変えているなら、メモは発注の記録になっていません。 この構成は、メモが最終の内容であることを前提にしています。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 一覧に無い品目に似た品目が当たる | 一覧にあるものだけと指示し、unknown_item を出させる |
| 「1箱」をAIが換算して桁がずれる | 換算はシナリオだけで行う。AIには書かれたとおりに返させる |
| 0時を過ぎたメモで納品日が1日ずれる | 営業日の基準を決め、日付の表をその基準で作る |
| 閉店後に一斉に書かれて下書きが遅れる | Watch のモジュールの Limit を既定の2件から上げる |
| 新しい店舗で下書きが返らない | ボットをチャンネルに招く。招かないと Channel Not Found |
| 下書きの文を手で直して送る | 発注記録とずれる。直すときはメモを書き直す決まりにする |
| いつもの量が下書きのままの行で狂う | 「確定」の行だけで中央値を出す |
| 印が毎日出て読まれなくなる | 倍率を2倍と半分から始め、1か月見てから変える |
| 相談の書き込みから下書きが出る | 【仕入れ】の記号で拾う。AIに見分けさせない |
| 「先週と同じ」から品目が並ぶ | unclear_quantity で返させ、店長に聞き返す |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIが「役に立とうとして」補ったことから起きます。AIにさせることを拾うことだけに絞り、補うことをすべて規則と人の側に置くと、取り違えの出どころが1つに決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 品目と数量、仕入先の名前と送り方、店舗ごとの発注の量です。個人の情報はほとんど含みませんが、仕入先との取引の量と、店舗ごとの売れ方が読み取れる情報です。
- AIに渡すのは、メモとその店舗の品目の一覧だけにする … 仕入れの単価や取引条件は渡しません。下書きに単価は要りません
- 仕入先へ自動で送らない … 出すのは下書きまでです。送るかどうかと、印の付いた品目をどうするかは店長が決めます
- 何をどれだけ頼むかは店長の判断のまま … この構成は量を提案しません。いつもの量との差を示すだけです
- チャンネルの参加者を店舗の人に限る … 仕入れのチャンネルには発注の量が並びます。アルバイトの全員を入れるかは、店舗ごとに決めます
- Claude API のキーは Make の接続にだけ置く … キーは一度しか表示されないため、作ったときに管理する場所を決めておきます
- 品目の一覧の手入れの担当を決める … 呼び方の列は誰でも足せるようにすると、別の品目に同じ呼び方が付いて取り違えが起きます。 足すのは本部の購買だけにします
誤りが起きた場合のリスクは、頼みすぎと頼み忘れの2つです。 前者は換算の二重がけで、後者は拾えなかった品目の見落としで起きます。換算を1か所にすることと、拾えなかった品目を「確認してください」の欄に必ず出すことの2つを、設計で守ります。
10まず何から始めるか
1週目:品目の一覧に2つの列を足す
本部の品目の一覧に、「呼び方」の列と「入数」の列を足します。入数は、仕入先の受け付ける単位で1箱・1ケース・1樽がいくつかを書きます。全品目を一度に埋める必要はありません。 発注の回数が多い上位50品目から埋めます。
2週目:1店舗の7日分で試す
第8章のとおり、1店舗の先週のメモを手元のAIサービスに貼り、実際の発注と見比べます。取り違えより、換算のしすぎと「先週と同じ」の扱いを最優先で見ます。
3週目:決まりを店長と決める
【仕入れ】の記号を付けること、直すときはメモを書き直すこと、送り終えたら反応を付けることの3つを、店長会議で決めます。ここが決まらないうちにシナリオを動かすと、下書きは出るのに記録が合わない状態になります。
4週目:2店舗でシナリオを動かす
Make で Slack のメモを拾い、Claude で行に分け、換算と仕入先ごとの下書きをスレッドに返すところまで作ります。この時点では、いつもの量の比較を入れません。 「確定」の記録がまだ4週分たまっていないからです。
2か月目: 全店に広げ、確定の反応と発注記録をつなぎます。本部が毎週、unknown_item の呼び方を一覧に足します。3か月目以降: 4週分の確定の記録がたまった店舗から、いつもの量の比較と印を足します。1件12分が何分になったかを店長に聞き、印の倍率を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Slack のアプリに Watch Public Channel Messages(公開チャンネルに新しいメッセージが加わったときに動く)と Watch New Events(反応などのイベント)があること。Send a Message の Thread message ID(timestamp)でスレッドに返信できること。Watch と一覧のモジュールの Limit が既定で2件であること。Slack(bot)の接続ではボットがチャンネルのメンバーでないと「Error 200: Channel Not Found」になること | Make: Slack modules | 2026-10-08 |
| Anthropic Claude のアプリに Create a Prompt と Make an API Call があり、接続に API キーを使い、キーは作成のダイアログを閉じると再表示できないこと。アプリの説明に構造化出力の記載が無いこと | Make: Anthropic Claude | 2026-10-08 |
構造化出力を output_config.format に type: "json_schema" で渡し、スキーマに沿った正しいJSONがテキストのブロックで返ること。refusal のときはスキーマに沿わないことがあり、max_tokens で止まると出力が途中で終わることがあること | Claude Docs: Structured outputs | 2026-10-08 |
| Google Sheets のモジュールに Search Rows、Add a Row、Update a Row があること | Make: Google Sheets modules | 2026-10-08 |
| Router の経路が並行ではなく順に処理され、どの経路の条件にも合わないデータをフォールバックの経路が処理すること | Make Help: Router | 2026-10-08 |
| Iterator が配列を一連のバンドルに変えること | Make Help: Iterator | 2026-10-08 |
| スケジュールに一定の間隔・毎日・平日・週ごと・月ごと・日付の指定・オンデマンドがあり、間隔の最小の長さがプランによって決まること | Make Help: Schedule a scenario | 2026-10-08 |
締めの時刻・納品の曜日・受け付ける単位は仕入先ごとに違います。仕入先に確かめてください。 本記事は公式の説明で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1017)についてのご相談はこちらから。
