oniyanma とは
橋梁点検のレビューを、ブラウザの中だけで成立させるための点群ビューアです。
数 GB の .las を単一の .copc.laz(COPC)に変換しておくと、 視界に入っている LOD ノードだけを HTTP Range で逐次取得して描画します。 496 MB の点群を開いても、ダウンロードを待つ時間はありません。 桁下を一人称で歩き、任意の 2 点間の距離を実寸 (m) で読み、 気になった範囲を非破壊で非表示・削除・分類変更できます。
同種のビューアと違うのは次の 2 点です。
1. UI も AI も MCP も、同じコマンド層を叩く
oniyanma の操作は、例外なくコマンドに集約されています。 UI のボタン、キーボードショートカット、⌘K のコマンドパレット、アプリ内の自然言語コンソール、 MCP 経由の外部エージェント——この 5 経路すべてが同じ executeCommand を通ります。
コマンドは自己記述です。名前・説明・引数の JSON Schema・読み取り専用かどうか・ 破壊的かどうかを、コマンド自身が申告します。だから
- AI に渡すツール定義は、レジストリから生成されます(手書きの API 定義がない)
- 権限は「コマンドごとの ACL 表」ではなく「どのサーフェスを開けるか」で決まります
- 破壊的操作の確認ゲートは、プロンプトの文章ではなくコマンド層の構造として存在します
- このドキュメントの引数表も同じ定義から生成されているので、実装とズレません
コマンドを 1 つ足す人が印を付けるだけで、公開面・拒否・テスト・ドキュメントが同時に追随する、 というのがこの設計の目的です。詳しくは コマンド層という設計。
2. 視点・選択・編集をその場で共有する
同じルームに入った参加者と、カメラ視点(他の人の視野を視錐台で表示)・選択範囲・非破壊編集を リアルタイムに共有します。同期は Yjs (CRDT) なので、同時に触っても壊れません。
「ここ見て」を口頭の座標説明ではなく選択範囲の共有で行えるのが要点です。 共有されるのは点の ID 一覧ではなく選択の述語(この形の中にある点、という条件)なので、 受け手の画面でも厳密に同じ点が選ばれます。Undo はユーザーごとに効き、 他人の編集を巻き込みません(Google Docs / Figma と同じ挙動)。
詳しくは 共同編集。
何を壊さないか
点検・測量の道具として、次の 2 つを最優先の不変条件にしています。
原本を書き換えない。 非表示・削除・分類変更・色上書きは、すべて Command ログとして積まれます。 GPU に載る属性は毎回そのログから再構築されるので、LOD が点を捨てて再ロードしても編集は戻ってきます。 .copc.laz そのものは一切変更されません。保存はサイドカー(別ファイル)です。
数値が黙って間違わない。 計測値は既知の答えで回帰テストに固定してあります。 座標フレームが一致しないピアの選択範囲は、ずれた枠を描くのではなく理由を表示して描画を止めます。 別データ用のサイドカーは署名の不一致として弾きます。 「エラーを出さずに間違った値が出る」が点検では最悪の失敗なので、 迷ったら止めて理由を出す側に倒しています。
構成
| パッケージ | 役割 |
|---|---|
packages/app | ビューア本体(Vite + TypeScript + three.js)。WebGL / WebGPU 併存 |
packages/collab | 協働同期サーバ(Cloudflare Workers + Durable Objects) |
packages/server | コマンド中継コーディネータ(WS)と MCP サーバ(Node) |
packages/docs | このドキュメント |
アプリはバックエンドを持たないクライアント専用構成です。点群は静的ホスティング(R2)から Range リクエストで引き、AI の API キーはブラウザから各プロバイダへ直接送ります。 協働と MCP 中継だけがサーバを必要とします。