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 時点)。 読み込み側は、自分より古い版を受け付けます。
titlestring 図や表の題名。空でも構いません。

id の決まり: 同じファイルの中で重複しない文字列であれば何でも構いません。 エディタは dev_01row_ab12x のような値を振りますが、 "PLC" のような読みやすい文字列でも動きます。 他の項目から参照されるので、後から変えないでください

2. systemdiagram — システム構成図

機器(devices)と、その間の通信(links)で表します。

項目説明
devices[]array機器。下の表を参照。
links[]array機器どうしの通信。下の表を参照。
variables[]arrayアドレスマップへ受け渡すときに使う。空でも構いません。
triggers[]arrayタイミングチャートへ受け渡すときに使う。空でも構いません。

devices[] の項目

項目説明
id *stringこの機器の識別子。links から参照されます。
name *string図に出る名前。
kindstring plc / hmi / pc / servo / inverter / robot / io / sensor / net / other。省略すると other。色と形が変わります。
modelstring型式(例 Q06UDHCPU)。
addrstringIP アドレスや局番。
commentstring備考。
x, ynumber図の中の位置。省略可。省略したときは「自動整列」で並べてください。
blocks[]array 機器の中の機能のまとまり(「指令」「状態」など)。 { "id", "name", "comment", "varIds": [] }。 アドレスマップへ渡したときの変数の入れ物になります。

links[] の項目

項目説明
id *stringこの通信の識別子。
from, to *stringつなぐ機器の devices[].id
kindstring ネットワークの種類。EtherCAT / EtherNet/IP / CC-Link IE / PROFINET / Modbus TCP / Ethernet / RS-232C / RS-485 / USB など、文字列をそのまま書きます。 フィールドバスは実線、シリアルは破線で描かれます。
labelstring線に添える文字(例 局番 1)。
dirstring"both"(双方向・既定)か "one"(片方向)。

3. addressmap — アドレスマップ

PLC のデバイス範囲(plc)と、変数の一覧(variables)で表します。

項目説明
plcobject メーカーと機種、使えるデバイス範囲。{ "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 }stylebit(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変数の一覧。下の表を参照。
settingsobjectコード生成の設定。{ "structName", "iecWordIndex" }

variables[] の項目

項目説明
id *stringこの変数の識別子。
name *string変数名(例 bStartReq)。
typestringBOOL / INT / DINT / WORD / REAL など。IEC 61131-3 の型名をそのまま書きます。
rolestring 向き。"M"(マスター側が出す)/ "S"(スレーブ側が出す)/ "I"(内部)。タイミングチャートの方向欄になります。
addressstring割り付けた先(例 M0 / D100)。 空にしておくと、エディタ側で自動割付できます。
bitnumber / nullワードデバイスの中のビット番号。使わないときは null
initialValuestring初期値。
commentstringデバイスコメントになります。
deviceId, blockIdstringどの機器・どのブロックに属するか。

4. timingchart — タイミングチャート

行(rows)が信号、列が Step です。波形は values[] の配列で持ちます。

項目説明
steps *numberStep 数(列の数)。
metaobject { "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変数の一覧(左の変数リスト)。アドレスマップと同じ項目です。
edgeModestring変化点の描き方。"v"(垂直)/ "s"(斜め・小)/ "l"(斜め・大)。

rows[] の項目

項目説明
id *stringこの行の識別子。triggers から参照されます。
name *string信号名。
typestringBOOL なら ON/OFF の波形、それ以外は値を表示するバスになります。
rolestring"M" / "S" / "I"。variables と同じ。
commentstring信号名の下に小さく出ます。
values[] *array 長さは steps と同じ。BOOL は true / false、 数値・状態は文字列("1000" / "RUN")、未設定は null

5. flowchart — フローチャート

記号(nodes)と、その間の線(edges)で表します。

項目説明
nodes[]array { "id", "type", "text", "x", "y" }typestart / end / process / decision / switch / io / wait / sub / loopStart / loopEnd / connector / notetext の改行は \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
settingsobject { "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. 読み込み側の決まり

8. 自分のデータを見るには

どのエディタでも 「出力 → JSON をコピー」で、保存するのと同じ中身がクリップボードに入ります。 戻すときは 「ファイル → JSON を貼り付けて開く…」。ファイルを経由せずに往復できます。 実際の形を見たいときは、サンプルを読み込んでからこれを押すのが早いです。

4 つのエディタ

関連する記事

yk.builds