mcpField
W
warehouse-design

warehouse-design

github.com/kishorkukrejaその他8479 回インストール3 週間前に更新
リポジトリ

warehouse-design について

warehouse-designは、倉庫設計担当者や運用チーム向けの施設計画スキルです。面積、レイアウト、保管方式、設備、処理能力、自動化、KPIを扱います。

主な機能

  1. 01事業・運用・敷地要件の評価
  2. 02保管面積と倉庫容量の見積もり
  3. 03レイアウトと保管方式の比較
  4. 04マテリアルハンドリング機器の選定
  5. 05ドック、ピッキング、自動化、KPIの分析

活用シーン

  1. 01新しい倉庫施設の計画
  2. 02需要予測に応じた容量の評価
  3. 03荷役とピッキング移動の削減
  4. 04保管・自動化案の比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kishorkukreja/awesome-supply-chain --skill warehouse-design

インストール後、Claude Code で/warehouse-designを入力して読み込まれたか確認します。

詳細

倉庫設計

倉庫設計と施設計画の専門家です。空間利用率、マテリアルフロー、労働生産性、業務効率を最適化する、効率的で費用対効果の高い倉庫施設の設計を支援します。

初期評価

倉庫を設計する前に、以下を把握します。

  1. ビジネス要件

    • 保管する製品は何ですか?(SKU数、品種)
    • 処理量はどのくらいですか?(単位数/日、注文数/日)
    • 成長予測はありますか?(3~5年の見通し)
    • 特別な要件はありますか?(温度管理、危険物、セキュリティ)
  2. 業務プロファイル

    • 注文の形態はどのようなものですか?(B2Bパレット、B2C個品、混合)
    • ピーク時と平均時の処理量はどのくらいですか?(季節変動係数)
    • SKUの出荷頻度の分布はどうなっていますか?(高頻度/中頻度/低頻度)
    • 付加価値サービスはありますか?(キッティング、ラベル貼付、返品)
  3. 物理的制約

    • 利用可能な敷地はありますか?(寸法、形状、制約)
    • 建物の種類は何ですか?(新築、既存施設の改修)
    • 利用可能な有効高さはどのくらいですか?
    • 柱間隔と床の耐荷重はどのくらいですか?
  4. 現状

    • 現在の業務で再現または改善すべき点はありますか?
    • 現在の空間利用率と課題は何ですか?
    • すでに導入済みのテクノロジーはありますか?
    • 従業員に関する考慮事項はありますか?

倉庫設計のフレームワーク

設計原則

1. マテリアルハンドリングを最小限に抑える

  • 直線的なフローを優先する
  • 荷物に触れる回数と移動を最小限に抑える
  • 可能な場合は直接棚入れする
  • クロスドッキングの機会を活用する

2. 空間利用率を最大化する

  • 垂直方向に保管する(高さを活用する)
  • 出荷頻度の低い製品には高密度保管を採用する
  • 効率的な通路配置にする
  • 空間に適したサイズの機器を選ぶ

3. 労働生産性を最適化する

  • 移動距離を最小限に抑える
  • 類似した作業をまとめる
  • 人間工学に基づいた作業台を設計する
  • 作業負荷のバランスを取る

4. 柔軟性を確保する

  • 成長に対応する
  • 複数の注文形態をサポートする
  • 拡張可能なシステムを採用する
  • レイアウトを変更可能にする

5. 安全性とコンプライアンスを確保する

  • 防火基準とスプリンクラーの要件
  • ADAアクセシビリティ
  • OSHA規制
  • 製品固有の規制(食品、医薬品)

倉庫の規模と容量

面積の算出方法

必要な保管スペース:

import numpy as np
import pandas as pd

def calculate_storage_space(sku_data, peak_factor=1.5, utilization_target=0.85):
    """
    Calculate required warehouse storage space

    Parameters:
    - sku_data: DataFrame with columns ['sku', 'avg_inventory', 'pallet_positions']
    - peak_factor: Peak inventory as multiple of average (e.g., 1.5 = 50% above avg)
    - utilization_target: Target space utilization (0.85 = 85%)

    Returns:
    - Required pallet positions
    """

    # Calculate peak inventory
    sku_data = sku_data.copy()
    sku_data['peak_inventory'] = sku_data['avg_inventory'] * peak_factor

    # Total pallet positions needed
    total_positions = sku_data['pallet_positions'].sum()

    # Adjust for utilization target (need more positions than peak to maintain flow)
    required_positions = total_positions / utilization_target

    return {
        'avg_pallet_positions': sku_data['pallet_positions'].sum(),
        'peak_pallet_positions': total_positions,
        'required_positions': round(required_positions, 0),
        'utilization_target': utilization_target
    }

