Media > AI活用ユースケース > 物流 > 倉庫の保管場所を出荷実績から見直して、取り出しの短い配置案を出す

倉庫の保管場所を出荷実績から見直して、取り出しの短い配置案を出す

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

倉庫のどの棚に何を置くかの見直しを対象にします。直近12か月の出荷実績と棚の条件を渡すと、出荷が多い品目を手前へ、一緒に出る品目を近くへ動かす配置案が、移動の手間と効果を添えて出ます。集計と可否の判断の時間が減ります。

サマリー
利用ツール
ChatGPT/Claude/Gemini/Google Apps Script/Python
対象業界
EC/小売/物流/製造/飲食
対象部門
物流/生産
対象業務
比較検討/集計・分析
主な課題
データ分析に時間がかかる/人手が足りない/属人化している
AIで行う処理
予測
主な効果
判断支援/属人化解消/工数削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
SaaS追加(小)
人間の確認
必須
現在工数
30h/月
AI導入後
10h/月
想定削減
67%
年間削減
240h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 月初に、倉庫管理システムから前月の出荷実績をCSVで書き出す
  2. Excelで品目ごとの出荷件数と出荷数量を集計し、多い順に並べる
  3. 前月と区分が変わった品目を拾い、見直しの対象一覧を作る
  4. 対象の品目について、現在のロケーション(通路・間口・段)を倉庫管理システムで1件ずつ開いて確認する
  5. 棚の寸法と耐荷重を別のExcelで確認し、候補の間口に入るかを見る
  6. 温度帯・危険物・通路をふさぐかどうかを、担当者の記憶と紙の一覧で確かめる
  7. 動かす候補を現場のリーダーに口頭で相談し、了解が取れたものだけ移動指示の紙に書く
  8. 移動後に棚札を張り替え、倉庫管理システムのロケーションを更新する
導入後(After)
  1. 自動毎月1日の未明に、倉庫管理システムから直近24か月の出荷明細・現在のロケーション・在庫を取得する
  2. 自動品目ごとの出荷伝票数と数量、同じ伝票に並んだ組み合わせの回数を集計する
  3. 自動直近12か月と直近3か月、前年の同じ時期を比べ、次の3か月で上がってくる品目と落ちてくる品目を区別する
  4. 自動区分が変わった品目だけを見直しの対象に絞り、現在のロケーションからの距離と移動の見積もり時間を計算する
  5. 自動対象をゾーン単位に分け、棚の条件と運用メモを添えてAIに渡す
  6. 自動AIが制約を1つずつ確認し、動かしてよい品目には配置案と理由を、動かせない品目には理由を返す
  7. 倉庫の担当者が、優先度の高い順に配置案を見て可否を判断する
  8. 作業導線・通路の幅・応援の入りやすさといった現場の事情を加味して、当月に動かすものを選ぶ
  9. 移動計画として確定し、現場に渡す
  10. 移動を1件ずつ実施し、棚札の張り替えとシステムのロケーション更新を、その都度記録する
各工程の詳しい説明を読む
  1. 月初に、倉庫管理システムから前月の出荷実績をCSVで書き出す
  2. Excelで品目ごとの出荷件数と出荷数量を集計し、多い順に並べる
  3. 前月と区分が変わった品目を拾い、見直しの対象一覧を作る
  4. 対象の品目について、現在のロケーション(通路・間口・段)を倉庫管理システムで1件ずつ開いて確認する
  5. 棚の寸法と耐荷重を別のExcelで確認し、候補の間口に入るかを見る
  6. 温度帯・危険物・通路をふさぐかどうかを、担当者の記憶と紙の一覧で確かめる
  7. 動かす候補を現場のリーダーに口頭で相談し、了解が取れたものだけ移動指示の紙に書く
  8. 移動後に棚札を張り替え、倉庫管理システムのロケーションを更新する

(a)集計そのものに時間がかかる。 2から3は毎月同じ手順の繰り返しですが、出荷実績は明細行で数十万行あり、Excelで開いて集計するだけで午前中が終わります。判断は何もしていません。

