Claude活用ノウハウ

卸売業の在庫管理部門で Claude をデータ集計・分析に活用|発注最適化の Before/After

2026-06-22 読了16分 7PV
卸売業の在庫管理部門で Claude をデータ集計・分析に活用|発注最適化の Before/After

こんにちは、アサヒリンクスです。この記事は、代表コバが現場で蓄積してきた知見をもとに、AIを活用して構成・執筆し、弊社にて最終チェックを行ったものです。

卸売業の在庫管理部門では、発注判断の根拠となるデータが複数のシステムやExcelに散在していることが多くあります。「今月末に何個必要か」「どのSKUが過剰在庫になりそうか」を毎回手作業で集計・判断している現場では、担当者が1日の大半をデータ加工に費やしてしまいます。本記事では、在庫CSVをClaudeに読み込ませて発注推奨を出す具体的な方法を、Before/After形式で紹介します。プロンプト例・Python実装コード・数値目安まで実務に直結する内容でお届けします。

卸売業の在庫管理で起きている「データ集計」の現状課題

Before:担当者が抱える日常的な負荷

代表コバが対応してきた案件では、卸売業の在庫管理担当者が毎朝取り組んでいる作業パターンとして次のようなものが挙げられます。

  • 基幹システムから在庫数CSVをエクスポートし、Excelに貼り付けて手動集計
  • 過去の出荷実績から経験則で「そろそろ発注が必要」と判断
  • 複数カテゴリ・複数倉庫のデータを別シートで管理しており、全体俯瞰に時間がかかる
  • 季節変動・キャンペーン時期の需要増を加味した発注量の算出が属人化

結果として、発注判断に1〜2時間/日を費やすケースも珍しくありません。担当者が不在のときは判断が止まり、過剰発注や欠品が発生しやすい状態が続きます。

After:Claude活用で変わるフロー

在庫CSVをそのままClaudeに貼り付け(またはMessages API経由で送信)し、「発注推奨リストを出してほしい」と伝えるだけで、安全在庫を下回りそうな品目・推奨発注量・優先度を含む集計結果が返ってきます。集計・判断フェーズだけで1〜2時間 → 15〜20分程度に短縮できる見込みです。

最初のステップ:在庫CSVをClaudeに読み込ませる方法

プロンプトに列定義を明示して精度を上げる

まずはClaude.ai(Webインターフェース)でCSVを貼り付けてプロンプトを試すことをお勧めします。列名が英語略称や社内独自コードの場合は意味を必ず説明してください。Claudeは文脈から推測できますが、「現在庫」と「倉庫別在庫合計」の混在など業種特有の定義は明示しないと誤解が起きやすくなります。

以下は当社の在庫データ(CSV形式)です。
列の意味:商品コード, 商品名, 現在庫数, 安全在庫数, 直近30日平均出荷数, リードタイム(日)

P001,コピー用紙A4 500枚,120,200,45,7
P002,封筒長形3号 100枚,850,300,30,5
P003,ボールペン黒 10本,40,100,18,3
P004,クリアファイル A4 10枚,600,150,25,4
P005,付箋 75×75 100枚,30,80,22,3

このデータを分析し、以下をJSON形式で出力してください:
1. 安全在庫を割り込むリスクが高い品目(優先度high/medium/lowで分類)
2. 推奨発注量(リードタイム中の消費数 + 安全在庫への補充を考慮)
3. 全体サマリ(過剰在庫・適正・要注意の品目数)

このプロンプトで実行すると、Structured Output(JSON)として発注推奨リストが即座に返ってきます。まずこの段階で現場担当者にデモを見せ、「使えそうか」を判断するのが導入の近道です。

Python SDKで在庫分析を自動化する実装ステップ

基本コードとPrompt Cachingによるコスト削減

定期的な自動集計や基幹システムとの連携を視野に入れる場合は、Anthropic Python SDK を使ったスクリプト化が有効です。毎日同じ system プロンプト(在庫管理の指示・列定義・計算ロジック)を使い回すなら、Prompt Caching を活用することで入力コストを通常の1/10程度に削減できます。