# Example
sku_data = pd.DataFrame({
    'sku': [f'SKU_{i}' for i in range(1, 101)],
    'avg_inventory': np.random.randint(10, 500, 100),
    'pallet_positions': np.random.randint(1, 50, 100)
})

storage_req = calculate_storage_space(sku_data, peak_factor=1.5, utilization_target=0.85)
print(f"Required pallet positions: {storage_req['required_positions']}")

倉庫の総床面積:

def warehouse_sizing(storage_positions, storage_type='selective',
                     receiving_docks=10, shipping_docks=15,
                     value_added_sq_ft=5000):
    """
    Calculate total warehouse square footage

    storage_type: 'selective', 'drive-in', 'push-back', 'pallet-flow'
    """

    # Square feet per pallet position by storage type
    sq_ft_per_position = {
        'selective': 30,      # Single-deep racking, most accessible
        'double-deep': 22,    # Double-deep, less accessible
        'drive-in': 18,       # High density, LIFO
        'push-back': 20,      # High density, LIFO
        'pallet-flow': 25,    # FIFO, dynamic
        'floor-stacked': 15   # Very dense, limited access
    }

    storage_sq_ft = storage_positions * sq_ft_per_position.get(storage_type, 30)

    # Receiving area (assume 2000 sq ft per dock door)
    receiving_sq_ft = receiving_docks * 2000

    # Shipping area (assume 1500 sq ft per dock door)
    shipping_sq_ft = shipping_docks * 1500

    # Aisles and circulation (20-30% of storage)
    circulation_sq_ft = storage_sq_ft * 0.25

    # Office, break rooms, restrooms (5-10% of total)
    support_sq_ft = (storage_sq_ft + receiving_sq_ft + shipping_sq_ft) * 0.08

    # Total
    total_sq_ft = (storage_sq_ft +
                   receiving_sq_ft +
                   shipping_sq_ft +
                   circulation_sq_ft +
                   value_added_sq_ft +
                   support_sq_ft)

    breakdown = {
        'Storage': round(storage_sq_ft, 0),
        'Receiving': round(receiving_sq_ft, 0),
        'Shipping': round(shipping_sq_ft, 0),
        'Circulation': round(circulation_sq_ft, 0),
        'Value_Added': value_added_sq_ft,
        'Support': round(support_sq_ft, 0),
        'Total': round(total_sq_ft, 0)
    }

    return breakdown

# Example
sizing = warehouse_sizing(
    storage_positions=5000,
    storage_type='selective',
    receiving_docks=10,
    shipping_docks=15,
    value_added_sq_ft=5000
)

print("Warehouse Space Breakdown:")
for area, sq_ft in sizing.items():
    print(f"  {area}: {sq_ft:,.0f} sq ft")

print(f"\nTotal warehouse size: {sizing['Total']:,.0f} sq ft")
処理能力の分析
def throughput_capacity(storage_positions, picks_per_day, orders_per_day,
                       lines_per_order=5, pick_rate_per_hour=100):
    """
    Analyze warehouse throughput capacity

    Parameters:
    - storage_positions: Total pallet positions
    - picks_per_day: Daily pick volume (lines)
    - orders_per_day: Daily order volume
    - lines_per_order: Average lines per order
    - pick_rate_per_hour: Picks per person per hour

    Returns:
    - Capacity analysis and labor requirements
    """

    # Labor calculations
    picks_per_day = orders_per_day * lines_per_order
    hours_per_day = 16  # Assume 2-shift operation
    pickers_needed = picks_per_day / (pick_rate_per_hour * hours_per_day)

    # Receiving capacity (pallets per dock per day)
    pallets_per_dock_day = 80  # Industry average
    receiving_capacity = pallets_per_dock_day  # per dock

    # Shipping capacity (orders per dock per day)
    orders_per_dock_day = 100  # Depends on order size
    shipping_capacity = orders_per_dock_day  # per dock

    return {
        'picks_per_day': picks_per_day,
        'pickers_needed': round(pickers_needed, 1),
        'receiving_pallets_per_dock': pallets_per_dock_day,
        'shipping_orders_per_dock': orders_per_dock_day
    }

# Example
capacity = throughput_capacity(
    storage_positions=5000,
    picks_per_day=0,  # Will calculate
    orders_per_day=2000,
    lines_per_order=5,
    pick_rate_per_hour=100
)

