ここからが MeshOS DSL の本体設計になる。
あなたが「型システムを導入する」と決めた瞬間、DSL は一気に OS らしくなる。
そして UI は Three.js、実行エンジンは Flask という構成は、
まさに「OS(Flask)+デバイスドライバ/UI(Three.js)」の関係になる。
ここでは 型システムの完全設計と
Flask 側に実行エンジンを置く場合のアーキテクチャを
あなたの OS 思想に合わせてまとめる。
🧩 MeshOS DSL 型システム(最小構成で OS 的に美しい形)
型システムは 5 つの基本型 + 2 つの複合型で成立する。
H2: 1. 基本型(Primitive Types)
■ ① MESH
- 完全な 3D メッシュ
- BufferGeometry + Material に相当
TYPE MESH;
■ ② FACE_GROUP
- 面の集合
- BFS 選択や SHAPE 選択の結果
TYPE FACE_GROUP;
■ ③ VERTEX_GROUP
- 頂点の集合
TYPE VERTEX_GROUP;
■ ④ SHAPE
- 選択領域を定義する抽象形状
- almond, circle, sphere など
TYPE SHAPE;
■ ⑤ TRANSFORM_TARGET
- MOVE / SCALE / ROTATE の対象
- MESH / FACE_GROUP / VERTEX_GROUP のいずれか
TYPE TRANSFORM_TARGET;
H2: 2. 複合型(Composite Types)
■ ⑥ INSTANCE
- LinkNode に相当
- MESH の参照を持つ
TYPE INSTANCE;
■ ⑦ PATTERN
- 頂点生成のための構造(RING, GRID など)
TYPE PATTERN;
H2: 3. 型システムを使った DSL の厳密文法例
🎯 ① 連続面選択(FACE_GROUP を返す)
SELECT FACES CONNECTED FROM face_id = 120 INTO groupA:FACE_GROUP;
🎯 ② SHAPE を使った選択
CREATE SHAPE almond1:SHAPE USING ALMOND a=1.0 b=0.4 CENTER=(0,0,0);
SELECT FACES INSIDE SHAPE almond1 INTO groupB:FACE_GROUP;
🎯 ③ PATTERN から頂点生成
CREATE PATTERN r1:PATTERN USING RING COUNT=10 RADIUS=1 ON PLANE=XY;
CREATE VERTEX_GROUP vg1 FROM PATTERN r1;
🎯 ④ FACE_GROUP から MESH を生成
CREATE MESH part1:MESH FROM FACES groupA;
🎯 ⑤ MESH から INSTANCE を生成
CREATE INSTANCE inst1:INSTANCE FROM MESH part1 AT (0,0,0);
🎯 ⑥ TRANSFORM_TARGET の操作
MOVE groupA BY (0,1,0);
SCALE part1 BY (1.2,1.2,1.2);
ROTATE inst1 BY (0,45deg,0);
🧩 Flask 側に実行エンジンを置くアーキテクチャ
あなたの指定:
UI は Three.js
その他は Flask
これは OS 的に非常に正しい。
Three.js は 表示とインタラクションに専念し、
Flask は 構造・操作の実行エンジンになる。
H2: Flask 側の構造(実行エンジン)
managa/src/
├── controllers/
│ ├── dsl_api.py ← DSL のパースと実行
│ ├── mesh_api.py ← MeshOS の操作
│ └── ai_api.py ← Gemini から DSL を受け取る
├── mesh_engine/
│ ├── parser/ ← DSL パーサ(SQL 風)
│ ├── executor/ ← 型チェック + 実行
│ ├── meshos/ ← MeshNode / LinkNode / Subdivider
│ ├── selection/ ← BFS / SHAPE / PROJECTED_ON
│ └── transform/ ← MOVE / SCALE / ROTATE
H2: Three.js 側の役割(UI)
Three.js は OS のフロントエンドとして動く。
- Raycaster で faceIndex を取得
- 選択結果を Flask に送る
- Flask から返ってきた JSON を MeshOS に反映
- TransformControls の UI を提供
- LOD や InstanceMesh の描画
つまり Three.js は デバイスドライバ + UI。
H2: Flask 側の実行フロー(最小構成)
Gemini → DSL → Flask → MeshOS → Three.js
- Gemini が自然言語を DSL に変換
- Three.js が DSL を Flask に送信
- Flask の parser が DSL を AST に変換
- 型システムで型チェック
- executor が MeshOS を操作
- 結果を JSON で Three.js に返す
- Three.js が MeshOS(JS 実装)に反映
🧩 あなたの OS 思想に合わせたまとめ
あなたの OS 設計は:
- 構造(MeshOS)
- 操作(DSL)
- 実行(Flask)
- 表示(Three.js)
という 4 層構造で完全に整理される。
特に型システムを導入したことで、
DSL は SQL のように厳密で、OS のように抽象的になった。
🔥 次に決めるべきこと(あなたへの問い)
型システムを導入したので、次は DSL の「型推論」を入れるかどうか。
例:
SELECT FACES CONNECTED FROM face_id = 120 INTO groupA;
これを
groupAの型を自動で FACE_GROUP と推論する- それとも必ず
groupA:FACE_GROUPと書かせるか
どちらの方向で進めたい?