import anthropic
import csv
import json
import os

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

SYSTEM_PROMPT = """
あなたは卸売業の在庫管理アドバイザーです。
提供された在庫CSVデータを分析し、以下のJSON形式で発注推奨を返してください。
{
  "summary": {"total_skus": 件数, "urgent": 件数, "caution": 件数, "ok": 件数},
  "recommendations": [
    {"code": "商品コード", "priority": "high|medium|low",
     "recommended_order_qty": 数量, "reason": "発注推奨理由"}
  ]
}
JSONのみを返してください。マークダウンは不要です。
"""

def analyze_inventory(csv_text: str) -> dict:
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=4096,
        system=[
            {
                "type": "text",
                "text": SYSTEM_PROMPT,
                "cache_control": {"type": "ephemeral"}  # Prompt Cachingを有効化
            }
        ],
        messages=[
            {"role": "user", "content": f"在庫データを分析してください:\n\n{csv_text}"}
        ]
    )
    return json.loads(response.content[0].text)

if __name__ == "__main__":
    with open("/path/to/inventory.csv", encoding="utf-8") as f:
        csv_text = f.read()
    result = analyze_inventory(csv_text)
    print(json.dumps(result, ensure_ascii=False, indent=2))

Prompt Cachingでは cache_control: {type: "ephemeral"} を system プロンプトに付与するだけでキャッシュが有効になります。複数倉庫・複数カテゴリをループ処理するバッチでは、コスト削減効果が特に大きくなります。

Batch APIで大量SKUを夜間一括処理する

SKU数が数百件以上のバッチ処理設計

在庫管理対象のSKUが数百〜数千件に及ぶ場合、Batch API を使えば全SKUの発注判断リクエストを一括送信し、非同期で処理結果を受け取れます。コストは通常APIの50%割引となるため、夜間バッチとして毎朝のダッシュボードに反映するフローが費用対効果に優れています。

import anthropic
import json
import os

client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def create_batch_requests(sku_list: list[dict]) -> list[dict]:
    requests = []
    for sku in sku_list:
        requests.append({
            "custom_id": f"sku-{sku['code']}",
            "params": {
                "model": "claude-haiku-4-5",  # 大量処理には低コストのHaikuを使用
                "max_tokens": 256,
                "messages": [
                    {
                        "role": "user",
                        "content": (
                            f"商品コード:{sku['code']} 現在庫:{sku['current_stock']} "
                            f"安全在庫:{sku['safety_stock']} 平均出荷:{sku['avg_daily_ship']}/日 "
                            f"リードタイム:{sku['lead_time_days']}日\n"
                            "発注推奨をJSONで: {\"priority\": \"high|medium|low|ok\", "
                            "\"order_qty\": 数量, \"reason\": \"理由\"}"
                        )
                    }
                ]
            }
        })
    return requests

# バッチ投入
batch = client.messages.batches.create(
    requests=create_batch_requests(sku_list)
)
print(f"バッチID: {batch.id}  ステータス: {batch.processing_status}")

2段構成でコストと精度を両立する

単純な優先度判定には Claude Haiku 4.5 を使い、「優先度high」と判定されたSKUだけ Claude Sonnet 4.6 に詳細分析を依頼する2段構成にすると、コストと精度のバランスが最適になります。バッチ処理は通常数時間以内に完了するため、翌朝の発注業務開始前に結果を揃えることが可能です。

Tool Useで発注データを型安全に構造化する

JSON出力の安定性をスキーマで担保する

JSON出力を json.loads() でパースする方法は手軽ですが、本番運用では Tool Use を使ってスキーマを強制するほうが安定します。Claudeが返す発注推奨を「必ずこの形式で返す」と定義しておくことで、パースエラーによる処理中断を防げます。