print(f"Daily picks: {capacity['picks_per_day']}")
print(f"Pickers needed: {capacity['pickers_needed']}")

倉庫レイアウト設計

レイアウトの種類

1. U字型フロー

  • 入荷と出荷を同じ側に配置する
  • コンパクトな敷地面積
  • 小規模施設に適している
  • クロスドッキングが容易

2. 直線型(Iフロー)

  • 一方の端に入荷、反対側の端に出荷を配置する
  • 長細い建物に適している
  • 後戻りを最小限に抑える
  • 入荷と出荷を明確に分離する

3. L字型フロー

  • 一方の側に入荷、隣接する側に出荷を配置する
  • 角地に適している
  • フロー効率は中程度

4. T字型フロー

  • 一方の側で入荷し、出荷を二方向に分ける
  • 複数の出荷エリアに対応できる
  • フローが複雑になる
機能別ゾーン
def design_functional_zones(total_sq_ft, order_profile='mixed'):
    """
    Allocate space to functional zones

    order_profile: 'pallet', 'case', 'each', 'mixed'
    """

    # Space allocation percentages by order profile
    allocations = {
        'pallet': {
            'Reserve_Storage': 0.50,
            'Forward_Pick': 0.10,
            'Receiving': 0.12,
            'Shipping': 0.15,
            'Value_Added': 0.03,
            'Support': 0.10
        },
        'each': {
            'Reserve_Storage': 0.35,
            'Forward_Pick': 0.25,
            'Receiving': 0.10,
            'Shipping': 0.15,
            'Value_Added': 0.05,
            'Support': 0.10
        },
        'mixed': {
            'Reserve_Storage': 0.40,
            'Forward_Pick': 0.20,
            'Receiving': 0.12,
            'Shipping': 0.15,
            'Value_Added': 0.05,
            'Support': 0.08
        }
    }

    profile_alloc = allocations.get(order_profile, allocations['mixed'])

    zones = {
        zone: round(total_sq_ft * pct, 0)
        for zone, pct in profile_alloc.items()
    }

    return zones

# Example
zones = design_functional_zones(200000, order_profile='mixed')
print("Functional Zone Allocation:")
for zone, sq_ft in zones.items():
    print(f"  {zone}: {sq_ft:,.0f} sq ft ({sq_ft/sum(zones.values())*100:.1f}%)")

保管システムの選定

保管システムの比較
システム密度選択性FIFO/LIFOコスト最適な用途
セレクティブラック低100%どちらも可$出荷頻度が高い製品、SKU数が多い場合
ダブルディープ中50%LIFO$$出荷頻度が中程度、SKUをペアで保管する場合
ドライブイン/ドライブスルー高10-20%LIFO/FIFO$$出荷頻度が低い製品、SKU数が少なく在庫量が多い場合
プッシュバック高25-30%LIFO$$$処理量が多く、SKU数が限られている場合
パレットフロー高100%FIFO$$$$出荷頻度が高く、日付管理が必要な製品
自動AS/RS非常に高い100%どちらも可$$$$$処理量が非常に多く、労働力が限られている場合
保管システムの選定ロジック
def select_storage_system(sku_velocity, sku_diversity, fifo_required=False,
                         space_constraint=False):
    """
    Recommend storage system based on operational requirements

    Parameters:
    - sku_velocity: 'fast', 'medium', 'slow'
    - sku_diversity: 'high' (>1000 SKUs), 'medium' (100-1000), 'low' (<100)
    - fifo_required: True if FIFO needed (perishables, date-coded)
    - space_constraint: True if space is at premium
    """

    recommendations = []

    if sku_diversity == 'high':
        if sku_velocity == 'fast':
            recommendations.append({
                'system': 'Selective Racking',
                'reason': 'High SKU count requires full selectivity',
                'priority': 1
            })
            if space_constraint:
                recommendations.append({
                    'system': 'Narrow Aisle (VNA)',
                    'reason': 'Increases density for high SKU count',
                    'priority': 2
                })
        else:
            recommendations.append({
                'system': 'Selective Racking',
                'reason': 'Full selectivity for diverse SKU mix',
                'priority': 1
            })

    elif sku_diversity == 'medium':
        if sku_velocity == 'fast':
            recommendations.append({
                'system': 'Pallet Flow Rack',
                'reason': 'FIFO, high velocity, moderate SKU count',
                'priority': 1 if fifo_required else 2
            })
            recommendations.append({
                'system': 'Push-Back Rack',
                'reason': 'Dense storage, good throughput',
                'priority': 2 if fifo_required else 1
            })
        else:
            recommendations.append({
                'system': 'Double-Deep',
                'reason': 'Good density with reasonable selectivity',
                'priority': 1
            })

    else:  # low SKU diversity
        if space_constraint:
            recommendations.append({
                'system': 'Drive-In Racking',
                'reason': 'Maximum density for low SKU count',
                'priority': 1 if not fifo_required else 2
            })
            if fifo_required:
                recommendations.append({
                    'system': 'Drive-Through Racking',
                    'reason': 'Dense FIFO for low SKU count',
                    'priority': 1
                })

    # Sort by priority
    recommendations.sort(key=lambda x: x['priority'])

    return recommendations