(b)一緒に出る品目を数えられていない。 「この2つはいつも同じ注文で出る」という感覚はありますが、数えるには出荷明細を伝票単位で見る必要があります。 品目ごとに合計したExcelの表からは、どの品目とどの品目が同じ伝票に並んだのかが原理的に出てきません。 そのため近くに置く判断は、ベテランの記憶だけが頼りです。

(c)制約の確認が人に付いている。 耐荷重も温度帯も、表としてそろっているのは寸法だけで、残りは「この品目は冷蔵」「この棚は上に重いものを載せない」という申し送りです。その申し送りを知っている人が休むと、見直しはその日に止まります。

(d)移動の手間と効果が並んでいないので、後回しになる。 「この品目を手前に」という提案だけを持っていくと、現場からは「今それをやる価値があるのか」と返ります。月に2回しか出ない品目を手前に動かす提案が混じっていれば、一覧そのものが信用されなくなります。

  1. 【自動】 毎月1日の未明に、倉庫管理システムから直近24か月の出荷明細・現在のロケーション・在庫を取得する
  2. 【自動】 品目ごとの出荷伝票数と数量、同じ伝票に並んだ組み合わせの回数を集計する
  3. 【自動】 直近12か月と直近3か月、前年の同じ時期を比べ、次の3か月で上がってくる品目と落ちてくる品目を区別する
  4. 【自動】 区分が変わった品目だけを見直しの対象に絞り、現在のロケーションからの距離と移動の見積もり時間を計算する
  5. 【自動】 対象をゾーン単位に分け、棚の条件と運用メモを添えてAIに渡す
  6. 【自動】 AIが制約を1つずつ確認し、動かしてよい品目には配置案と理由を、動かせない品目には理由を返す
  7. 【人】 倉庫の担当者が、優先度の高い順に配置案を見て可否を判断する
  8. 【人】 作業導線・通路の幅・応援の入りやすさといった現場の事情を加味して、当月に動かすものを選ぶ
  9. 【人】 移動計画として確定し、現場に渡す
  10. 【人】 移動を1件ずつ実施し、棚札の張り替えとシステムのロケーション更新を、その都度記録する

5番目のゾーン単位が、この設計の分かれ目です。 200件を1回でAIに渡しません。通路のまとまりごとに分け、1回あたり数十件にします。理由は第6章で述べる仕様上の制限ですが、現場にとっても意味があります。 移動作業はゾーンごとにまとめたほうが少ない歩数で終わるからです。

7番目と8番目を自動化しないことが、もう一つの分かれ目です。 配置案は案であり、動かすのは人です。 とくに作業導線は図面に出てきません。「そこに置くと台車がすれ違えない」は、その場で作業している人しか分かりません。

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

構成図
【トリガー】毎月1日
   ▼
Python ── 倉庫管理システムから直近24か月の出荷明細・ロケーション・在庫を取得
   ├──▶ 品目ごとの出荷頻度と数量を集計
   ├──▶ 同時に出荷される組み合わせを伝票単位で数える
   ├──▶ 現在のロケーションと棚の条件(重量・寸法・温度帯)を取得
   ├──▶ 動かす候補を絞る(区分が変わった品目だけ)
   └──▶ 移動の手間と効果を見積もる
   ▼  ゾーン単位に分割して投入
Gemini(構造化出力)── 制約を確認し、配置案と理由をJSONで返す
   ▼
Python ── 数値の突合/優先度の並べ替え/配置案の一覧を組む
   ▼
【倉庫の担当者が可否を判断】現場の事情を加味して当月分を選ぶ
   ▼
移動計画 ──▶ 移動の実施(1件ずつ記録)──▶ 倉庫管理システムのロケーション更新
役割想定する製品代替候補
処理Gemini(Gemini API の構造化出力)Claude API、OpenAI API
集計PythonGoogle Apps Script

倉庫管理システムと棚のExcelは、この表には含めません。どちらも既にあるもので、新しく足すのは集計を回す部分と、制約の確認をさせる部分の2つだけだからです。倉庫管理システムからは読み取り専用でデータを出し、書き戻しは行いません。 棚の寸法と荷姿のExcelは、列名を固定して読み込む対象にします。