tools = [
    {
        "name": "submit_order_recommendations",
        "description": "在庫分析の結果として発注推奨リストを構造化データで提出します",
        "input_schema": {
            "type": "object",
            "properties": {
                "summary": {
                    "type": "object",
                    "properties": {
                        "total_skus": {"type": "integer"},
                        "urgent_count": {"type": "integer"},
                        "ok_count": {"type": "integer"}
                    },
                    "required": ["total_skus", "urgent_count", "ok_count"]
                },
                "recommendations": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "sku_code": {"type": "string"},
                            "priority": {"type": "string", "enum": ["high", "medium", "low"]},
                            "recommended_qty": {"type": "integer"},
                            "reason": {"type": "string"}
                        },
                        "required": ["sku_code", "priority", "recommended_qty", "reason"]
                    }
                }
            },
            "required": ["summary", "recommendations"]
        }
    }
]

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    tools=tools,
    tool_choice={"type": "tool", "name": "submit_order_recommendations"},
    messages=[{"role": "user", "content": f"在庫データ:\n{csv_text}"}]
)
tool_result = response.content[0].input  # 型安全な構造化データとして取得

Tool Useで受け取った構造化データは、そのまま発注管理システムのAPIや社内Slackへの通知に連携できます。「優先度highのSKUだけSlackに通知する」「発注推奨をERPに自動登録する」といったAgentic Workflowの一部として在庫分析を組み込む設計も実現可能です。

導入前後の数値目安と運用上の注意点

Before/Afterの改善指標(目安)

弊社の現場経験では、卸売業の在庫管理部門でClaudeを活用した場合の改善効果として、以下のような水準が見込まれます(規模・既存業務フローによって変動します)。

  • 発注判断の集計・準備時間: 1〜2時間/日 → 15〜20分/日程度(70〜80%削減の目安)
  • 欠品発生件数: 属人的な経験則から定量ロジックへの切り替えにより、見落としによる欠品が20〜30%程度減少する傾向
  • 過剰在庫SKU数: トレンド分析の活用で、不要発注の抑制効果が期待できる(在庫回転率の改善)
  • 引き継ぎ容易化: Claude出力ログ+プロンプト定義が「ルールの可視化」として機能し、担当者交代時のリスクが低減

導入時に注意すべきポイント

(1)Claudeはデータの正確性を検証できない——入力するCSVデータの品質がそのまま発注推奨の品質に影響します。基幹システムからエクスポートしたデータをそのまま渡せる状態に整えることが前提です。

(2)最終発注判断は必ず人間が行う——Claudeの推奨は「判断の補助」であり、最終的な発注指示は担当者が確認してから実行する運用を維持してください。高額品・希少品・仕入れ先との関係が絡む発注は特に人間が主体となるべきです。

(3)プロンプトとロジックはバージョン管理する——発注ロジックの定義はGitリポジトリで管理することをお勧めします。「先月と異なる結果が出た」「なぜこの推奨量になったか」を後から追跡できるようにしておくことが重要です。

まとめ:在庫CSVとClaudeで、発注業務を「集計から判断支援」へ

卸売業の在庫管理部門でClaudeをデータ集計・分析に活用することで、毎日の発注判断に費やしていた集計・準備時間を大幅に短縮し、より多くの時間を「例外対応」「仕入れ先との交渉」「需要予測の精緻化」に振り向けられます。

始め方は単純です。まずはClaudeのチャットに在庫CSVを貼り付けてプロンプトを試してみてください。「使えそうだ」と感じたら、Python SDKで自動化スクリプトを書き、Batch APIで夜間一括処理を組み込む段階的な拡張が可能です。同じアプローチは入荷検品の異常検知・返品率分析・棚割り最適化にも応用できます。

本記事は代表コバの現場知見をもとに AI で構成し、弊社にて最終確認を行っています。

自社への導入方法、どのCSVから着手すべきか、費用感だけ知りたい方も、お気軽にご相談ください。
お問い合わせはこちら

アサヒリンクスへの無料相談はこちら

「何から始めればいいか分からない」段階からでも、お気軽にご相談ください。
まずは、お話を聞かせていただくだけでも大丈夫です。

無料で相談する

この記事をシェアする

一覧へ戻る