トピックの基本形:ISA-95の資産階層をなぞる
UNSのトピック階層は、ISA-95の資産モデル(Enterprise/Site/Area/Line/Cell)をなぞるのが一般的です。MQTTのトピックは「/」区切りの文字列で、購読側はワイルドカード(「+」は1階層、「#」は以下すべて)で範囲を指定できます。階層をISA-95に揃えておくと、「この工場のこのラインのすべて」「全工場の成形エリアの稼働状態」といった単位で購読できます。
基本形の例は次のとおりです。
acme/funabashi/molding/line2/press05/process/barrel_temp_zone1
acme/funabashi/molding/line2/press05/state/run_status
acme/funabashi/molding/line2/press05/mes/current_lot
acme/funabashi/molding/line2/press05/ai/defect_prediction
左から、企業・拠点・エリア・ライン・セル(設備)・データ種別・項目です。最後の2階層の切り方は後で説明します。
5つのルール
ルール1:資産階層はMESの設備マスタと一致させる
トピックのSite・Area・Line・Cellの名前は、MESの設備マスタと同じIDか、対応表で一意に変換できる名前にします。UNS独自の名前を付けると、MESのデータとAIの入力を紐付けるときに変換表が必要になり、ずれの原因になります。設備階層の統一はISA-95の4つの情報モデルでAI用データを設計するでも扱っています。
ルール2:データ種別の階層を設ける
セル(設備)の下に、データの種類を区別する階層を1つ設けます。例としては次のような分け方があります。
| 種別 | 内容 | 例 | 主な発行元 |
|---|---|---|---|
| process | プロセス値(温度・圧力・速度) | barrel_temp_zone1 | エッジ・PLC |
| state | 設備状態(稼働・停止・アラーム) | run_status, alarm_active | エッジ・SCADA |
| mes | MESの文脈(ロット・品番・作業指示) | current_lot, current_part | MES |
| quality | 検査結果・測定値 | inspection_result | 検査装置・MES |
| ai | AIの推論結果 | defect_prediction | AIアプリ |
種別を分けておくと、「AIの結果だけ」「MESの文脈だけ」を購読でき、発行元と責任者も種別ごとに決められます。
ルール3:名前・単位・形式の規約を文書化する
トピック名の文字種(英小文字・数字・アンダースコア)、区切り、単位の表し方を決めて文書にします。単位はトピック名に含めるか、ペイロードの属性に含めるかを統一します。ペイロードはJSONで、値・単位・タイムスタンプ・品質フラグを持たせるのが一般的です。
{"value": 231.5, "unit": "degC", "ts": "2026-10-12T09:15:32.120+09:00", "quality": "good"}
タイムスタンプは発生時刻(設備側で取得した時刻)とし、タイムゾーンを含めます。時刻の扱いは工場データの時刻ずれ対策で扱います。
ルール4:トピックごとに所有者を決める
各トピック(少なくとも種別単位)に、発行するシステムと内容に責任を持つ部門を決めます。processやstateは生産技術・設備保全、mesは情報システム部門または製造部門、aiはAIの運用担当です。所有者がいないトピックは、値がおかしくなっても誰も直しません。
ルール5:命令と状態を分ける
設備やシステムへの指示(命令)と、状態の通知を同じトピックに混ぜないようにします。命令を流す場合は別の種別(例:cmd)を設け、書き込める発行元をアクセス制御で限定します。AIの推論結果は「状態の通知」として発行し、MESがそれを受けてホールドなどの処理をするかを判断する形にすると、責任の所在が明確になります。
よくある失敗例
Sparkplugを使う場合のトピック
MQTTのトピック設計を自由に決める代わりに、Sparkplug(ISO/IEC 20237)を使う方法もあります。Sparkplugのトピックは spBv1.0/group_id/message_type/edge_node_id/[device_id] の形で、NBIRTH(ノードの起動通知)、DDATA(デバイスデータ)、NCMD(ノードへの命令)などのメッセージ型が決まっています。セッション状態の管理やペイロードの形式まで定義されているため、SCADAとの連携では便利ですが、ISA-95の階層をトピックで直接表すにはgroup_idやedge_node_idの命名を工夫する必要があります。Sparkplugを採用するかの判断はMQTTとSparkplugの違いで扱います。
よくある質問
日本語のトピック名は使えますか?
MQTTのトピックはUTF-8なので技術的には使えますが、ツールやログでの扱いにくさ、表記揺れのリスクから、英小文字・数字・アンダースコアに限定するのが無難です。日本語名は対応表やデータカタログで管理してください。
複数工場で同じ命名規則にすべきですか?
AIを工場横断で展開する予定があるなら統一すべきです。企業とSiteの階層だけを変えれば同じ購読設定とAIの前処理を流用できます。工場ごとに規則が違うと、横展開のたびに変換が必要になります。
既存のタグが数万点あります。すべてUNSに載せるべきですか?
必要ありません。AIやダッシュボードで使うデータから順に、命名規則に沿って載せていきます。使っていないタグまで載せると、管理の負担が増えるだけです。
この記事に出てくる用語
AIは「データ基盤」で決まる
PoCは成功したのに本番で止まる。原因の多くはモデルではなく、MESと設備データの側にある 全130本
- MESとAIの関係:ロット・作業指示・品質判定がAIの精度を決める理由
- 製造業AIが本番で止まる7つの理由:PoCは成功したのにラインに載らない構造
- 製造業のAI-OCR:紙の検査記録・点検表・ミルシートをデータ化する手順
- データ基盤の段階的導入ロードマップ:ユースケースから逆算する8ステップ