土台は Gemini API の構造化出力です。 レスポンス形式に MIME タイプ application/json とJSONスキーマを指定すると、応答がそのスキーマに従います。使える型は stringnumberintegerbooleanobjectarraynull で、null を許すときは {"type": ["string", "null"]} のように type を配列で書きます。 オブジェクトには propertiesrequiredadditionalProperties が、配列には itemsminItemsmaxItems が指定できます。

この記事の設計の要は、数値に minimummaximum を指定できることです。 優先度は1から5、移動の見積もり時間は0以上、といった範囲をスキーマ側で縛れば、ありえない数値が返ってくること自体を構造で防げます。 文字列側には enum があり、分類のように取りうる値が決まっている項目は、候補を列挙して縛れます。 制約の確認結果を「問題なし/不可/不明」の3つに限るのはこのためです。日付には format として date-timedatetime などの構文が指定できます。

もう一点、制限も設計に効きます。 すべてのJSONスキーマの機能が使えるわけではなく、非常に大きい、または深くネストされたスキーマは拒否されることがあります。 200件分の配置案を1つのスキーマで受けようとすると、この制限に触れます。ゾーン単位に分けて回すのは、ここが理由です。

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

Step1

処理の起点を決める

毎月1日に動かします。 出荷の傾向は1日では変わりませんし、棚札の張り替えとシステムの更新を伴う以上、配置は毎日変えられません。

月初にする理由は2つあります。前月末までの出荷実績がそろうこと、そして移動作業を当月の作業計画に組み込めることです。

例外として、大型の販促や新規取引が決まったときのために、ゾーンを指定した手動起動を用意します。対象は指定したゾーンだけに限ります。

Step2

入力データを集める

データ中身取得元
出荷明細伝票番号、出荷日、品目コード、出荷数量、出荷単位倉庫管理システム
現在のロケーション品目コード、通路番号、間口番号、段数、保管数量倉庫管理システム
在庫と荷姿品目コード、在庫数量、入数、1パレットあたりの数量、外装の寸法、重量倉庫管理システム/Excel
棚の条件間口の寸法、段ごとの耐荷重、段の高さ、温度帯、危険物の可否棚のExcel
運用メモ「通路をふさぐので奥」「この棚は応援が入りにくい」などの現場の申し送り倉庫グループ

この構成の質を決めるのは、上から4つ目の棚の条件です。 出荷実績とロケーションは倉庫管理システムに必ずありますが、耐荷重と温度帯は表としてそろっていないことがほとんどです。整っていないとAIは制約を「不明」と返すしかなく、人の確認時間は減りません。

出荷明細は、伝票番号を落とさずに取ります。 集計済みのデータでは第3章の(b)と同じ状態になり、一緒に出る品目を数える手立てが無くなります。

Step3

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

読み取り専用のビューまたはCSV出力を用意し、月初の未明に1回だけ取得します。期間は直近24か月です。次の3か月を見るのに使うのは直近12か月ですが、前年の同じ時期と比べるために、その前の12か月も要ります。

棚の条件のExcelは、列名と並びを固定して読み込みます。更新日の列を持たせ、更新が3か月以上前なら警告を出します。 古い表のまま計算すると、入らない間口を提案し続けることになります。

取得したデータは、ゾーン単位に分けて保持します。 ゾーンは通路のまとまりで、常温・定温・冷蔵の区画をまたぎません。区画をまたぐ移動はそもそも提案の対象外なので、最初から分けておけば、ありえない案が出る経路を閉じられます。1回の取得は数十万行、AIへの1回の投入は数十件が目安です。

Step4

AIへ渡す前に整形する

この構成では、数える仕事とAIの仕事を分けます。 数えるほうはプログラムで行い、計算式を残します。以下は本記事が設定する手順で、区切りの値、歩行速度、1パレットあたりの移動時間は、倉庫ごとに実測して決めてください。

まず、品目ごとに5つの値を計算します。

  1. 出荷頻度 … その品目が現れた出荷伝票の数 ÷ 対象月数 = 月あたりの取り出し回数
  2. 出荷数量 … 対象期間の出荷数量の合計 ÷ 対象月数 = 月あたりの出荷数量
  3. 同時出荷回数 … 品目Aと品目Bが同じ伝票番号に並んだ伝票の数。明細を伝票単位で走査して数えます
  4. 現在地の往復距離 … 通路の入口を起点に、通路番号と間口番号から片道の距離を求め、2倍します
  5. 移動の見積もり時間 … (移動するパレット数 × 1パレットあたりの移動時間)+ 棚札の張り替え時間 + システム上のロケーション変更の時間

