JSON データ構造の仕様
最終更新: 2026-09-23 / 対象: spec-platform/v1
4 つのエディタが保存・読み込みする JSON の構造です。仕様を公開しているので、 エディタを使わずにデータを作っても構いません。
このページは、人が読むためだけでなく AI に読ませるために書いています。 「この仕様に従って JSON を作って」と頼めば、手元の Excel や仕様書から作図できます。 逆に、エディタで作った JSON を貼って「この仕様の意味で矛盾を探して」と頼むこともできます。 実際の手順は AI に仕様書を描かせる にまとめました。
1. 共通の外枠
4 つとも、先頭に「何のファイルか」を書きます。ここを見れば、残りの読み方が決まります。
{
"schema": "spec-platform/v1",
"kind": "timingchart",
"v": 5,
"title": "位置決め起動ハンドシェイク"
}
| 項目 | 型 | 説明 |
|---|---|---|
| schema * | string | 常に "spec-platform/v1"。この文字列がある JSON は、以下の構造に従います。 |
| kind * | string | systemdiagram / addressmap / timingchart / flowchart のいずれか。 |
| v * | number | その kind の中での版。構成図 1・アドレスマップ 2・タイミングチャート 5・フローチャート 1(2026-09 時点)。 読み込み側は、自分より古い版を受け付けます。 |
| title | string | 図や表の題名。空でも構いません。 |
id の決まり: 同じファイルの中で重複しない文字列であれば何でも構いません。
エディタは dev_01 や row_ab12x のような値を振りますが、
"PLC" のような読みやすい文字列でも動きます。
他の項目から参照されるので、後から変えないでください。
2. systemdiagram — システム構成図
機器(devices)と、その間の通信(links)で表します。
| 項目 | 型 | 説明 |
|---|---|---|
| devices[] | array | 機器。下の表を参照。 |
| links[] | array | 機器どうしの通信。下の表を参照。 |
| variables[] | array | アドレスマップへ受け渡すときに使う。空でも構いません。 |
| triggers[] | array | タイミングチャートへ受け渡すときに使う。空でも構いません。 |
devices[] の項目
| 項目 | 型 | 説明 |
|---|---|---|
| id * | string | この機器の識別子。links から参照されます。 |
| name * | string | 図に出る名前。 |
| kind | string | plc / hmi / pc / servo /
inverter / robot / io / sensor /
net / other。省略すると other。色と形が変わります。 |
| model | string | 型式(例 Q06UDHCPU)。 |
| addr | string | IP アドレスや局番。 |
| comment | string | 備考。 |
| x, y | number | 図の中の位置。省略可。省略したときは「自動整列」で並べてください。 |
| blocks[] | array | 機器の中の機能のまとまり(「指令」「状態」など)。
{ "id", "name", "comment", "varIds": [] }。
アドレスマップへ渡したときの変数の入れ物になります。 |
links[] の項目
| 項目 | 型 | 説明 |
|---|---|---|
| id * | string | この通信の識別子。 |
| from, to * | string | つなぐ機器の devices[].id。 |
| kind | string | ネットワークの種類。EtherCAT / EtherNet/IP / CC-Link IE /
PROFINET / Modbus TCP / Ethernet / RS-232C /
RS-485 / USB など、文字列をそのまま書きます。
フィールドバスは実線、シリアルは破線で描かれます。 |
| label | string | 線に添える文字(例 局番 1)。 |
| dir | string | "both"(双方向・既定)か "one"(片方向)。 |
3. addressmap — アドレスマップ
PLC のデバイス範囲(plc)と、変数の一覧(variables)で表します。
| 項目 | 型 | 説明 |
|---|---|---|
| plc | object | メーカーと機種、使えるデバイス範囲。{ "vendor", "model", "bitDev", "wordDev", "devices": [] }。
bitDev / wordDev は自動割付の既定の行き先(例 "M" と "D")。 |
| plc.devices[] | array | デバイスごとの範囲。{ "code": "D", "name": "データレジスタ", "style": "word",
"bits": 16, "radix": 10, "start": 0, "end": 12287 }。
style は bit(1 点 1 ビット)/ word(1 点 16 ビット)/
chbit(KEYENCE 式。R100 が 1 チャンネル目のビット 0)/ byte(マイコン)。
radix は番号の進数(10 か 16)。 |
| devices[] | array | 機器と、その中のブロック。{ "id", "name", "comment", "blocks": [ { "id", "name", "comment", "varIds": [] } ] }。
構成図の devices / blocks と同じ考え方です。 |
| variables[] | array | 変数の一覧。下の表を参照。 |
| settings | object | コード生成の設定。{ "structName", "iecWordIndex" }。 |
variables[] の項目
| 項目 | 型 | 説明 |
|---|---|---|
| id * | string | この変数の識別子。 |
| name * | string | 変数名(例 bStartReq)。 |
| type | string | BOOL / INT / DINT / WORD /
REAL など。IEC 61131-3 の型名をそのまま書きます。 |
| role | string | 向き。"M"(マスター側が出す)/ "S"(スレーブ側が出す)/
"I"(内部)。タイミングチャートの方向欄になります。 |
| address | string | 割り付けた先(例 M0 / D100)。
空にしておくと、エディタ側で自動割付できます。 |
| bit | number / null | ワードデバイスの中のビット番号。使わないときは null。 |
| initialValue | string | 初期値。 |
| comment | string | デバイスコメントになります。 |
| deviceId, blockId | string | どの機器・どのブロックに属するか。 |
4. timingchart — タイミングチャート
行(rows)が信号、列が Step です。波形は values[] の配列で持ちます。
| 項目 | 型 | 説明 |
|---|---|---|
| steps * | number | Step 数(列の数)。 |
| meta | object | { "title", "note", "stepMs", "master", "slave" }。
stepMs は 1 Step の時間[ms]。0 なら Step 番号だけを表示します。
master / slave は機器名で、方向欄とフローチャートのレーン名になります。 |
| rows[] | array | 信号 1 本ぶん。下の表を参照。 |
| triggers[] | array | 因果関係の矢印。{ "from": { "varId": "row_a", "step": 2 },
"to": { "varId": "row_b", "step": 3 } }。
これがこのツールの肝です。「どの信号の変化が、どの信号の変化を起こしたか」を残します。
フローチャートへ渡すと、待ちと処理の順序になります。 |
| variables[] | array | 変数の一覧(左の変数リスト)。アドレスマップと同じ項目です。 |
| edgeMode | string | 変化点の描き方。"v"(垂直)/ "s"(斜め・小)/ "l"(斜め・大)。 |
rows[] の項目
| 項目 | 型 | 説明 |
|---|---|---|
| id * | string | この行の識別子。triggers から参照されます。 |
| name * | string | 信号名。 |
| type | string | BOOL なら ON/OFF の波形、それ以外は値を表示するバスになります。 |
| role | string | "M" / "S" / "I"。variables と同じ。 |
| comment | string | 信号名の下に小さく出ます。 |
| values[] * | array | 長さは steps と同じ。BOOL は true / false、
数値・状態は文字列("1000" / "RUN")、未設定は null。 |
5. flowchart — フローチャート
記号(nodes)と、その間の線(edges)で表します。
| 項目 | 型 | 説明 |
|---|---|---|
| nodes[] | array | { "id", "type", "text", "x", "y" }。
type は start / end / process /
decision / switch / io / wait /
sub / loopStart / loopEnd / connector /
note。text の改行は \n で書きます。
x / y は省略可(「自動整列」で並べられます)。 |
| edges[] | array | { "id", "from", "port", "to" }。
port は "out"(通常の出口)/ "yes" / "no"(判断の分岐)。
判断の no を自分自身に戻すと「成立するまで待つ」ループになります。 |
| lanes[] | array | 担当の列。{ "id", "role": "M", "name": "PLC" }。
使うときは各 node に "lane": "<lanes[].id>" を持たせます。 |
| links[] | array | レーンをまたぐ信号の受け渡し(点線の矢印)。{ "id", "from", "to", "label" }。
from / to は nodes[].id。 |
| settings | object | { "yesNo": "YES/NO", "yesDir": "down", "stepNo": false, "stepStart": 10, "stepInc": 10 }。
yesDir は YES の出る向き("down" / "right")。 |
6. 最小の実例
そのままエディタの「ファイル → 開く…」で読めます。フローチャートの例です。
{
"schema": "spec-platform/v1",
"kind": "flowchart",
"v": 1,
"title": "コンベア運転",
"nodes": [
{ "id": "s", "type": "start", "text": "開始" },
{ "id": "n1", "type": "process", "text": "初期化\nMotor ← OFF" },
{ "id": "d1", "type": "decision", "text": "起動ボタン ON ?" },
{ "id": "n2", "type": "process", "text": "Motor ← ON" },
{ "id": "e", "type": "end", "text": "終了" }
],
"edges": [
{ "id": "e1", "from": "s", "port": "out", "to": "n1" },
{ "id": "e2", "from": "n1", "port": "out", "to": "d1" },
{ "id": "e3", "from": "d1", "port": "yes", "to": "n2" },
{ "id": "e4", "from": "d1", "port": "no", "to": "d1" },
{ "id": "e5", "from": "n2", "port": "out", "to": "e" }
]
}
x / y を書いていませんが、それで構いません。
座標が無いデータは、読み込んだときに自動で並べます。
位置を自分で決めたいときだけ書いてください。
貼り付けて読み込む
ファイルに保存しなくても構いません。どのエディタでも 「ファイル → JSON を貼り付けて開く…」から、本文をそのまま貼って読み込めます。 AI が返した JSON をコピーして貼るだけで図になります。
7. 読み込み側の決まり
- 知らない項目は無視します。 余分なキーを足しても壊れません。
- 足りない項目は既定値で補います。 上の表で * が付いていない項目は省略できます。
- id の参照が切れている行は読み飛ばします。 存在しない id を指す edge や trigger は捨てられます。
- 座標は無くても構いません。 自動整列で並べ直せます。
- 保存したファイルに配色や表示倍率は含まれません。人に渡しても相手の画面設定は変わりません。
8. 自分のデータを見るには
どのエディタでも 「出力 → JSON をコピー」で、保存するのと同じ中身がクリップボードに入ります。 戻すときは 「ファイル → JSON を貼り付けて開く…」。ファイルを経由せずに往復できます。 実際の形を見たいときは、サンプルを読み込んでからこれを押すのが早いです。
4 つのエディタ
- System Diagram Editor —
kind: "systemdiagram" - Address Map Editor —
kind: "addressmap" - Timing Chart Editor —
kind: "timingchart" - Flowchart Editor —
kind: "flowchart"
関連する記事
yk.builds