# μBIM — open BIM-JSON format · v1.0.0

**μBIM** (pronounced *mu-bim* / ミューBIM) は、住宅・小規模建築の設計情報を
1 つの JSON ファイルにテキストで完全に表現する、open-source BIM フォーマットです。

- License: **MIT**
- File extension: `.bim.json`
- MIME type: `application/vnd.ubim+json`
- Official site: <https://bim.house/spec>
- JSON Schema (Draft 2020-12): <https://bim.house/spec/v1.json>
- Reference implementation: <https://github.com/yukihamada/tsugi> (Rust, Axum)

## 設計哲学

1. **テキスト first** — 人間が読み書きできる、`git diff` で意図がわかる。
2. **content-addressed** — 同じ建物 → 同じハッシュ。BIM のバージョン管理を git に任せる。
3. **append-only friendly** — 過去のリビジョンは消えない。設計の歴史が保存される。
4. **permit-grade by default** — 採光・換気・建ぺい率・容積率・斜線・構造の自動検査が走る最小情報を全要素が持つ。
5. **vendor neutral** — Revit / ArchiCAD / Rhino / Three.js / IFC 4 とのコンバーター必須。
6. **長期生存性** — 100 年後も読める形式。バイナリ依存ゼロ。

## ファイル全体構造

```json
{
  "$schema": "https://bim.house/spec/v1.json",
  "spec_version": "1.0.0",
  "project": {
    "slug": "famous-soluna-kumaushi",
    "name": "SOLUNA KUMAUSHI 天空の道場",
    "address": "北海道川上郡標茶町 字熊牛原野 4 線",
    "lat": 43.31, "lng": 144.55,
    "site_area_m2": 200.0,
    "lot_w_m": 14.0, "lot_d_m": 14.0,
    "zoning": "都市計画区域外",
    "proposed_floors": 1,
    "proposed_structure": "SIPs + ヒノキ床",
    "construction_jpy": 4800000,
    "fetched_at": "2026-05-13"
  },
  "elements": [ /* see Element schema */ ],
  "audit": { /* optional, generated by engine */ }
}
```

`elements` 配列が主体。`project` は metadata、`audit` は後付けで houki engine が書き込む。

## Element schema

各要素は **box** または **cylinder** の最小ジオメトリ + IFC class + 物理属性で構成。

```json
{
  "id": "e1",
  "cls": "IFCWALL",
  "label": "南面 外壁",
  "descr": "SIPs t=200, U=0.20 W/m²K, 焼杉サイディング",
  "shape": "box",
  "x": 0, "y": 0, "z": 0,
  "w": 9100, "d": 200, "h": 3300,
  "rotation": 0.0,

  // permit-grade 属性 (v1 から optional、v2 で required になる予定)
  "material": {
    "code": "SIPS",
    "name": "Structural Insulated Panel",
    "thickness_mm": 200,
    "u_value_w_m2k": 0.20,
    "fire_rating_min": 60,
    "f_star": "F4"
  },
  "structural": {
    "load_bearing": true,
    "axial_capacity_kn": 250
  },
  "floor": 1
}
```

### 必須フィールド (v1.0)

| フィールド | 型 | 説明 |
|---|---|---|
| `id` | string | 一意識別子。`e1`, `e2`, ... が慣習。 |
| `cls` | string | IFC 4 クラス名 (大文字)。下表参照。 |
| `label` | string | 表示名 (日本語可)。viewer で表示。 |
| `shape` | `"box"` \| `"cylinder"` | 基本形状。 |
| `x`, `y`, `z` | int (mm) | 原点からの座標。地面 z=0、東 x+、北 y+、上 z+。 |
| `w`, `d`, `h` | int (mm) | 寸法。box は幅×奥行×高、cylinder は w=radius, d=0, h。 |

### Optional フィールド

| フィールド | 型 | 説明 |
|---|---|---|
| `descr` | string | 補足説明・素材詳細・歴史的注釈・建築家署名。 |
| `rotation` | float (rad) | Z 軸まわり回転 (右手系)。 |
| `material` | object | 部材物性 (下表)。 |
| `structural` | object | 構造属性 (下表)。 |
| `floor` | int | 階数 (1=1F, 2=2F, B1=-1)。 |

### material object