次に、区分を作ります。直近12か月の出荷伝票数で降順に並べ、累積構成比が70%までをA、70%から90%までをB、残りをCとします。 同じ区切りで出荷数量の側の区分も作り、2つを並べて持ちます。数量が多くても伝票数が少ない品目は、取り出しの回数が少ないからです。手前・腰の高さに置く候補になるのは、伝票数のAです。

次に、3か月先の見込みを出します。ここが「予測」にあたる部分です。

  • 伸び率 = 直近3か月の月平均伝票数 ÷ 直近12か月の月平均伝票数
  • 季節係数 = 前年の同じ3か月の月平均伝票数 ÷ 前年12か月の月平均伝票数
  • 見込み伝票数 = 直近3か月の月平均伝票数 × 季節係数

見込みの区分が現在の区分と違う品目だけが、見直しの対象に上がります。 これが月200件の中身です。見込みは配置の優先順位を決めるための目安であり、数字そのものを当てにいくものではありません。 どの程度合うかは品目によって異なります。

最後に、効果を見積もります。

  • 月間歩行距離 = 見込み伝票数 × 現在地の往復距離
  • 削減距離 = (現在地の往復距離 - 提案先の往復距離)× 見込み伝票数
  • 回収の目安(月数)= 移動の見積もり時間 ÷(削減距離 ÷ 歩行速度)

回収の目安が、(d)への答えです。 月に2回しか出ない品目を手前に動かす提案は削減距離が小さく、回収の目安が何十か月にもなって、一覧の下のほうへ自然に落ちます。

Step5

AIに処理させる

誰がやるかやること
機械(集計)出荷頻度・出荷数量・同時出荷の回数・現在のロケーションからの距離・移動の見積もり時間
AI制約(重量・寸法・温度帯・危険物)と現場の運用メモを読んで動かしてよいかを判断し、動かす理由を文章にする
最終の可否。とくに現場の事情(作業導線、通路の幅、応援の入りやすさ)は人が見る

AIに数を数えさせません。 出荷頻度も距離も移動時間も、計算式が決まっている以上プログラムで出せます。計算させると検算ができなくなり、案の信用が一度で落ちます。

AIにさせるのは3つです。①棚の条件と品目の寸法・重量・温度帯を突き合わせ、候補の間口に入るかを判断する ②文章で書かれた運用メモを読み、そこにある制約を拾うなぜ動かすのかを、数字を根拠に文章にする

させないこと理由
出荷頻度・距離・移動時間の計算機械が計算した値を渡す。AIが計算すると検算できない
棚の条件の推測記載が無い項目は「不明」と書かせる。 埋めさせない
移動の実行と、システムのロケーション更新案は案。動かすのは人
取引先を見た判断取引先名はそもそも渡さない(第13章)
精度の主張「この配置で何%短縮できる」と書かせない。出すのは計算した削減距離だけ
Step6

指示内容を固定する

あなたは倉庫の保管場所の見直しを支援する立場です。
渡された数値は集計済みです。自分で計算し直さないでください。

【渡すもの】品目コード、寸法、重量、温度帯、危険物の区分、現在のロケーション、
見込み伝票数、区分の変化、移動の見積もり時間、削減距離、同じゾーンの棚の条件と空き間口の一覧、
現場の運用メモ。

【判断の手順】
1. 品目ごとに、候補の間口を上から順に見て、
   寸法・耐荷重・温度帯・危険物の4つを1つずつ確かめてください。
2. 4つすべてが問題なければ proposed_location に間口を書いてください。
3. 1つでも合わないときは proposed_location を null にし、
   blocked_by に「どの制約が、どう合わないか」を書いてください。
4. 運用メモにその品目や棚への記載があれば、必ず読んで判断に含めてください。

【厳守事項】
- 渡されたデータに記載が無い項目は「不明」としてください。
  寸法、耐荷重、温度帯、危険物のいずれかが分からない品目や棚は、
  constraints_checked の該当項目を unknown にし、
  needs_human を真にして、何が分からないかを note に書いてください。
  分からない値を、似た品目や近くの棚から補わないでください。