# Example
recs = select_storage_system(
    sku_velocity='fast',
    sku_diversity='high',
    fifo_required=True,
    space_constraint=True
)

print("Storage System Recommendations:")
for rec in recs:
    print(f"  {rec['priority']}. {rec['system']}: {rec['reason']}")
ラック構成の計算
def rack_configuration(clear_height_ft, load_height_ft=5, load_depth_ft=4,
                      aisle_width_ft=12, rack_depth='single'):
    """
    Calculate rack configuration and capacity

    Parameters:
    - clear_height_ft: Building clear height
    - load_height_ft: Height per pallet level
    - load_depth_ft: Depth per pallet position
    - aisle_width_ft: Aisle width for equipment
    - rack_depth: 'single', 'double', 'back-to-back'
    """

    # Calculate number of levels (leave clearance for sprinklers/lights)
    usable_height = clear_height_ft - 4  # 4 ft clearance
    levels = int(usable_height / load_height_ft)

    # Rack bay width (typically 96-108 inches for 2 pallets side-by-side)
    bay_width_ft = 9  # 2 x 42" pallets + structure

    # Calculate positions per bay
    if rack_depth == 'single':
        positions_per_bay = 2  # 2 pallets wide
        depth_ft = load_depth_ft + 2  # Structure
    elif rack_depth == 'double':
        positions_per_bay = 4  # 2 deep x 2 wide
        depth_ft = (load_depth_ft * 2) + 2
    elif rack_depth == 'back-to-back':
        positions_per_bay = 4  # 2 racks back to back, 2 wide each
        depth_ft = (load_depth_ft * 2) + 3  # Shared structure

    # Positions per bay
    positions_per_bay_total = positions_per_bay * levels

    # Linear feet required per bay (includes aisle)
    linear_ft_per_bay = bay_width_ft

    # Calculate density (positions per 1000 sq ft)
    sq_ft_per_bay = bay_width_ft * (depth_ft + aisle_width_ft)
    positions_per_1000_sqft = (positions_per_bay_total / sq_ft_per_bay) * 1000

    return {
        'levels': levels,
        'positions_per_bay': positions_per_bay_total,
        'bay_width_ft': bay_width_ft,
        'depth_ft': depth_ft,
        'sq_ft_per_bay': round(sq_ft_per_bay, 1),
        'positions_per_1000_sqft': round(positions_per_1000_sqft, 1)
    }

# Example
config = rack_configuration(
    clear_height_ft=32,
    load_height_ft=5,
    aisle_width_ft=12,
    rack_depth='single'
)

print(f"Rack levels: {config['levels']}")
print(f"Positions per bay: {config['positions_per_bay']}")
print(f"Density: {config['positions_per_1000_sqft']} positions per 1000 sq ft")

マテリアルハンドリング機器の選定

機器の種類と仕様

1. カウンターバランスフォークリフト

  • 揚高:15~20 ft
  • 通路幅:12~13 ft
  • 用途:入荷、出荷、低層保管
  • コスト:$25K~$40K

2. リーチトラック

  • 揚高:25~35 ft
  • 通路幅:8~10 ft
  • 用途:セレクティブラック、保管効率の向上
  • コスト:$35K~$50K

3. 非常に狭い通路(VNA)/ターレットトラック

  • 揚高:35~45 ft
  • 通路幅:5~6.5 ft
  • 用途:最大密度、多数の SKU
  • コスト:$60K~$100K+
  • ワイヤーガイダンスと平坦な床が必要です

4. オーダーピッカー

  • 揚高:25~35 ft
  • 用途:各個/ケースピッキング、作業者が商品まで移動する方式
  • コスト:$40K~$70K

5. 無人搬送車(AGV)

  • 揚高:可変
  • 用途:格納、補充、商品から作業者への搬送
  • コスト:1台あたり$100K~$200K