| フィールド | 型 | 例 |
|---|---|---|
| `code` | string | RC / SIPS / CLT / WOOD / GLASS / STEEL / CMU / EARTH / SHO-SUGI 等 |
| `name` | string | 「鉄筋コンクリート」「Cor-Ten 鋼板」 |
| `thickness_mm` | int | 部材厚 (壁・床・屋根・パネル) |
| `u_value_w_m2k` | float | 熱貫流率。HEAT20 G2=0.34, G3=0.23 が目安。 |
| `fire_rating_min` | int | 耐火等級 (30/45/60/90/120 分) |
| `f_star` | `"F4"` \| `"F3"` \| `"F2"` \| `"F1"` | シックハウス F☆☆☆☆ 等級 |

### structural object

| フィールド | 型 | 説明 |
|---|---|---|
| `load_bearing` | bool | 耐力壁か否か |
| `axial_capacity_kn` | float | 軸圧縮許容 (柱・耐力壁) |
| `shear_capacity_kn_m` | float | せん断耐力 (耐力壁、kN/m) |
| `seismic_grade` | `"1"` \| `"2"` \| `"3"` | 耐震等級 (建物全体は project レベル) |

## IFC classes (v1 で対応)

| Class | 役割 | houki engine 解釈 |
|---|---|---|
| `IFCSITE` | 敷地境界 | site_area_m2 推定に使用 |
| `IFCWALL` | 壁 (外周/間仕切) | 建築面積カウント (1F 外壁) |
| `IFCSLAB` | 床スラブ (各階) | 床面積カウント |
| `IFCROOF` | 屋根 | 雨仕舞、外皮 U 値計算 |
| `IFCWINDOW` | 開口 | **採光・換気計算** の窓面積源 |
| `IFCDOOR` | ドア | 避難計算で利用 (v2) |
| `IFCBEAM`, `IFCCOLUMN` | 梁・柱 | 構造計算 (v2) |
| `IFCSTAIR` | 階段 | 避難距離計算 (v2) |
| `IFCRAILING` | 手摺 | 落下防止チェック (v2) |
| `IFCFURNISHINGELEMENT` | 家具・設備 | 法規対象外 (装飾) |
| `IFCBUILDINGELEMENTPROXY` | 屋外オブジェクト (樹木・PV・hearth) | 法規対象外 (敷地内造作) |
| `IFCMEMBER` | その他構造部材 | 構造計算対象 (v2) |

★ **法規対象/対象外の境界は明確に**: 屋外のデッキ・engawa・植栽・PV・hearth は `IFCBUILDINGELEMENTPROXY` を使うと床面積に算入されない。インドアの床は `IFCSLAB` のみ。

## 座標系

- 原点: 敷地南西角 (北緯+方向に北、東経+方向に東、地面 z=0)
- 単位: mm
- 回転: ラジアン、Z 軸まわり右手系 (上から見て反時計回り)

## houki engine 検査ルール (v1 — 6 項目)

| 検査 | 算出 | 基準 |
|---|---|---|
| 建ぺい率 | 1F `IFCWALL` 外周面積 ÷ site_area | zoning に応じ 30-70% |
| 容積率 | 全 `IFCSLAB` 面積 ÷ site_area | zoning に応じ 50-500% |
| 北側斜線 | 北面最高高 vs 真北線 | 第1/2 種低層: 5m + 1.25x |
| 道路斜線 | 道路面最高高 vs 道路境界 | 1.25-1.5x |
| 採光率 | `IFCWINDOW` 面積 ÷ 床面積 | ≥ 1/7 (居室) |
| 換気率 | 開口可能面積 ÷ 床面積 | ≥ 1/20 |

## v2 拡張予定 (確認申請完全対応)

- 隣地斜線 (1.5m+1.25x for 1低)
- 避難距離 (居室 → 屋外出口 ≤ 30m)
- 二方向避難 (居室 50㎡ 超で必須)
- 防火地域・準防火地域 (耐火構造 60/45 分)
- シックハウス F☆☆☆☆ 24h 換気
- 省エネ計算 UA 値・ηAC 値
- 構造計算: 壁量計算 (4分割法、N値計算)
- 設備容量計算 (給排水・電気・換気)

## 4 つの公式サンプル

それぞれ <https://bim.house/spec/samples/> で `.bim.json` をダウンロード可。

1. **minimal-cabin** — 6㎡ INSTANT (最小)
2. **dojo-45** — KUMAUSHI 道場 45㎡
3. **family-house-100** — 標準木造 2 階建 96㎡
4. **school-renovation** — 旧奥春別小学校 1,152㎡ (廃校改修)