- move_minutes と expected_gain は、渡された値をそのまま書いてください。
  四捨五入も、単位の変換も、概算への言い換えもしないでください。
- reason には、なぜ動かすのかを渡された数値を挙げて書いてください。
  「効率が上がる」「最適化される」とだけ書いてはいけません。
  何%短くなる、何割改善する、といった割合を書かないでください。
- priority は次の基準で付けてください。
  5 = 見込み伝票数が多く、回収の目安が3か月以内
  3 = どちらかが当てはまる
  1 = 回収の目安が12か月を超える
  基準に当てはめられないときは3にし、その理由を reason に書いてください。
- 移動の作業手順、実施日、担当者を書かないでください。

【ゾーン】{zone}
【見直し対象】{items}
【棚の条件と空き間口】{locations}
【現場の運用メモ】{notes}

「記載が無ければ不明とする」を独立した項目にしているのは、ここが最も埋められやすいからです。 棚の耐荷重が空欄のとき、同じ通路の別の棚の値を持ってくる、という補い方をされると、出力は自然に見えるのに現場で棚がたわみます。 不明のまま返れば、人はその棚を測りに行けます。

優先度の定義を指示文に書いているのは、スキーマだけでは足りないからです。 minimummaximum は1から5の外を防ぎますが、全件が5になることは防げません。 何を5とするかは、この文章の側で決めます。

Step7

出力形式を固定する

レスポンス形式に MIME タイプ application/json と、次のスキーマを指定します。

{
  "type": "object",
  "properties": {
    "zone": { "type": "string" },
    "generated_for": { "type": "string", "format": "date" },
    "proposals": {
      "type": "array",
      "maxItems": 60,
      "items": {
        "type": "object",
        "properties": {
          "item_id": { "type": "string" },
          "current_location": { "type": "string" },
          "proposed_location": { "type": ["string", "null"] },
          "priority": { "type": "integer", "minimum": 1, "maximum": 5 },
          "reason": { "type": "string" },
          "constraints_checked": {
            "type": "object",
            "properties": {
              "weight": { "type": "string", "enum": ["ok", "ng", "unknown"] },
              "size": { "type": "string", "enum": ["ok", "ng", "unknown"] },
              "temperature": { "type": "string", "enum": ["ok", "ng", "unknown"] },
              "hazardous": { "type": "string", "enum": ["ok", "ng", "unknown"] }
            },
            "required": ["weight", "size", "temperature", "hazardous"],
            "additionalProperties": false
          },
          "blocked_by": { "type": ["string", "null"] },
          "move_minutes": { "type": "number", "minimum": 0, "maximum": 480 },
          "expected_gain": { "type": "number", "minimum": 0 },
          "needs_human": {
            "type": "object",
            "properties": {
              "flag": { "type": "boolean" },
              "note": { "type": "string" }
            },
            "required": ["flag", "note"],
            "additionalProperties": false
          }
        },
        "required": ["item_id", "current_location", "proposed_location", "priority",
          "reason", "constraints_checked", "blocked_by", "move_minutes",
          "expected_gain", "needs_human"],
        "additionalProperties": false
      }
    }
  },
  "required": ["zone", "generated_for", "proposals"],
  "additionalProperties": false
}

構造化する理由の1つ目は、ありえない数値を構造で止めることです。 優先度に minimum: 1maximum: 5 を、移動時間と削減距離に minimum: 0 を指定しているため、0や9の優先度も、負の移動時間も返ってきません。 制約の確認結果を enum で3つに限っているのも同じで、「おおむね問題なし」という中間の答えが入りません。

2つ目は、blocked_by を持たせるためです。 「動かせない」も答えとして価値があります。理由が記録に残らなければ、翌月も同じ品目が候補に上がります。 保存しておけば次回の集計で外せます。動かせる場合は null を返すため、type を配列で書いて null を許しています。

3つ目は、優先度の順に並べ替えて現場に渡せることです。文章で返ってくると、この並べ替えが人の作業に戻ります。

maxItems を60にしているのは、非常に大きい、または深くネストされたスキーマが拒否されることがあるためです。1ゾーンあたりの対象がこれを超えるときは、通路単位までさらに分けて回します。