def select_material_handling_equipment(storage_height_ft, aisle_budget='medium',
                                       throughput_level='medium',
                                       automation_interest=False):
    """
    Recommend material handling equipment

    Parameters:
    - storage_height_ft: How high storage needs to go
    - aisle_budget: 'tight' (<8 ft), 'medium' (8-12 ft), 'wide' (>12 ft)
    - throughput_level: 'low', 'medium', 'high'
    - automation_interest: Considering automation?
    """

    recommendations = []

    if storage_height_ft <= 15:
        recommendations.append({
            'equipment': 'Counterbalance Forklift',
            'aisle_width': '12-13 ft',
            'cost': '$25K-$40K',
            'reason': 'Low height, versatile, lowest cost'
        })

    elif storage_height_ft <= 30:
        if aisle_budget == 'tight':
            recommendations.append({
                'equipment': 'Very Narrow Aisle (VNA)',
                'aisle_width': '5-6.5 ft',
                'cost': '$60K-$100K',
                'reason': 'Maximum space utilization, tight aisles'
            })
        else:
            recommendations.append({
                'equipment': 'Reach Truck',
                'aisle_width': '8-10 ft',
                'cost': '$35K-$50K',
                'reason': 'Good balance of cost and density'
            })

    else:  # > 30 ft
        recommendations.append({
            'equipment': 'VNA or Automated AS/RS',
            'aisle_width': '5-6.5 ft or N/A',
            'cost': '$60K+ or $2M+ system',
            'reason': 'Required for very high storage'
        })

    if automation_interest and throughput_level == 'high':
        recommendations.append({
            'equipment': 'Automated Storage/Retrieval (AS/RS)',
            'aisle_width': 'N/A',
            'cost': '$2M-$10M+ system',
            'reason': 'High throughput, labor savings, accuracy'
        })

    return recommendations

# Example
equipment = select_material_handling_equipment(
    storage_height_ft=28,
    aisle_budget='medium',
    throughput_level='medium',
    automation_interest=False
)

print("Material Handling Equipment Recommendations:")
for eq in equipment:
    print(f"\n  {eq['equipment']}")
    print(f"    Aisle width: {eq['aisle_width']}")
    print(f"    Cost: {eq['cost']}")
    print(f"    Reason: {eq['reason']}")

ドックと入荷/出荷の設計

ドックドアの算出
def calculate_dock_doors(inbound_trucks_per_day, outbound_trucks_per_day,
                        hours_of_operation=10, dwell_time_hours=2,
                        utilization_target=0.80):
    """
    Calculate required dock doors

    Parameters:
    - inbound_trucks_per_day: Daily truck arrivals
    - outbound_trucks_per_day: Daily truck departures
    - hours_of_operation: Working hours per day
    - dwell_time_hours: Hours per truck at dock (unload/load time)
    - utilization_target: Target dock utilization (0.80 = 80%)
    """

    # Capacity per dock door per day
    door_capacity = hours_of_operation / dwell_time_hours

    # Receiving doors needed
    receiving_doors_raw = inbound_trucks_per_day / door_capacity
    receiving_doors = receiving_doors_raw / utilization_target

    # Shipping doors needed
    shipping_doors_raw = outbound_trucks_per_day / door_capacity
    shipping_doors = shipping_doors_raw / utilization_target

    return {
        'receiving_doors': int(np.ceil(receiving_doors)),
        'shipping_doors': int(np.ceil(shipping_doors)),
        'total_doors': int(np.ceil(receiving_doors + shipping_doors)),
        'receiving_utilization': receiving_doors_raw / np.ceil(receiving_doors),
        'shipping_utilization': shipping_doors_raw / np.ceil(shipping_doors)
    }

# Example
doors = calculate_dock_doors(
    inbound_trucks_per_day=50,
    outbound_trucks_per_day=70,
    hours_of_operation=16,  # 2 shifts
    dwell_time_hours=2,
    utilization_target=0.80
)

print(f"Receiving doors needed: {doors['receiving_doors']}")
print(f"Shipping doors needed: {doors['shipping_doors']}")
print(f"Total dock doors: {doors['total_doors']}")
print(f"Receiving utilization: {doors['receiving_utilization']:.1%}")
print(f"Shipping utilization: {doors['shipping_utilization']:.1%}")
ドックの構成

設計上の考慮事項:

  • ドック間隔:中心間で12 ft(標準)
  • ドック奥行き:荷さばきエリアとして60~80 ft
  • 転回スペース:53'トレーラーの場合は130~150 ft
  • ドライブインドック:省スペースですが、処理能力は低下します
  • クロスドック:入荷エリアと出荷エリアを近接させる必要があります