## 既存フォーマットとの関係

| Format | 関係 |
|---|---|
| **IFC 4** (.ifc) | μBIM ⇄ IFC コンバーター必須。class 名は IFC 4 準拠。 |
| **glTF 2.0** | viewer (Three.js) 内部表現。エクスポート可。 |
| **DXF / DWG** | 平面図生成時にエクスポート。 |
| **STEP / IGES** | 工場製作 (CNC) 用に変換可。 |

## 建築士署名 + 改竄検証 (Integrity & Sign-off)

確認申請レベルで信頼するために、μBIM ファイルは **建築士の Ed25519 電子署名** を持てます。

### `signatures` array

```json
{
  "$schema": "https://bim.house/spec/v1.json",
  "spec_version": "1.0.0",
  "project": { ... },
  "elements": [ ... ],
  "signatures": [
    {
      "signer": {
        "name": "濱田優貴",
        "kenchikushi_class": "一級建築士",
        "kenchikushi_number": "東京都 第000000号",
        "organization": "株式会社イネブラ"
      },
      "alg": "Ed25519",
      "pubkey": "MCowBQYDK2VwAyEA...",
      "signed_at": "2026-05-13T14:23:00+09:00",
      "scope": "design-of-record",
      "hash_alg": "SHA-256",
      "digest": "9f3a7c1e...",
      "signature": "MEUCIQDx...=="
    }
  ]
}
```

### 検証プロトコル

1. ファイル全体から `signatures` フィールドを除外
2. 残りを **canonical JSON** に変換 (RFC 8785 / JCS、キーソート + 空白なし)
3. SHA-256 ハッシュ計算 → `digest` と一致確認
4. `pubkey` で `signature` を Ed25519 検証 → 全ペイロード integrity OK

```bash
# CLI で検証
curl -s https://bim.house/api/spec/verify \
  -X POST -H "Content-Type: application/vnd.ubim+json" \
  --data-binary @my-design.bim.json
# → { "valid": true, "signer": { "name": "濱田優貴", "kenchikushi": "一級 東京都 第000000号" }, ... }
```

### `scope` の意味

| 値 | 意味 |
|---|---|
| `design-of-record` | 設計責任を負う (建築士法 18 条 設計図書) |
| `peer-review` | 第三者レビュー (構造・省エネ・設備等の追加検証) |
| `audit` | houki engine 自動検査の結果に対する確認 |
| `draft` | 草案 (法的責任なし、改訂用) |

### 改竄が起きた場合

検証 fail で `valid: false` + 差分を返す。

```json
{
  "valid": false,
  "reason": "digest mismatch",
  "expected": "9f3a7c1e...",
  "actual":   "8b2d5a90...",
  "differs_in": ["elements[42].h", "project.zoning"]
}
```

### 鍵管理

- 建築士は自身の Ed25519 鍵ペアを保管 (推奨: hardware key, e.g. YubiKey)
- 公開鍵は bim.house の建築士登録 (`/architects/<kenchikushi_number>`) に紐付け公開
- 私鍵は bim.house に保存しない (E2E、ユーザー自己管理)

### 連名署名 (multi-sig)

複数の建築士・構造設計者・設備設計者が並列に署名できる。`signatures` 配列に各々が追加。

```json
"signatures": [
  { "scope": "design-of-record", "signer": { "name": "濱田優貴", "kenchikushi_class": "一級建築士" }, ... },
  { "scope": "peer-review",       "signer": { "name": "○○構造設計事務所", "kenchikushi_class": "構造設計一級建築士" }, ... },
  { "scope": "peer-review",       "signer": { "name": "△△設備事務所", "kenchikushi_class": "設備設計一級建築士" }, ... }
]
```

## バージョニング

- セマンティック (MAJOR.MINOR.PATCH)
- v1.x.y は既存 element の `id/cls/shape/x/y/z/w/d/h` を**絶対に変更しない**
- v2 で permit-grade 属性が required になる可能性 (それまでは optional)

## 寄稿・問い合わせ

- GitHub Issues: <https://github.com/yukihamada/tsugi/issues>
- 設計者: 濱田優貴 (株式会社イネブラ) — `mail@yukihamada.jp`

---

★ All BIM data in <https://bim.house> is MIT-licensed and uses μBIM v1.