Step8

システムへ連携する

つなぎ先方式内容
倉庫管理システム読み取り専用のビューまたはCSV出力出荷明細、ロケーション、在庫、荷姿を返す
棚の条件のExcel列名を固定した読み込み間口の寸法、耐荷重、段の高さ、温度帯、危険物の可否
Gemini API構造化出力ゾーン単位で制約を確認し、配置案をJSONで返す
配置案の一覧表計算またはWebの画面優先度順に並べ、担当者が可否を入力する
移動の記録倉庫管理システムへの手入力移動後のロケーションを1件ずつ更新する

最後の行を自動化しません。 配置案の確定と同時にシステムのロケーションを書き換えると、実際には動かしていない品目が、動いたことになります。

Step9

人が確認する

全件、人が確認します。確認せずに移動計画にする設計にしません。

  1. 優先度の高い順に案を見るreason に挙げられた数値と、move_minutesexpected_gain を見て、その移動を当月にやる価値があるかを判断します
  2. 現場の事情を当てる … 作業導線、通路の幅、台車のすれ違い、応援の人が入りやすいかどうか。この4つはデータに無く、人にしか分かりません
  3. needs_human が真の案を先に見る … 制約が unknown の品目は、棚か品目のどちらかを実際に測りに行く必要があります

2番目が、この構成の中心の作業です。 機械は距離を計算し、AIは寸法と温度帯を照合しますが、「そこに置くと台車が止まる」は図面にも実績にも出てきません。 そこに担当者の時間を使うのがねらいです。

確認の目標は1件3分です。 それ以上かかるなら、reason に数値が入っていないか、unknown が多すぎます。unknown が多い場合に直すのは、指示文ではなく棚の条件の表のほうです。

Step10

例外に対処する

起きること対応
棚の条件が空欄unknown を返させ、needs_human を真にする。推測で埋めさせない
空いている間口が無い配置案を出さず、blocked_by に「空き間口なし」と書く。既に入っている品目を勝手に押し出させない
スキーマが拒否されるゾーンを通路単位までさらに分けて再実行する
渡した値と違う数値が返るmove_minutesexpected_gain を入力と突き合わせ、一致しない案は自動で差し戻す
同じ品目が毎月ふさがれて上がるblocked_by を保存し、同じ理由で3回続いたら候補から外す
移動が途中で止まった未完了のロケーションを一覧に残す。次回の集計は移動前の位置で行う

4行目を軽く見ないでください。 渡した数値が書き換わることがあり、そのまま現場に出ると「AIの出した数字は当てにならない」という評価が定着します。

Step11

記録を残す

  • 集計に使った期間、行数、品目数、ゾーンごとの対象件数
  • 品目ごとの計算結果(出荷頻度、同時出荷の組み合わせ、往復距離、移動の見積もり時間、回収の目安)
  • AIへ渡した入力と、返ってきたJSONの全文
  • 担当者が見送った案と、その理由(とくに現場の事情によるもの)
  • 実際に移動した品目、移動日、移動前後のロケーション
  • 移動後3か月の、その品目の出荷伝票数と往復距離

4つ目と6つ目が、この構成を育てる材料です。 見送りの理由が同じ言葉で何度も出てくるなら、それは制約として表に入れるべきものです。

04実装レベルの3段階

最小構成:1ゾーンを手で集計してAIに貼り付け、制約の確認と配置案を出させる / 移動の可否の判断
半自動化:上記+出荷明細の取得と集計を自動化し、ゾーン単位で毎月回す / 集計、ロケーションの確認、可否の判断
本格構成:上記+移動の実績と3か月後の歩行距離を取り込み、次の見直しに反映する / 上記+見直しの効果の測定

最小構成でも1件9分が7分程度にはなりますが、集計の4分が残るため、対象を広げられません。半自動化で9分が3分程度になり、200件を毎月回せるようになります。この段階の効果がいちばん大きく、本記事が想定するのもここです。 本格構成では工数はほとんど変わりませんが、同時出荷の数え方が妥当だったかを確かめられるようになります。 提案どおり動かしたのに距離が縮んでいなければ、直すのは集計の前提のほうです。

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

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

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

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

