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

敷地と外構を書いて建蔽率・容積率を出す

敷地を記述に加え、koyu site で敷地面積・接道・建築面積・建蔽率・容積率を出す。

koyu は敷地を宣言された数値としては持たない。建蔽率も容積率も、書かれた敷地と書かれた建物から導かれる。宣言できるのは測量由来の二つ — 敷地面積 (area:) と敷地形状 (polygon) — だけで、どちらも導出値と照合される。

以下の出力例のファイルパスは、実際には絶対パスで出る。読みやすさのためファイル名だけに縮めてある。

前提

  • 建物側が koyu check エラー0で通っていること。
  • 測量図から、敷地面積 (㎡) と敷地形状の頂点座標 (mm) が読めること。
  • 道路の幅員 (mm) が分かっていること。

1. 敷地の外を方角・性格ごとに割る

/out を一つの空間にせず、道路・隣地ごとの exterior に割る。道路には幅員を road: (mm) で付けるsite はこの印を見て接道を探す。

space /out/road exterior name:南側道路 road:6000
space /out/n exterior name:北側隣地
space /out/e exterior name:東側隣地
space /out/w exterior name:西側隣地

2. 敷地ゾーンを宣言する

敷地は site:1 を持つ zone である。測量値の敷地面積は area: (㎡) に書く。

zone /site name:敷地 site:1 area:154.00

3. 地上の外部空間で建物の周りをタイルする

敷地ゾーンの配下に、庭・通路・駐車場を実在の空間として置く。レベルは地上階を明示する (level:L1)。建物と合わせて敷地を隙間なく覆えば、polygon が無くても導出面積が正しく出る。

space /site/garden garden X1-2000..X2+2000 Y1-3000..Y1 level:L1 name:南庭
space /site/west yard X1-2000..X1 Y1..Y2+3000 level:L1 name:西側通路
space /site/east yard X2..X2+2000 Y1..Y2+3000 level:L1 name:東側通路
space /site/north yard X1..X2 Y2..Y2+3000 level:L1 name:北側通路

4. 敷地内の外部空間から隣地・道路へ境界を書く

この手順を飛ばすと庭が建築面積に算入される。庭も通路も、型が exterior ではない領域つき空間である。屋外だと判定されるのは外部に対して openair:1 の境界を持つときだけで、これは宣言ではなく導出である。塀・フェンスは air:1 で書く。

boundary /site/garden /out/road edge:S t:120 spec:ブロック塀 air:1 h:1200
  door w:900 name:門扉
boundary /site/garden /out/w edge:W t:120 spec:ブロック塀 air:1 h:1200
boundary /site/west /out/n edge:N t:120 spec:ブロック塀 air:1 h:1200

領域を持たない空間 (/out 配下の exterior はふつうそう) との組には既定境界が導かれない。どの外部に面しているかは名指しが情報だからで、外周の空間から一本ずつ書く。外周が複数の辺に分かれるときは edge: で辺を選ぶ — N=+Y・S=−Y・E=+X・W=−X。

敷地内の外部空間どうしは連続しているので type:open で結ぶ。

boundary /site/garden /site/west type:open
boundary /site/west /site/north type:open

5. 敷地形状を polygon で書く

測量図の実形が要るときは polygon を書く。この記法で唯一、格子に載らない自由頂点で形を書ける行である — 敷地の形は測量由来の所与であって、設計の生成物ではない。頂点は x,y の mm 座標をグリッドと同じ座標系で3つ以上、site:1 のゾーンパスに対応させる。

polygon /site -2000,-3000 9000,-3000 9000,11000 -2000,11000

polygon は隔離した層に置くとよい。所与のジオメトリと設計の記述を混ぜないための運用で、同梱の tower はこの形をとっている (examples/tower/site-geometry.muro は宣言が polygon 1 行だけの層である)。文法は polygon にある。

確かめる

koyu 1.0
name 敷地つきの平屋
unit mm

grid X 0 7000
grid Y 0 8000
level L1 0 h:2400 slab:150
level R 2700 slab:150

# 敷地の外 — 方角・性格ごとに割る。道路は road:幅員 (mm)
space /out/road exterior name:南側道路 road:6000
space /out/n exterior name:北側隣地
space /out/e exterior name:東側隣地
space /out/w exterior name:西側隣地

# 敷地 — site:1 のゾーンと、その配下の地上の外部空間
zone /site name:敷地 site:1 area:154.00
space /site/garden garden X1-2000..X2+2000 Y1-3000..Y1 level:L1 name:南庭
space /site/west yard X1-2000..X1 Y1..Y2+3000 level:L1 name:西側通路
space /site/east yard X2..X2+2000 Y1..Y2+3000 level:L1 name:東側通路
space /site/north yard X1..X2 Y2..Y2+3000 level:L1 name:北側通路

space /L1/ldk ldk X1..X2 Y1..Y2 name:LDK

boundary /L1/ldk /site/garden t:150 spec:EW
  door w:900 name:掃き出し

# 敷地内の外部空間どうしは連続している
boundary /site/garden /site/west type:open
boundary /site/garden /site/east type:open
boundary /site/west /site/north type:open
boundary /site/east /site/north type:open