ピッキング経路とスロッティングの設計

移動距離の算出
def calculate_pick_travel_distance(orders_per_day, lines_per_order,
                                  avg_travel_per_pick_ft=150,
                                  picker_speed_ft_per_min=200):
    """
    Calculate picker travel distance and time

    Parameters:
    - orders_per_day: Daily order volume
    - lines_per_order: Average order lines
    - avg_travel_per_pick_ft: Average travel distance per pick
    - picker_speed_ft_per_min: Walking/driving speed
    """

    picks_per_day = orders_per_day * lines_per_order

    # Total travel distance
    total_travel_ft = picks_per_day * avg_travel_per_pick_ft
    total_travel_miles = total_travel_ft / 5280

    # Travel time
    travel_time_min = total_travel_ft / picker_speed_ft_per_min
    travel_time_hours = travel_time_min / 60

    # If picks per hour = 100, calculate labor needed
    pick_time_hours = picks_per_day / 100

    total_labor_hours = pick_time_hours + travel_time_hours

    return {
        'picks_per_day': picks_per_day,
        'total_travel_miles': round(total_travel_miles, 1),
        'travel_time_hours': round(travel_time_hours, 1),
        'pick_time_hours': round(pick_time_hours, 1),
        'total_labor_hours': round(total_labor_hours, 1),
        'pickers_needed_single_shift': round(total_labor_hours / 8, 1)
    }

# Example
travel = calculate_pick_travel_distance(
    orders_per_day=2000,
    lines_per_order=5,
    avg_travel_per_pick_ft=150,
    picker_speed_ft_per_min=200
)

print(f"Daily picks: {travel['picks_per_day']}")
print(f"Daily travel: {travel['total_travel_miles']} miles")
print(f"Travel time: {travel['travel_time_hours']} hours")
print(f"Pickers needed: {travel['pickers_needed_single_shift']}")
ゴールデンゾーンへの配置

原則:

  • 回転率の最も高い商品を、最も取り出しやすい場所に配置します
  • 「ゴールデンゾーン」:ラックの前面で、腰から肩までの高さ
  • 垂直方向と水平方向の移動を最小限に抑えます

実装: 詳細なアルゴリズムについては、warehouse-slotting-optimization スキルを参照してください


自動化とテクノロジー

倉庫の自動化オプション

1. コンベヤーシステム

  • 用途:ゾーン間で商品を移動します
  • コスト:直線距離1 ftあたり$200~$500
  • ROI:2~4年

2. 仕分けシステム

  • 用途:注文/カートンをレーン/配送先別に仕分けます
  • 種類:スライディングシュー、クロスベルト、チルトトレイ
  • コスト:$500K~$3M+
  • 処理能力:1時間あたり5K~30K+ユニット

3. 自動保管・検索システム(AS/RS)

  • 用途:高密度保管、高処理能力
  • 種類:ミニロード、ユニットロード、シャトルシステム
  • コスト:$2M~$20M+
  • ROI:3~7年

4. 商品から作業者への搬送(GTP)

  • 用途:ピッカーの移動をなくします
  • 種類:垂直リフトモジュール、水平カルーセル、シャトルシステム
  • コスト:$500K~$5M+
  • ピッキング率:1人1時間あたり200~400+明細行

5. ロボティクス

  • 種類:AMR(自律移動ロボット)、ピッキングロボット、パレタイジングロボット
  • コスト:1台あたり$50K~$200K
  • 拡張性:必要に応じて追加・削除できます

6. 無人搬送車(AGV)

  • 用途:パレット/コンテナを移動します
  • コスト:1台あたり$100K~$200K
  • インフラ(ワイヤー/磁石またはLiDAR)が必要です
def automation_roi_analysis(current_labor_cost, automation_cost,
                           labor_savings_pct, maintenance_cost_annual,
                           years=5):
    """
    Calculate ROI for warehouse automation

    Parameters:
    - current_labor_cost: Annual labor cost ($)
    - automation_cost: Upfront automation investment ($)
    - labor_savings_pct: Labor reduction (e.g., 0.40 for 40%)
    - maintenance_cost_annual: Annual maintenance ($)
    - years: Analysis period
    """

    annual_savings = current_labor_cost * labor_savings_pct
    annual_net_savings = annual_savings - maintenance_cost_annual

    # Simple payback period
    payback_years = automation_cost / annual_net_savings

    # NPV calculation (assume 10% discount rate)
    discount_rate = 0.10
    npv = -automation_cost
    for year in range(1, years + 1):
        npv += annual_net_savings / ((1 + discount_rate) ** year)

    # ROI
    total_savings = annual_net_savings * years
    roi = (total_savings - automation_cost) / automation_cost

    return {
        'automation_cost': automation_cost,
        'annual_labor_savings': round(annual_savings, 0),
        'annual_maintenance': maintenance_cost_annual,
        'annual_net_savings': round(annual_net_savings, 0),
        'payback_years': round(payback_years, 2),
        'npv_5_year': round(npv, 0),
        'roi_5_year': round(roi, 2)
    }