AI活用について相談する

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

向いている
  1. 自社倉庫でピッキングを行っており、保管品目が1,000を超える企業。季節や販促で出荷の顔ぶれが変わるのに、保管場所が入庫順のまま固定されている場合。倉庫管理システムに出荷実績とロケーションの記録があり、棚の寸法・耐荷重・温度帯を表にできる場合。
向いていない
  1. 保管品目が数十で、置き場所を作業者全員が覚えている場合。自動倉庫が入っていて、機械が保管場所を決めている場合。出荷実績がシステムに残っておらず、紙の出荷指示で運用している倉庫では、先に出荷記録の電子化を行うほうが、配置の見直しよりも効果が大きくなります。

07最小構成で試す方法

  1. 倉庫の1ゾーンを選ぶ(品目数が50から100程度のところ)
  2. そのゾーンの直近12か月の出荷明細を、伝票番号を残したままCSVで書き出す
  3. 表計算で、品目ごとの出荷伝票数と、同じ伝票に並んだ品目の組み合わせの回数を数える
  4. そのゾーンの棚の条件(間口の寸法、耐荷重、段の高さ、温度帯)を手で表にする
  5. 集計結果と棚の条件をAIの画面に貼り付ける
  6. 「この品目を、どの間口に移してよいか。寸法・耐荷重・温度帯・危険物を1つずつ確かめ、合わないものは理由を書いてください。分からない項目は不明としてください」と指示する
  7. 出てきた案を、現場のリーダーに見せて反応を聞く

3番の組み合わせの集計は、必ず手でやってください。 ここが数えられるかどうかで、この構成が成立するかが決まります。

出てきた内容判断
制約の判定が合っており、現場のリーダーが「これはやる価値がある」と言う自動での集計とゾーン単位の実行に進む
判定は合うが「今はやらない」と言われる移動の見積もり時間と回収の目安を足す。構成は有効
「不明」ばかりが返る棚の条件の整備が先。 AIの問題ではない

3行目が出ることは珍しくありません。 失敗ではなく、見直しが進まない本当の理由が分かったということです。

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

問題対策
棚の条件がそろわず「不明」ばかり返る先に棚を測る。 AIの指示文をいくら直しても変わらない
品目ごとに集計したデータを渡してしまう伝票番号を残したまま取得する。 集計済みでは同時出荷が数えられない
同時出荷を品目単位で数えてしまう同じ伝票に並んだ回数を数える。同じ日に出た回数ではない
スキーマが拒否される1回の投入をゾーン単位に絞る。 大きい、または深くネストされたスキーマは拒否されることがある
AIが数値を作る計算は機械で行い、渡した値と突き合わせて一致しない案を差し戻す
優先度が全件5になるminimummaximum では偏りを防げない。5の条件を指示文で定義する
季節品を「伸びている」と誤認する前年の同じ時期を必ず見る。直近3か月だけで判断しない
動かせない品目が毎月上がってくるblocked_by を保存し、同じ理由が3回続いたら候補から外す
案は出るが移動が実行されない移動の見積もり時間と回収の目安を必ず添える。手間の見えない案は採用されない
移動したのにシステムを更新し忘れる移動を1件ずつ記録する。 まとめて更新すると所在が分からなくなる
効果が出たのか分からない移動後3か月の歩行距離を測る。測らないと集計の前提を直せない

上から2行目と3行目は、同じ原因から出ます。 出荷実績を「品目別の月次合計」として受け取る習慣が強いためで、その形で受け取った時点で、この構成の半分は成立しなくなります。

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

