概要
BOM(Bill of Materials:部品表)とは、製品を構成するすべての部品・材料・コンポーネントを階層的にリストアップした文書のことである。組み込み機器の開発において、BOMは設計・調達・製造・コスト管理のすべての基盤となる最重要文書の一つである。
BOMには以下の情報が記載される。
| 項目 | 説明 |
|---|---|
| RefDes(参照番号) | 回路図上の部品識別子(R1、C3、U5など) |
| 部品名称 | 部品の一般名称(抵抗、コンデンサ、MCUなど) |
| MPN(Manufacturer Part Number) | メーカー型番(品質保証の基準) |
| メーカー名 | 部品メーカー名 |
| 数量 | 1台あたりの使用数量 |
| 実装指定 | 実装(Mount)/ 非実装(DNP/DNI)の別 |
| 代替品 | 代替可能な他社品の型番 |
| 調達先 | 承認済みサプライヤー |
| 単価 | 量産ロット時の単価(見積ベース) |
歴史・背景
BOM(部品表)の概念自体は製造業全般に古くから存在するが、電子機器分野でのBOMが重要性を増したのは、1970〜80年代に電子部品の種類と数量が爆発的に増加してからである。
当初はExcelスプレッドシートによる管理が主流であったが、製品の複雑化とともにPDM(Product Data Management)やPLM(Product Lifecycle Management)ツールが登場し、BOMのバージョン管理・変更管理・承認フローが体系化された。
組み込み機器向けには、KiCadやAltium Designerなどの回路CADツールから直接BOMを出力する機能が標準化されており、設計データとBOMの整合性が保たれるようになっている。
近年はRoHS規制(有害物質使用制限)、REACH規制(化学物質管理)、紛争鉱物規制(Dodd-Frank法)などへの対応として、BOMに環境・法規制情報を統合管理する動きが広まっている。
技術仕様
BOMの階層構造
複雑な組み込み機器では、BOMが階層構造を持つ。
製品BOM(トップレベル)
├── PCB ASSY(基板アセンブリ)
│ ├── 電子部品(R/C/L/IC)
│ ├── コネクタ類
│ └── 機構部品(スペーサー、ネジ)
├── 筐体ASSY(ケースアセンブリ)
│ ├── 上ケース(射出成型品)
│ ├── 下ケース(射出成型品)
│ └── ガスケット(防水部品)
├── ケーブルハーネス
└── 付属品(ACアダプタ、取説)
BOMフォーマットの例
実際のBOMはCSV/Excelで管理されることが多い。
RefDes,Value,MPN,Manufacturer,Qty,Package,Mount,Alt_MPN,Supplier,Unit_Price
U1,STM32F405RGT6,STM32F405RGT6,ST,1,LQFP64,Y,,DigiKey,620
U2,ESP32-WROOM-32E,ESP32-WROOM-32E,Espressif,1,SMD,Y,,Mouser,380
C1,100nF 50V X5R,GRM188R61H104KA93D,Murata,1,0603,Y,GRM188R61H104KA93J,DigiKey,12
C2,100nF 50V X5R,GRM188R61H104KA93D,Murata,1,0603,Y,,DigiKey,12
R1,10k 1% 1/10W,RC0603FR-0710KL,Yageo,1,0603,Y,RK73H1ETTP1002F,DigiKey,5
R2,DNP,,,1,0603,N,,,0
L1,10uH 1A,LQH32CN100K23L,Murata,1,1210,Y,,DigiKey,85
J1,USB Type-C,USB4125-GF-A,GCT,1,SMD,Y,,DigiKey,120
EBOM vs MBOM
BOMには目的によって2種類がある。
| 種類 | 名称 | 目的 | 管理者 |
|---|---|---|---|
| EBOM | Engineering BOM | 設計・電気的仕様の管理 | 設計エンジニア |
| MBOM | Manufacturing BOM | 製造工程・実装の管理 | 製造エンジニア |
EBOMは回路CADから出力され、MBOMは製造工程の観点(実装順序、工程分割など)で再構成される。
動作原理
BOM生成の自動化
KiCadなどの回路CADツールでは、回路図からBOMを自動生成できる。
# KiCad BOM生成スクリプトの例(bom_csv_grouped.py)
import csv
import sys
from pathlib import Path
def generate_bom(netlist_file, output_file):
"""
KiCadネットリストからBOMを生成する
同一MPN部品をグループ化してRefDesをまとめる
"""
# コンポーネント一覧の読み込み
components = parse_kicad_netlist(netlist_file)
# MPN単位でグループ化
grouped = {}
for comp in components:
mpn = comp.get('MPN', comp['value'])
if mpn not in grouped:
grouped[mpn] = {
'MPN': mpn,
'Value': comp['value'],
'Manufacturer': comp.get('Manufacturer', ''),
'Package': comp['footprint'],
'RefDes': [],
'Qty': 0,
'DNP': comp.get('DNP', 'N') == 'Y'
}
grouped[mpn]['RefDes'].append(comp['ref'])
grouped[mpn]['Qty'] += 1
# CSV出力
with open(output_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=[
'RefDes', 'Qty', 'Value', 'MPN', 'Manufacturer', 'Package', 'Mount'
])
writer.writeheader()
for mpn, data in sorted(grouped.items()):
writer.writerow({
'RefDes': ', '.join(sorted(data['RefDes'])),
'Qty': data['Qty'],
'Value': data['Value'],
'MPN': data['MPN'],
'Manufacturer': data['Manufacturer'],
'Package': data['Package'],
'Mount': 'N' if data['DNP'] else 'Y'
})
print(f"BOM generated: {len(grouped)} line items")
コスト計算
BOMを基にした原価計算(BOM Costing)は量産採算性の評価に使われる。
def calculate_bom_cost(bom_csv, quantity=1000):
"""
量産ロット数に応じたBOM原価計算
部品は数量が多いほど単価が下がる(スケールメリット)
"""
total_cost = 0
cost_breakdown = []
with open(bom_csv) as f:
reader = csv.DictReader(f)
for row in reader:
if row['Mount'] == 'N': # DNP部品は除外
continue
# 数量割引を考慮した単価取得
unit_price = get_quantity_price(row['MPN'], quantity)
line_cost = unit_price * int(row['Qty'])
total_cost += line_cost
cost_breakdown.append({
'RefDes': row['RefDes'],
'MPN': row['MPN'],
'Qty': row['Qty'],
'Unit': unit_price,
'Total': line_cost
})
print(f"BOM Cost at {quantity} units: ¥{total_cost:.0f}/unit")
print(f"Total for {quantity} units: ¥{total_cost * quantity:.0f}")
return total_cost, cost_breakdown
用途・ユースケース
量産時の部品調達管理
量産時にはBOMをベースに全部品の調達を管理する。特に以下の観点でBOM管理が重要となる。
調達管理における BOM 活用:
1. 長納期部品の早期発注
- リードタイム52週以上: MCU・FPGAなど半導体
- リードタイム26週以上: 特殊コンデンサ・コイル
2. EOL(製品寿命終了)部品の代替品確保
- 設計段階で代替品をBOMに記載しておく
3. ロット管理・入荷検査
- 部品ロット番号のトレーサビリティ管理
4. 在庫管理
- 最低在庫水準(安全在庫)の設定
コストダウン活動
BOMはコストダウン活動(VE:Value Engineering)の出発点でもある。
コストダウン検討項目:
- 高コスト部品の代替品探索
- 部品の統合(複数部品を1部品に統合)
- DNP部品の削除(不要機能の廃止)
- 別機種との部品共通化
- 海外調達品への切り替え
RoHS/REACHコンプライアンス対応
欧州向け輸出には有害物質に関する規制への対応が必要であり、BOM上でコンプライアンス情報を管理する。
環境規制BOM管理項目:
- RoHS対応可否(鉛/水銀/カドミウムなど6物質)
- REACH SVHC(高懸念物質)含有確認
- 紛争鉱物(タンタル/スズ/タングステン/金)の原産地確認
- 梱包材のハロゲンフリー対応
実装・開発のポイント
BOMのバージョン管理
BOMはGit等でバージョン管理するか、PLMツールで変更履歴を管理する。設計変更(ECO:Engineering Change Order)発行のたびにBOMを更新し、過去バージョンを保持することが重要である。
BOMバージョン管理のベストプラクティス:
- バージョン番号をファイル名に含める(bom_v1.2.3.csv)
- 変更箇所をチェンジログに記録する
- EBOM → MBOM の変換ルールを文書化する
- リリースBOMにはフリーズ(変更禁止)処理を行う
共通部品ライブラリの構築
設計チームで共通の部品ライブラリを構築することで、BOMの品質と調達効率が向上する。
# 部品ライブラリの管理構造例(JSON)
component_library = {
"R_0603_10K": {
"description": "チップ抵抗 10kΩ 1% 1/10W 0603",
"primary_mpn": "RC0603FR-0710KL",
"primary_maker": "Yageo",
"alternate_mpn": ["RK73H1ETTP1002F"], # KOA Speer
"package": "0603",
"rohs": True,
"approved": True,
"stock_min": 5000 # 安全在庫数量
},
"C_0603_100NF_50V": {
"description": "積層セラミックコンデンサ 100nF 50V X5R 0603",
"primary_mpn": "GRM188R61H104KA93D",
"primary_maker": "Murata",
"alternate_mpn": ["CL10B104KA8NNNC"], # Samsung
"package": "0603",
"rohs": True,
"approved": True,
"stock_min": 10000
}
}
設計段階での調達性確認
設計段階でOctopart・DigiKey・Mouserなどの在庫APIを活用し、部品の調達可能性をリアルタイムで確認する。
import requests
def check_availability(mpn, quantity_needed):
"""
Octopart APIで部品の在庫・価格を確認
"""
url = "https://octopart.com/api/v4/rest/parts/search"
params = {
"apikey": "YOUR_API_KEY",
"q": mpn,
"include[]": "offers"
}
response = requests.get(url, params=params)
data = response.json()
if not data['results']:
return {"available": False, "reason": "Not found"}
part = data['results'][0]['item']
total_stock = sum(
offer['inventory_level']
for seller in part.get('sellers', [])
for offer in seller.get('offers', [])
)
return {
"available": total_stock >= quantity_needed,
"total_stock": total_stock,
"needed": quantity_needed,
"surplus": total_stock - quantity_needed
}
他技術との比較
| 観点 | BOM | CAD部品ライブラリ | ERP部品マスタ |
|---|---|---|---|
| 対象 | 製品単位の部品一覧 | 設計用部品定義 | 購買・在庫管理 |
| 管理者 | 設計/製造エンジニア | 設計エンジニア | 購買/生産管理 |
| ツール | Excel/PLM/CAD | KiCad/Altium | SAP/Oracle |
| 変更頻度 | 製品ライフサイクル中 | 設計時 | 都度更新 |
| 主な用途 | 調達・製造・コスト管理 | 回路設計 | 購買・在庫 |
BOMはEMSへ量産を委託する際に最初に提出する基礎資料であり、BOMの品質が量産の成否を大きく左右する。また試作段階から正確なBOMを維持管理することが、スムーズな量産移行につながる重要な実践である。