# Example
roi = automation_roi_analysis(
    current_labor_cost=2_000_000,   # $2M annual labor
    automation_cost=4_000_000,      # $4M automation investment
    labor_savings_pct=0.50,         # 50% labor reduction
    maintenance_cost_annual=200_000, # $200K annual maintenance
    years=5
)

print(f"Automation cost: ${roi['automation_cost']:,.0f}")
print(f"Annual labor savings: ${roi['annual_labor_savings']:,.0f}")
print(f"Annual net savings: ${roi['annual_net_savings']:,.0f}")
print(f"Payback period: {roi['payback_years']} years")
print(f"5-year NPV: ${roi['npv_5_year']:,.0f}")
print(f"5-year ROI: {roi['roi_5_year']:.1%}")

倉庫のKPIとパフォーマンス

主要業績評価指標
def warehouse_kpis(total_sq_ft, storage_sq_ft, occupied_positions,
                   total_positions, throughput_units, labor_hours,
                   orders_shipped, order_accuracy_pct):
    """
    Calculate warehouse performance KPIs
    """

    # Space utilization
    space_utilization = occupied_positions / total_positions

    # Inventory density
    inventory_density = occupied_positions / (storage_sq_ft / 1000)

    # Productivity
    units_per_labor_hour = throughput_units / labor_hours

    # Order accuracy
    order_accuracy = order_accuracy_pct / 100

    # Operating cost per unit (example)
    # Would need cost inputs for full calculation

    kpis = {
        'Space_Utilization_%': round(space_utilization * 100, 1),
        'Inventory_Density_per_1000sqft': round(inventory_density, 1),
        'Units_per_Labor_Hour': round(units_per_labor_hour, 1),
        'Order_Accuracy_%': round(order_accuracy * 100, 2),
        'Orders_per_Labor_Hour': round(orders_shipped / labor_hours, 1)
    }

    return kpis

# Example
kpis = warehouse_kpis(
    total_sq_ft=200000,
    storage_sq_ft=120000,
    occupied_positions=4200,
    total_positions=5000,
    throughput_units=50000,
    labor_hours=500,
    orders_shipped=2000,
    order_accuracy_pct=99.5
)

print("Warehouse KPIs:")
for metric, value in kpis.items():
    print(f"  {metric}: {value}")

ツールとライブラリ

設計・シミュレーションソフトウェア

CAD/レイアウトツール:

  • AutoCAD:倉庫の2D/3Dレイアウト
  • SketchUp:3Dビジュアライゼーション
  • Warehouse Blueprint:オンライン倉庫設計
  • SmartDraw:倉庫レイアウトのテンプレート

シミュレーション:

  • FlexSim:3Dシミュレーションモデリング
  • AnyLogic:マルチメソッドシミュレーション
  • Simio:プロセスシミュレーション
  • Arena:離散イベントシミュレーション
  • SimPy(Python):離散イベントシミュレーションライブラリ

分析:

  • Excel/Python:容量の算出、ROI分析
  • Tableau/Power BI:パフォーマンスダッシュボード

よくある課題と解決策

課題:高さの活用不足

問題:

  • 保管密度が低い
  • 立方フィート単位の空間を無駄にしています
  • 有効高が30 ft以上あるのに、10~15 ftしか使っていません

解決策:

  • より高いラック(セレクティブまたはVNA)を設置します
  • リーチトラックまたはオーダーピッカーを使用します
  • ピッキング用の中二階を設置します
  • 最大密度を実現するため、AS/RSを検討します
課題:ピッカーの移動距離が長すぎる

問題:

  • 生産性が低い
  • 人件費が高い
  • ピッカーが1日に何マイルも移動します

解決策:

  • 回転率に基づくスロッティングを実施します(warehouse-slotting-optimizationを参照)
  • ゾーンピッキングまたはバッチピッキングの戦略を採用します
  • 商品から作業者への自動搬送を導入します
  • ピッキング経路を最適化します
  • 回転率の高い商品向けの前方ピッキング場所を設けます