この構成で扱うデータ: 出荷明細(伝票番号、出荷日、品目コード、数量、出荷先コード)、在庫、ロケーション、棚の条件。このうち出荷明細は、取引先ごとの販売数量が分かるデータです。

  1. 取引先名を外部AIに渡さない … この構成でAIに渡す必要があるのは、品目コードと数量、そして棚の条件だけです。出荷先コードは集計の段階で使い、AIへの入力からは落とします。 誰に何をいくつ売っているかは、外へ出す必要がありません。渡す範囲をあらかじめ狭めておけば、後から止める必要がありません
  2. 同時出荷の組み合わせも、品目コードのまま渡す … どの品目とどの品目が一緒に出るかは、取引先の仕入れの仕方を示す情報です。 品目コードで渡し、品目名も落とせるなら落とします
  3. 移動の実行を自動化しない … 配置案は案であり、動かすのは人です。 システムのロケーションを先に書き換える設計にすると、途中で作業が止まったときに在庫の所在が分からなくなります。 移動は1件ずつ、動かしてから記録します
  4. 入力を学習に使わないサービスを選ぶ … 品目コードだけでも、出荷の量と季節の動きは読み取れます
  5. 棚の条件を安全上の記録として扱う … 耐荷重の表が誤っていると、提案どおりに動かした結果として棚がたわみます。表の更新日を持たせ、古いまま使わない運用にしてください
  6. 配置案の根拠を残す … どの数値から、どの制約の確認を経て出た案かを記録します。事故が起きたときに、判断の経路をたどれる形にしておきます

そして、提案どおりに動かした後、歩行距離が本当に縮んだかを3か月測ってください。 移動前後のロケーションと、その品目の出荷伝票数から、往復距離の合計を月ごとに出します。縮んでいなければ、直すのは集計の前提、とくに同時出荷の数え方です。 同じ伝票に並んだ回数で数えるのか、同じ出荷便でまとめられる範囲で数えるのかで、近くに置くべき組み合わせは変わります。測らずに毎月提案を出し続けると、前提の誤りに気づく機会がありません。

10まず何から始めるか

1週目:1ゾーンの棚を測る

品目数が50から100程度のゾーンを1つ選び、間口の寸法、段ごとの耐荷重、段の高さ、温度帯を表にします。 ここで「耐荷重が分からない棚」が何割あるかが分かります。その割合が、この構成が動き出すまでの距離です。

2週目:出荷明細を伝票単位で出せるかを確かめる

倉庫管理システムから、そのゾーンの直近12か月の出荷明細を伝票番号を残したまま書き出します。書き出せなければ、先にそこを解決します。品目別の月次合計しか出ないシステムでは、この構成は成立しません。

3週目:同時出荷を数えてみる

同じ伝票に並んだ品目の組み合わせを数え、回数の多い順に並べます。上位の組み合わせが現在どれだけ離れて置かれているかを見ます。 ここで現場のリーダーの感覚と合うかを確かめてください。

4週目:AIに制約の確認をさせる

集計結果と棚の条件を貼り付け、配置案を出させます。制約の判定が正しいかを、現物と照らして全件見ます。

2か月目: 集計をプログラムにし、ゾーン単位で毎月回せる形にします。移動の見積もり時間と回収の目安を足し、一覧を優先度順に並べます。3か月目以降: 実際に移動した品目の移動前後のロケーションを記録し、3か月後に歩行距離を測ります。 縮んでいることが確かめられた時点で、対象のゾーンを広げます。


11関連ユースケース

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

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

技術仕様確認日:2026-09-23/最終更新:2026-09-23
確認した内容情報源確認日
構造化出力が、レスポンス形式に MIME タイプ application/json とJSONスキーマを指定して応答をスキーマに従わせる仕組みであること。使える型が stringnumberintegerbooleanobjectarraynull であり、null を許すときは {"type": ["string", "null"]} のように type を配列に含めること。オブジェクトに propertiesrequiredadditionalProperties が指定できること。文字列に、分類のように取りうる値が決まっている場合の enum と、date-timedatetime などの構文を指定する format が使えること。数値に enumminimummaximum が使えること。配列に itemsminItemsmaxItems が使えること。すべてのJSONスキーマ機能がサポートされるわけではなく、非常に大きい、または深くネストされたスキーマは拒否されることがあることGemini API: 構造化出力2026-09-23

倉庫管理システムからの出荷明細の取り出し方は製品によって異なるため、伝票番号を残したまま書き出せるかは導入前にベンダーへ確認してください。 本文に示した区分の作り方、同時出荷の数え方、移動の見積もり時間と回収の目安の計算式は、この記事が設定した手順です。区切りの値や歩行速度は自社の倉庫で実測して決めてください。また、危険物や温度帯の取り扱いは法令や取引先との取り決めで定まるため、自社の物流部門と品質保証部門への確認が必要です。

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

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

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

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