小売店の売場の棚の写真を本部の棚割表と比べ、商品の位置・フェイス数・欠品の違いを拾って、店への直しの依頼と月次の実施率にまとめる
店が棚替えの後に撮った棚の写真から、段ごとに見える商品とフェイス数と空きを書き出し、本部の棚割表と位置ごとに比べて違いを拾います。違いは店への直しの依頼の表にし、月末には店ごとの棚割の実施率にまとめます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 商社/小売/製造
- 対象部門
- マーケティング/営業
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/確認ミスが多い
- AIで行う処理
- 画像認識
- 主な効果
- 品質標準化/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 本部の商品部が、棚割のシステムで新しい棚割を作り、棚割図をPDFで店に配る
- 店が棚替えを行い、終えたゴンドラを正面から撮って、チャットに番号を添えて送る
- 営業企画の担当が、写真を開き、棚割図のPDFを横に並べる
- 段ごとに左から商品を見比べ、位置の違い、フェイス数の違い、空いている場所を探す
- 違いがあれば、チャットで店に「2段目の左から3番目が違います」と書く
- 店ごとに、棚割どおりの棚と直しが要る棚を表計算に書き込む
- 月末に表計算を集計し、店ごとの実施率を出す
- 人店が棚替えを終えたゴンドラを正面から撮り、フォームで店とゴンドラの番号を選んで送る
- 自動フォームの送信をきっかけに、写真の形式と大きさを確かめる
- 自動写り具合を確かめ、撮り直しが要るものは店に返す
- 自動棚割表を見せずに、段ごと・左から順に見える商品とフェイス数と空きを書き出させる
- 自動書き出した並びを、そのゴンドラの棚割表と位置ごとに対応づけ、`ok` / `wrong_item` / `facing_diff` / `empty` / `uncertain` を付ける
- 自動規則で `pass` / `fix` / `review` を決める
- 自動`fix` のものについて、店への直しの依頼の表を作り、店のスレッドに送る
- 人営業企画の担当が、`review` のものだけを開いて確かめる
- 自動月末に、店ごとの実施率と欠品の率を集計する
- 人担当者が集計を見て、実施率の低い店と指導の要点を決める
各工程の詳しい説明を読む
- 本部の商品部が、棚割のシステムで新しい棚割を作り、棚割図をPDFで店に配る
- 店が棚替えを行い、終えたゴンドラを正面から撮って、チャットに番号を添えて送る
- 営業企画の担当が、写真を開き、棚割図のPDFを横に並べる
- 段ごとに左から商品を見比べ、位置の違い、フェイス数の違い、空いている場所を探す
- 違いがあれば、チャットで店に「2段目の左から3番目が違います」と書く
- 店ごとに、棚割どおりの棚と直しが要る棚を表計算に書き込む
- 月末に表計算を集計し、店ごとの実施率を出す
(a)棚替えの月に確認が追いつかない。 大きなカテゴリーの棚替えが重なると、同じ週に数百枚の写真が届きます。 後ろに回った写真の店は、違う棚のまま何日も売ることになります。
(b)見る人によって指摘が違う。 フェイス数まで数える人もいれば、商品の位置だけを見る人もいます。同じ写真でも、担当者によって「直しが要る」になったりならなかったりします。
(c)欠品と位置の違いが混ざる。 空いている棚を見て「商品が置かれていない」と書くと、店は「売れただけです」と返します。 実施率の表にも、欠品の棚が×で入ります。
(d)実施率を手で数えている。 チャットの写真を月末に見直して○と×を数えるので、数え漏れと数え直しが毎月あります。 経営会議の前日に、担当者が残って数えています。
- 【人】 店が棚替えを終えたゴンドラを正面から撮り、フォームで店とゴンドラの番号を選んで送る
- 【自動】 フォームの送信をきっかけに、写真の形式と大きさを確かめる
- 【自動】 写り具合を確かめ、撮り直しが要るものは店に返す
- 【自動】 棚割表を見せずに、段ごと・左から順に見える商品とフェイス数と空きを書き出させる
- 【自動】 書き出した並びを、そのゴンドラの棚割表と位置ごとに対応づけ、
ok/wrong_item/facing_diff/empty/uncertainを付ける - 【自動】 規則で
pass/fix/reviewを決める - 【自動】
fixのものについて、店への直しの依頼の表を作り、店のスレッドに送る - 【人】 営業企画の担当が、
reviewのものだけを開いて確かめる - 【自動】 月末に、店ごとの実施率と欠品の率を集計する
- 【人】 担当者が集計を見て、実施率の低い店と指導の要点を決める
8番目が、この設計の分かれ目です。 人が見るのは、AIが見分けられなかったものだけです。位置の違いがはっきりしていて、棚割表の行と1対1で対応がとれたものは、店にそのまま直しの依頼を送ります。
7番目を自動にしているのは、依頼の中身が表だからです。 「2段目・左から3番目・棚割は〇〇・いまは△△」という事実の並びで、言い回しの判断がありません。 文章を作らせると、店ごとに言い方が揺れます。
02今回想定するシステム構成
店舗のタブレット ── 棚の写真のフォーム(店・ゴンドラの番号・写真1〜2枚) ▼【トリガー】Google フォームの送信 Google Apps Script ── 写真の形式と大きさの確認 ▼ Gemini API ── ①写り具合の確認 ├── retake ──▶ 店に撮り直しを返す ▼ Gemini API ── ②見えるままの並び(段ごと・左から、商品の表記、フェイス数、空き+位置) ▼ Google スプレッドシート ── そのゴンドラの棚割表(段・位置・商品名・JAN・フェイス数) ▼ Gemini API ── ③並びと棚割表の対応づけ(ok/wrong_item/facing_diff/empty/uncertain) ▼ Google Apps Script ── 規則で pass/fix/review を決める ├── fix ──▶ 店へ直しの依頼の表 ▼ 確認の一覧(Google スプレッドシート)──▶【月末】店ごとの実施率と欠品の率
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(写り具合の確認、見えるままの並びの書き出し、棚割表との対応づけ) | Claude API、OpenAI API |
| 連携 | Google フォーム(店・ゴンドラの番号の選択と写真の受け取り) | Microsoft Forms、自社の店舗向けアプリ |
| 連携 | Google Apps Script(呼び出し、規則の判定、依頼の送信、月末の集計) | Make、Power Automate |
| 連携 | Google スプレッドシート(棚割表、確認の一覧、実施率の集計) | Microsoft Lists |
| 保管 | Google ドライブ(棚の写真) | Microsoft OneDrive、SharePoint |
最初の変更は、チャットで写真を受け取るのをやめ、フォームに変えることです。 チャットの写真はゴンドラの番号が文で書かれるだけで、機械で棚割表を引けません。フォームならゴンドラの番号を一覧から選ばせられます。 「ファイルのアップロード」の質問では、ファイルはフォームのオーナーの Google ドライブの新しいフォルダに保存され、回答者は Google アカウントへのログインが必要です。 形式・数・最大サイズを決められます。共有ドライブのフォームや、データ損失防止が有効な場合は使えないので、置き場所を先に確かめます。
棚割表は、棚割のシステムから書き出してスプレッドシートに置きます。 ゴンドラの番号、段、左からの位置、JANコード、商品名、フェイス数、有効になる日の列です。棚割のシステムには書き込みません。
判定の土台は Gemini API の画像理解です。 対応する形式は PNG、JPEG、WEBP、HEIC、HEIF で、1回の入力に複数の画像を並べられます。物体の検出では、位置を [ymin, xmin, ymax, xmax] の形で、0から1000に正規化した座標で返します。段ごとの商品の位置を枠で返させ、担当者は写真に重ねた枠で確かめます。 画像を直接入れる場合、指示と合わせたリクエスト全体が20MBまでなので、写真は中程度の大きさにします。
03どうやって実装するのか
処理の起点を決める
フォームの送信を起点にし、1回の送信ごとにその場で処理します。 1回の送信はゴンドラ1本で、呼び出しは多くて3回です。Apps Script の1回の実行の上限6分に収まります。 棚替えの締め日に60店舗から集中して届いても、送信ごとに別々の実行になります。
まとめて1日1回の処理にはしません。 棚割の違いは、その日のうちに直してもらうことに意味があります。翌日にまとめて返すと、違う棚のまま1日売ることになります。
もう1つは、月末の集計の時間主導型トリガーです。 月の最終日の夜に、確認の一覧から店ごとの実施率と欠品の率を集計します。インストール型のトリガーは作った人のアカウントで動くので、営業企画の共用のアカウントで作ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 棚の写真 | ゴンドラ1本を正面から撮った1〜2枚。店・ゴンドラの番号・撮影の時刻 | 棚の写真のフォーム(Google ドライブ) |
| 棚割表 | ゴンドラごとの段・左からの位置・JAN・商品名・フェイス数・有効になる日 | 棚割のシステムから書き出した表 |
| 商品の見分けの手がかり | 似たパッケージの商品の組と、見分ける表記(「無香料」「詰替」など) | 商品部が作る表 |
| 店の連絡先 | 店のスレッドと店長の宛先 | 店舗の一覧 |
質を決めるのは、いちばん下から2つ目の「見分けの手がかり」です。 シャンプーの本体と詰替、同じ商品の香り違いは、パッケージの色と形がほとんど同じです。商品部が「この2つは表記のここで見分ける」と書いた表を持たせると、対応づけの段で使えます。
| 商品の組 | 見分ける表記 | 写真で見分けられないときの扱い |
|---|---|---|
| シャンプーA 本体/詰替 | 「つめかえ用」の文字、容器の形 | uncertain |
| ハンドソープB 無香料/フローラル | ラベルの色の帯と「無香料」の文字 | uncertain |
| 洗剤C 通常/大容量 | 容量の表記 | uncertain |
表に無い組でも、写真から見分けられなければ uncertain にします。 見分けられないものを棚割どおりとして数えると、実施率が実態より高く出ます。
データの取得方法を決める
フォームの送信のイベントから、アップロードされたファイルのIDと、選ばれた店・ゴンドラの番号が取れます。Apps Script で Google ドライブから写真を読み、ゴンドラの番号と撮影の日で、その日に有効な棚割表の行を引きます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 棚の写真 | フォームの回答のファイル | 並びの書き出しの対象 |
| 棚割表の行 | ゴンドラの番号と有効になる日で引く | 対応づけの相手 |
| 見分けの手がかり | 棚割表の商品が含まれる組 | 対応づけの指示に差し込む |
| 店の宛先 | 店舗の一覧 | 直しの依頼の送り先 |
棚割表は、有効になる日で引きます。 棚替えの締め日より前の写真を新しい棚割表と比べると、全部の位置が違いと出ます。 店が早めに棚替えを終えて撮った場合に備え、新旧の両方を引いて、新しいほうで pass になるかを先に見ます。
枠を重ねた表示は、確認の一覧から開けるようにします。 写真の上に box_2d の位置で枠を描き、wrong_item は赤、uncertain は黄で示します。座標は0から1000に正規化されているので、表示する画像の幅と高さに掛けて1000で割れば、枠の位置になります。
AIへ渡す前に整形する
- 形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF のどれかであることを確かめます
- 大きさの確認 … 写真と指示を合わせて20MBを超えないよう、大きすぎるものは縮めます
- 棚割表の有効性の確認 … 選ばれたゴンドラに、その日に有効な棚割表があるかを確かめます。無ければ「棚割なし」で止めます
- 重複の確認 … 同じ店・同じゴンドラ・同じ日の写真が複数あれば、後のものを使います
撮り方をそろえるのが、前処理の代わりになります。 ゴンドラの正面の通路の中央に立ち、上の段から下の段までが1枚に入るように撮る。斜めから撮ると、手前の商品の陰に奥の段の商品が隠れます。 1枚に収まらない高いゴンドラは、上半分と下半分の2枚にし、フォームで「上」「下」を選ばせます。
AIに処理させる
させるのは3つの段階です。 写り具合の確認、見えるままの並びの書き出し、棚割表との対応づけです。2つ目の段では棚割表を見せません。
1つ目の段階:写り具合
| 見るもの | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 撮る角度 | 正面から撮られているか | 斜めなら retake |
| 写っている範囲 | ゴンドラの上の段から下の段まで写っているか | 切れていれば retake |
| 明るさ・ぶれ | パッケージの文字が読めるか | 読めなければ retake |
| 人や台車 | 棚の前に人や台車が写っていないか | 棚が隠れていれば retake |
2つ目の段階:見えるままの並び
段ごとに、左から順に次を返させます。
| 返すもの | 中身 |
|---|---|
shelf | 上から何段目か |
observed_label | パッケージに読める商品名・表記(読めた文字のまま) |
facings | 横に並んでいる正面の数 |
is_empty | 商品が無く空いているか |
box_2d | その商品の位置 |
3つ目の段階:棚割表との対応づけ
2つ目の結果と棚割表と見分けの手がかりを渡し、棚割表の位置ごとに次のどれかを付けさせます。この段は文字だけで、写真は渡しません。
status | 意味 |
|---|---|
ok | 棚割表の商品が、その位置に、指定のフェイス数で並んでいる |
wrong_item | その位置に、棚割表と違う商品がはっきり並んでいる |
facing_diff | 商品は合っているが、フェイス数が違う |
empty | その位置が空いている |
uncertain | 似た商品と見分けられない、または表記が読めない |
wrong_item と uncertain の区別が、この構成でいちばん大事です。 本体と詰替を取り違えたかどうかを、写真の表記から言い切れないなら uncertain です。店に「違う商品です」と送るのは、はっきり違うと分かるときだけにします。
| させないこと | 理由 |
|---|---|
| 2つ目の段で棚割表を見る | 棚割表の商品名に寄せて読み、取り違えが消える |
| 見えない段の商品の推定 | 隠れた商品を棚割どおりとして数えない |
| 空きの理由の推測 | 売れたのか、棚替えの漏れかは店が知っている |
| 棚割の良し悪しの評価 | 商品部が決めること |
| 実施率の計算 | スクリプトが規則で数える |
指示内容を固定する
2つ目の段(見えるままの並び)
あなたは小売チェーンの本部で、店の棚の写真を記録する立場です。
写真に写っている棚の商品を、見えるままに書き出してください。
【書き出し方】
- 上の段から順に、各段の左から右へ並べてください。
- 各商品について、パッケージに読める商品名や表記を observed_label に
読めた文字のまま書いてください。読めない部分は「?」にしてください。
- 横に並んでいる正面の数を facings に入れてください。
手前の商品やPOPで隠れて数えられない場合は、facings を空にしてください。
- 商品が無く棚板が見えている場所は、is_empty を true にしてください。
- 各商品と空きの位置を box_2d に [ymin, xmin, ymax, xmax] で
0〜1000 に正規化して入れてください。
【厳守事項】
- 見えないものを推測で書かないでください。
- よく似た商品は、読めた表記だけで書き分けてください。
どちらか分からないときに、どちらかに決めないでください。
- 並べ方の良し悪しや、空いている理由は書かないでください。
3つ目の段(対応づけ)
次の「見えるままの並び」と「棚割表」を、棚割表の位置ごとに対応づけてください。
写真は見ていません。並びに書かれたことだけを根拠にしてください。
【status の選び方】
- ok .......... 棚割表の商品が、その位置に、指定のフェイス数で並んでいる
- wrong_item .. その位置に、棚割表と違う商品がはっきり並んでいる
- facing_diff . 商品は合っているが、フェイス数が違う
- empty ....... その位置が空いている
- uncertain ... 見分けの手がかりに当たる表記が読めない、または並びと棚割表の
位置がずれていて1対1に決められない
迷ったときに ok も wrong_item も選ばないでください。迷ったら uncertain です。
【見えるままの並び】{observed}
【棚割表】{planogram}
【見分けの手がかり】{lookalikes}
2つ目の段に棚割表を入れないのが、この指示のいちばんの工夫です。 棚割表を見せると、「つめか?」と半分読めた表記を棚割表の「詰替」に合わせて書きます。見えるままを先に固定してから比べるので、取り違えが取り違えのまま残ります。
3つ目の段で「迷ったら uncertain」を明記しないと、ok が増えます。 対応づけを頼まれると、AIは棚割表に合う方向に寄ります。uncertain は実施率の分母から外し、別に数えます。
出力形式を固定する
2つ目と3つ目の段とも、JSONで受け取ります。 Gemini API の構造化出力では、response_format に mime_type: "application/json" と JSON Schema を渡し、status を enum で5つに限ります。公式の案内では、出力がJSONとして正しくても、値はアプリケーションの側で必ず検証するようにとされています。
{
"gondola": "G-12",
"positions": [
{ "shelf": 2, "slot": 3, "planned_jan": "", "planned_name": "",
"planned_facings": 3, "observed_label": "", "observed_facings": 2,
"status": "ok | wrong_item | facing_diff | empty | uncertain",
"box_2d": [0, 0, 0, 0] }
]
}
1つ目の理由は、AIの対応づけと、店への判断を別の層に置けることです。 positions はAIが埋め、verdict はスクリプトが規則で決めます。
verdict | 条件 |
|---|---|
review | uncertain が棚割表の位置の2割以上、または棚割表の位置の数と positions の数が合わない |
fix | wrong_item か facing_diff が1つでもある(review に当たらないもの) |
pass | 上のどれにも当たらない(empty だけのものを含む) |
2つ目は、実施率と欠品を別に数えられることです。 実施率は ok ÷(ok + wrong_item + facing_diff)、欠品の率は empty ÷ 位置の数です。empty を実施率の分母に入れないので、売れて空いた棚が実施の失敗に数えられません。
3つ目は、スクリプトで検証できることです。 返ってきた位置が棚割表と1対1で対応しているか、box_2d が0から1000の範囲か、planned_jan が棚割表にあるかを確かめます。1つでも合わなければ review にします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google フォーム | フォームの送信のトリガー | 写真と、店・ゴンドラの番号を受け取る |
| 棚割表 | スプレッドシートの読み取り | 有効な棚割の行と見分けの手がかりを引く |
| Gemini API | Apps Script から呼び出し | 写り具合、並びの書き出し、対応づけ |
| 確認の一覧 | スプレッドシートへの書き込み | 写真へのリンク、位置ごとの結果、verdict |
| 店 | メール | 直しの依頼の表、撮り直しの依頼 |
| 実施率の集計 | スプレッドシートへの書き込み | 月末の店ごとの実施率と欠品の率 |
直しの依頼は表で送ります。 段、左からの位置、棚割表の商品名とフェイス数、写真で見えた表記とフェイス数の4列です。店は売場でその表を見ながら直せます。
メールの送信には1日の上限があります。 Google Workspace のアカウントで1日あたり1,500名の受信者まで、とされています。1日に数十店に送る程度なら収まりますが、棚替えの締め日は店ごとに1通にまとめて送ります。
人が確認する
営業企画の担当は、review の行だけを開きます。 fix は店にそのまま送られ、pass は一覧で流し見ます。
uncertainを見る … 写真の枠で、似た商品のどちらかを確かめます。分からなければ店に確認します- 位置の数が合わないものを見る … 棚割表の版が違うか、撮り方が悪いかを確かめます
fixに直して送るか決める … 確かめた結果を一覧に書き、店に送ります- 判定を覆したら記録する …
uncertainをどちらに決めたか、理由を残します
fix で送った依頼にも、店から「違わない」と返ってくることがあります。 その返事は確認の一覧に記録し、同じ取り違えが続く商品の組は、見分けの手がかりの表に足します。
pass の写真も、週に1回は店ごとに数枚を抜き取って見ます。 AIが見逃した違いは review の確認だけでは見つからないので、抜き取りが見逃しを知る唯一の手がかりです。
月末の実施率は、担当者が数字を見てから会議に出します。 uncertain の多い店は、実施率の数字が実態からずれている可能性があります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 写真が斜め・暗い・ゴンドラが切れている | retake。店に撮り直しを返す |
| 棚の前に人や台車が写る | retake。開店前か閉店後に撮る決まりにする |
| その日に有効な棚割表が無い | 「棚割なし」で止め、商品部に棚割表の書き出しを頼む |
| 締め日より前に撮られた | 新旧の両方の棚割表で対応づけ、新しいほうで pass なら実施済みとする |
| 商品が終売で代わりの商品が並ぶ | 店のフォームに「代替あり」の欄を置き、印があれば review |
| POPで商品が隠れる | 隠れた位置は uncertain。POPの位置を棚割に書いておく |
| 高いゴンドラで上下2枚に分かれる | 上と下を別々に書き出し、段の番号をつないでから対応づける |
| 似た商品の取り違えが続く | 見分けの手がかりの表に組を足す。店の陳列の注意としても配る |
| Gemini API が応答しない | 確認の一覧に「未処理」で残し、1時間おきの時間主導型のトリガーで再度処理する。3回失敗したら担当者が目で見る |
上から2行目までが大半を占めます。 どちらもAIの問題ではなく、撮る時刻と撮り方の問題です。 撮影の手本の写真を店に配ると、retake が減ります。
記録を残す
- 棚の写真と、そのとき対応づけた棚割表の版
- 2つ目の段の見えるままの並びと、3つ目の段の対応づけのJSONの全文
verdictと、担当者が覆した位置とその理由- 店に送った依頼と、店からの返事
- 店ごと・カテゴリーごとの実施率と欠品の率の推移
見えるままの並びを残すのは、対応づけをやり直せるからです。 見分けの手がかりの表を直した後に、写真を読み直さずに3つ目の段だけを回し直せます。 費用もかからず、過去の月の実施率を同じ基準で出し直せます。
覆した理由は、短い選択肢で残します。 「似た商品」「棚割表の版」「代替あり」「撮り方」の4つ程度にしておくと、月末に数えられます。「似た商品」が多ければ見分けの手がかりの表、「撮り方」が多ければ撮影の手本を直します。
04実装レベルの3段階
半自動化で、1枚4分が2分程度になります。 見比べは自動になりますが、全件の結果を見て、依頼を書き、実施率を数える作業が残ります。本格構成で1.2分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、取り違えやすい商品の組と、撮り方が安定しない店が分かります。そこを直してから依頼を自動で送るほうが、店への空振りの依頼が減ります。
05工数削減シミュレーション
導入後 1,500件 × 1.2分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- ドラッグストア、スーパーマーケット、ホームセンターなど、数十店舗で本部が棚割を決め、毎月どこかのカテゴリーで棚替えをしているチェーン。店が棚替えの後に売場の写真を送り、本部の商品部や営業企画が棚割どおりかを目で確かめている場合。棚割のシステムから、ゴンドラ・段・位置ごとの商品とフェイス数を表で書き出せる場合。メーカーや卸の営業が、取引先の店の棚割の実施を写真で確かめている場合にも当てはまります。
- 店舗が数店で、本部の担当が売場を回って確かめられる場合。棚割を店に任せていて、本部の棚割表が無い場合。味違い・サイズ違いのようにパッケージがほとんど同じ商品を写真だけで見分けたい場合(写真では見分けられないことがあります)。なお、棚割そのものの良し悪しや売上への効果の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月棚替えをしたカテゴリーから、ゴンドラを3本選び、棚割表を書き出す
- そのゴンドラの写真を、10店舗から集めて30枚にする(担当者が直しを頼んだものを数枚入れる)
- 手元の Gemini の画面に写真を1枚貼り、第7章の2つ目の段の指示で並びを書き出させる
- 書き出しと棚割表を貼り、3つ目の段の指示で対応づけさせる
- 位置ごとの結果を、当時の担当者の指摘と並べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の指摘と同じ違いが出た | フォームとスクリプトの連携に進む |
| 本体と詰替を取り違える | 見分けの手がかりの表を作る。uncertain に寄せる指示を強める |
空きを wrong_item にする | 指示の書き方で直る。構成は有効 |
| 斜めの写真で段がずれる | 撮り方が先。 AIの問題ではない |
2行目は必ず出ます。 出たら、取り違えた組を商品部と一緒に表にしてください。この表は、店の陳列の注意としても使えます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 棚割表に寄せて読み、取り違えが消える | 並びの書き出しでは棚割表を見せない |
| 似た商品をどちらかに決めてしまう | 迷ったら uncertain。 見分けの手がかりの表を渡す |
| 売れて空いた棚が実施の失敗に数えられる | empty を実施率の分母から外し、欠品の率として別に数える |
| 隠れた商品を棚割どおりと数える | 隠れた位置は uncertain、フェイス数は空にする |
| 締め日より前の写真で全部が違いと出る | 新旧の棚割表の両方で対応づける |
| 段の番号が上下でずれる | 高いゴンドラは上下2枚にし、段の番号をつないでから比べる |
位置の数が合わないまま pass になる | 棚割表と1対1で対応しているかをスクリプトで確かめる |
| 依頼の言い方が店ごとに揺れる | 文章を作らせず、表で送る |
| 共用のアカウントの人が異動して止まる | 部署の共用のアカウントでトリガーを作る |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIが棚割表に合う方向に寄ることから来ます。 見えるままを先に固定し、迷いを uncertain に寄せることで、実施率が実態から離れなくなります。
3行目は、店との信頼に関わります。 欠品を実施の失敗として数えると、よく売れる店ほど低い実施率が会議に出ます。数字の定義を最初に店と共有してください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 売場の棚の写真、棚割表、店の連絡先です。個人の情報はほとんど含みません。 ただし、売場を撮るとお客様や従業員が写ることがあります。
- お客様を写さない … 開店前か閉店後に撮る決まりにし、人が写った写真は確認の一覧で削除します
- 発売前の棚割の扱い … 新商品の導入の棚割は、取引先との関係で社外に出ていない情報を含みます。Gemini API の利用規約では、無料の枠では送った内容が製品の改善に使われ、人が読むことがあるとされ、有料の枠では製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録するとされています。有料の枠で使います
- 実施率を店の評価に直結させない … 実施率は撮り方や
uncertainの多さの影響を受けます。数だけで店を評価せず、担当者が店と話して確かめます - メーカー・卸に写真を渡すときの範囲 … 取引先に実施の状況を共有する場合は、その取引先の商品の位置だけに絞ります。 他社の商品の並びは渡しません
- この構成は棚割の判断を代替しません … 出すのは棚割表との違いの事実だけです。どの商品を何フェイス置くかは、商品部が決めます
誤りが起きた場合のリスクは、正しく並べた店に直しを頼むことと、違う棚を見逃すことの2つです。 前者は迷いを wrong_item に寄せると起き、後者は迷いを ok に寄せると起きます。どちらも「迷ったら uncertain」の1つの規則で防ぎ、uncertain を人に回します。
10まず何から始めるか
1週目:棚割表と見分けの手がかりを用意する
次に棚替えをするカテゴリーの棚割表を、棚割のシステムから書き出してスプレッドシートに置きます。商品部と一緒に、そのカテゴリーで取り違えやすい商品の組を表にします。
2週目:30枚で試す
先月の棚替えの写真30枚を、手元の Gemini の画面で書き出しと対応づけまでさせ、当時の指摘と並べます。似た商品を棚割どおりと読んでいないかを最優先で見ます。
3週目:撮り方をそろえる
撮る位置、撮る時刻、高いゴンドラの上下の分け方を、手本の写真付きで10店舗に配り、フォームで送ってもらいます。チャットでの受け取りは、この10店舗だけ止めます。
4週目:フォームから一覧までをつなぐ
フォームと Apps Script で、写真を受け取り、Gemini API で書き出しと対応づけを行い、確認の一覧に書き出すところまで作ります。この時点では店への依頼を自動にせず、担当者が一覧から手で送ります。
2か月目: 規則で pass と fix と review を分け、fix の依頼を自動で送ります。30店舗に広げ、月末の実施率の集計を足します。3か月目以降: 全60店舗に広げ、1枚4分が何分になったかを実測します。担当者が覆す位置の割合が落ち着き、見分けの手がかりの表の追加が棚替えのたびの作業になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。1回の入力に複数の画像を並べて渡せること。画像を直接入れる場合、指示などと合わせたリクエスト全体が20MBに制限されること。物体の検出で位置を [ymin, xmin, ymax, xmax] の形で0〜1000に正規化して返すこと | Gemini API: Image understanding | 2026-10-07 |
構造化出力を response_format に mime_type: "application/json" とスキーマを入れて指定すること。enum と required が使えること。出力がJSONとして正しくても値はアプリケーションの側で検証するよう案内されていること | Gemini API: Structured output | 2026-10-07 |
| 無料の枠では送った内容が製品の改善に使われ、人が読むことがあること。有料の枠ではプロンプトや画像などを製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録すること | Gemini API Additional Terms of Service | 2026-10-07 |
| ファイルのアップロードの質問で、ファイルがフォームのオーナーの Google ドライブの新しいフォルダに保存され、回答者は Google アカウントへのログインが必要なこと。形式・数・最大サイズを設定できること。共有ドライブのフォームやデータ損失防止が有効な場合は使えないこと | Google ドキュメント エディタ ヘルプ: フォームでファイルをアップロードする | 2026-10-07 |
| インストール型トリガーにフォームの送信と時間主導型があること。トリガーは作った人のアカウントで動くこと | Google Apps Script: Installable triggers | 2026-10-07 |
| 1回の実行時間が6分まで、メールの受信者が Google Workspace のアカウントで1日1,500名までであること | Google Apps Script: Quotas for Google Services | 2026-10-07 |
店に写真の提出を求める範囲と、取引先に実施の状況を共有する範囲は、店舗の運営の決まりと取引先との取り決めに合わせてください。 本記事は上の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0747)についてのご相談はこちらから。