# 敷地境界 — 塀は air:1 (物はあるが外気を遮らない)
boundary /site/garden /out/road edge:S t:120 spec:ブロック塀 air:1 h:1200
  door w:900 name:門扉
boundary /site/garden /out/w edge:W t:120 spec:ブロック塀 air:1 h:1200
boundary /site/garden /out/e edge:E t:120 spec:ブロック塀 air:1 h:1200
boundary /site/west /out/w edge:W t:120 spec:ブロック塀 air:1 h:1200
boundary /site/west /out/n edge:N t:120 spec:ブロック塀 air:1 h:1200
boundary /site/east /out/e edge:E t:120 spec:ブロック塀 air:1 h:1200
boundary /site/east /out/n edge:N t:120 spec:ブロック塀 air:1 h:1200
boundary /site/north /out/n edge:N t:120 spec:ブロック塀 air:1 h:1200

polygon /site -2000,-3000 9000,-3000 9000,11000 -2000,11000
$ npx tsx src/cli.ts check site.muro
✔ Consistent — 9 spaces / 16 boundaries
  Structural consistency only — architectural validity is what koyu validate says, separately
$ npx tsx src/cli.ts site site.muro
Site /site (敷地)
  Site shape: polygon with 4 vertices (a polygon declaration — given geometry)
  Site area: declared 154.00 m2 / derived 154.00 m2
  Road: /out/road (南側道路) width 6000mm / frontage 11000mm
  Building footprint (horizontal projection, rough): 56.00 m2 → building coverage ratio 36.4%
  Total floor area: 56.00 m2 → floor area ratio 36.4%

読み方は次のとおり。

出所
Site shapepolygon の頂点数。無いときはこの行が出ない
Site area — declaredzone /sitearea: (測量値)
Site area — derivedpolygon があればシューレース、無ければ敷地配下の空間と屋内の水平投影の合併
Road敷地ゾーン配下の空間と road: 付き exterior との境界線分長の合計。建物の外壁が道路に面していても接道ではない
Building footprint屋内空間の水平投影の合併
ratios建築面積 ÷ 敷地面積、延べ面積 ÷ 敷地面積

site の終了コードは、敷地ゾーンがあるとき0、無いとき1である。

手順4を飛ばすと建築面積が倍になる

隣地への塀の境界7本を落とすと、check は緑のまま建築面積が倍以上になる。

$ npx tsx src/cli.ts check site-nofence.muro
✔ Consistent — 9 spaces / 9 boundaries
  Structural consistency only — architectural validity is what koyu validate says, separately

$ npx tsx src/cli.ts site site-nofence.muro
Site /site (敷地)
  Site shape: polygon with 4 vertices (a polygon declaration — given geometry)
  Site area: declared 154.00 m2 / derived 154.00 m2
  Road: /out/road (南側道路) width 6000mm / frontage 11000mm
  Building footprint (horizontal projection, rough): 121.00 m2 → building coverage ratio 78.6%
  Total floor area: 121.00 m2 → floor area ratio 78.6%

外部への境界を持たない庭は半屋外と導出されず、屋内として数えられている。

宣言と導出が食い違うとき

area: を 160.40 に変えても check は緑のままである。構成としては何も壊れていない — 測量値と多角形の食い違いは建築的な判定であり、koyu validate が言う (polygon があるときだけ照合される)。

⚠ [site.area] site-mismatch.muro:line 17: Declared and derived site areas disagree: declared 160.4 m2 / derived 154.00 m2
Validation — 0 violations / 1 caution

規則は site.area (caution)。validate --json で構造化された結果が出る。

[
{
"rule": "site.area",
"level": "caution",
"message": "Declared and derived site areas disagree: declared 160.4 m2 / derived 154.00 m2",
"line": 17,
"file": "site-mismatch.muro",
"path": [
"/site"
]
}
]

CI で止めたいのは violation であるvalidate の終了コードは violation があるときだけ 1 になる。建物が敷地形状からはみ出す site.escape と、接道長が 2m 未満の site.frontage がその二つで、どちらも 敷地の判定 にある。

同梱の例で

$ npx tsx src/cli.ts site examples/house.muro
Site /site (敷地)
  Site area: declared 126.24 m2 / derived 126.24 m2
  Road: /out/road (南側道路) width 6000mm / frontage 10280mm
  Building footprint (horizontal projection, rough): 53.00 m2 → building coverage ratio 42.0%
  Total floor area: 92.75 m2 → floor area ratio 73.5%

examples/house.muro は polygon を持たないので、敷地面積の導出は庭・通路・建物の合併から出ている。

$ npx tsx src/cli.ts site examples/tower/main.muro
Site /site (敷地)
  Site shape: polygon with 5 vertices (a polygon declaration — given geometry)
  Site area: declared 1097.80 m2 / derived 1097.80 m2
  Road: /out/road-s (南側道路) width 12000mm / frontage 40600mm
  Road: /out/road-e (東側道路) width 6000mm / frontage 20200mm
  Building footprint (horizontal projection, rough): 569.60 m2 → building coverage ratio 51.9%
  Total floor area: 4785.92 m2 → floor area ratio 436.0%

次に