メインコンテンツまでスキップ

koyu json

合成後のモデルを正準 JSON で標準出力に書く。差分と外部接続の土台であり、キーの並びは安定している。

引数

koyu json <entry.muro>

entry のパスを一つ取る。

無い。出力は常に整形済みで、標準出力へ書かれる (末尾に改行が付く以外の装飾は無い)。

出力

npx tsx src/cli.ts json examples/two-rooms.muro
{
  "format": "koyu-canonical/1.0",
  "koyu": "1.0",
  "name": "二室",
  "unit": "mm",
  "grid": {
    "X": [
      0,
      3600,
      7200
    ],
    "Y": [
      0,
      4500
    ]
  },
  "levels": {
    "L1": {
      "z": 0,
      "h": 2400,
      "slab": 150
    }
  },
  "spaces": {
    "/L1/a": {
      "type": "room",
      "at": [
        "X1",
        "Y1",
        "X2",
        "Y2"
      ],
      "attrs": {
        "daylight": 1,
        "name": "居室A"
      }
    },

(先頭の一部である。)

最初の二つのキーは別の版を言う。format はこの JSON 形式そのものの版で、koyu は原本に書かれた言語の版である。原本が koyu <版> の行を持たなければ koyu のキーは出ない。

npx tsx src/cli.ts json derived.muro
{
  "format": "koyu-canonical/1.0",
  "unit": "mm",

境界は配列で、両側のパス・種別・厚み・属性・開口を持つ。

  "boundaries": [
    {
      "between": [
        "/L1/a",
        "/L1/b"
      ],
      "a": "/L1/a",
      "kind": "wall",
      "t": 120,
      "attrs": {
        "spec": "PW1"
      },
      "openings": [
        {
          "kind": "door",
          "w": 780,
          "h": 2000,
          "at": 0.5
        }
      ]
    },

開口の at:0.5 は書かれていない値である。位置を書かなかった開口は境界の中央に置かれるので、正準 JSON はその決まった位置を書く。

import は残らない

正準 JSON は合成後の単一のモデルである。層に割った建物でも、import も層の境目も出ない。同じ建物を一枚で書いても層に割って書いても、同じ正準 JSON が出る。

over の跡も残らない。overh:2400 にした模型と、最初から h:2400 と書いた模型は同じである。正準形が答えるのは「同じ建物か」であって「どう書かれたか」ではない。

既定境界は出ない

正準 JSON が持つのは書かれた構成だけで、導出された意味は持たない。接する二室だけを書き、boundary を一行も書いていないファイルで確かめられる。

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/a room X1..X2 Y1..Y2
space /L1/b room X2..X3 Y1..Y2
npx tsx src/cli.ts check derived.muro
✔ Consistent — 2 spaces / 1 boundary
  Structural consistency only — architectural validity is what koyu validate says, separately
npx tsx src/cli.ts json derived.muro
  "boundaries": []

check の「境界 1」は導出された既定の壁を数えた意味の側の数、json の空配列は書かれた構成の側の数である。矛盾ではない。正準 JSON の消費者は、既定境界を自分で導出してから意味を読む。

終了コード

終了コード意味
0常に
1構文・合成エラーで読めなかった
2ファイルパスを渡していない (使い方が印字される)

jsoncheck を通さない。整合していないモデルでも、合成さえ通れば正準 JSON は出る。

関連

  • 正準 JSON — キーごとのリファレンスと安定性の規則
  • koyu diff — 二つのモデルを構成の言葉で比べる
  • koyu check — 導出された境界を数える側
  • 公開 API — 同じ出力をプログラムから得る