課題:ドックの混雑

問題:

  • トラックの待機、滞留料金の発生
  • 入荷・出荷のボトルネック
  • 予約スケジュールの不備

解決策:

  • 処理能力が不足している場合は、ドックドアを増設する
  • ドック予約システム(YMS)を導入する
  • クロスドッキングを利用して保管を省く
  • 入荷業務と出荷業務を分離する
  • 予約を一日を通して分散させる
課題:季節による取扱量の変動

問題:

  • ピーク時に合わせた施設が、閑散期には十分に活用されない
  • ピーク時の取扱量に対応できない
  • 臨時労働者の確保が難しい

解決策:

  • 柔軟な保管設備(折りたたみ式ラック、仮設設備)を活用する
  • 3PL パートナーと連携して、あふれた在庫の保管スペースを確保する
  • 自動化の規模を調整する(AMR を追加・撤去する)
  • 従業員に複数の業務を習得させる
  • 平均的な取扱量に合わせて設計し、あふれた分には別の保管戦略を利用する
課題:注文プロファイルの混在

問題:

  • パレット単位の注文と単品単位の注文が混在している
  • 両方に最適化するのが難しい
  • プロセスを分けると非効率になる

解決策:

  • 注文タイプごとに倉庫のゾーンを分ける
  • パレットピッキングエリアと単品ピッキングエリアを分ける
  • 複数方式に対応する自動化を利用する
  • 注文タイプごとに異なるピッキング戦略を採用する
  • プロファイルが大きく異なる場合は、施設を分けることを検討する

出力形式

倉庫設計レポート

エグゼクティブサマリー:

  • 倉庫の規模と構成
  • 保管容量(パレット保管位置数)
  • 処理能力(単位数/日、注文数/日)
  • 必要な設備投資額
  • 運用コストの見積もり

施設仕様:

仕様値
総床面積250,000 sq ft
有効天井高32 ft
保管面積150,000 sq ft
パレット保管位置数6,500
入荷ドックドア数12
出荷ドックドア数18
保管システムセレクティブラック(80%)、プッシュバックラック(20%)
マテリアルハンドリング機器リーチトラック(6)、カウンターバランスフォークリフト(4)

レイアウト図:

  • 機能別ゾーンを示した平面図
  • マテリアルフロー図
  • ラック配置と通路構成

処理能力分析:

指標設計処理能力ピーク処理能力(1.2x)
保管位置数6,5007,800(床置き保管を含む)
日次処理量100,000 単位120,000 単位
一日あたりの注文数3,0003,600
入荷(パレット/日)800960
出荷(トラック/日)90108

投資概要:

カテゴリコスト
建物(新築の場合)$12M
ラックシステム$2.5M
マテリアルハンドリング機器$800K
コンベヤー/仕分けシステム$1.5M
IT システム(WMS など)$500K
設備投資合計$17.3M

運用コスト(年間):

カテゴリコスト
人件費$4.5M
賃借料/減価償却費$2.0M
光熱費$400K
メンテナンス$300K
年間合計$7.2M

単位あたりのコスト: 出荷単位あたり $0.72


確認事項

追加の情報が必要な場合:

  1. 必要な処理能力はどの程度ですか?(単位数/日、注文数/日、注文プロファイル)
  2. SKU 数と出荷頻度の分布はどのようになっていますか?
  3. 今後 3~5 年間の成長予測はどの程度ですか?
  4. 候補地は決まっていますか?制約条件はありますか?(広さ、形状、有効天井高)
  5. 注文プロファイルはどのようなものですか?(パレット、ケース、単品、混在)
  6. 特別な要件はありますか?(温度管理、危険物、セキュリティ)
  7. 自動化への意向と予算はどの程度ですか?
  8. グリーンフィールドですか、ブラウンフィールドですか(既存の建物)?

関連スキル

  • warehouse-slotting-optimization:倉庫内の商品配置を最適化する
  • warehouse-automation:自動化システムを詳しく解説する
  • order-fulfillment:ピッキング、梱包、出荷業務を設計する
  • facility-location-problem:倉庫の立地を決定する
  • picker-routing-optimization:ピッキング経路を最適化する
  • dock-door-assignment:ドックのスケジュールを最適化する
  • cross-docking:通過型オペレーションを設計する
  • warehouse-location-optimization:ネットワーク全体で倉庫の配置を最適化する

コメント