はじめに
RedRing の幾何モジュールは、Core/Extension アーキテクチャという明確な思想に基づいて設計されています。 このアーキテクチャは、幾何形状の「本質的な機能」と「拡張機能」を分離することで、 拡張性・保守性・性能を同時に成立させるための仕組みです。
本記事では、Point2D / Point3D を例に、この Core/Extension の構造を具体的に解説します。
Core/Extension アーキテクチャとは
Core/Extension は、幾何形状の内部構造を次の2つに分ける設計思想です。
Core(幾何形状の本質)
- 点・ベクトル・曲線などの「幾何形状として成立するために最低限必要な機能」
- 軽量で純粋
- Foundation 層への依存は必要最小限に抑えられている(Scalar や軽量 Vector のみ)
- 変換・解析・行列演算などの重い処理は含めない
Extension(幾何形状の拡張機能)
- Core の上に自由に追加できる機能
- 行列変換・複合変換・解析・反射・スケール・演算子など
- Foundation 層の数学モジュール(Matrix / Vector)を直接利用
- Core を汚さずに機能を増やせる
この分離により、幾何形状は「本質」と「拡張」を明確に区別した構造になります。
Point2D を例に見る Core の構造
Point2D の Core は、geo_contracts に定義された trait によって構成されています。
Core を構成する trait
Point2DConstructorPoint2DPropertiesPoint2DDistancePoint2DInterpolation- これらを束ねる
Point2DCore
Core が提供する機能の特徴
- 座標の保持(x, y)
- 点の生成(new, origin, from_tuple)
- 座標の取得(x, y, coords, to_tuple)
- 基本的な距離計算
- 中点・補間などの基本演算
- 軽量な Vector2 との相互変換
これらは「点としての本質的な性質」であり、 幾何形状として成立するために最低限必要な機能だけが Core に含まれています。
Core の重要な性質
- 依存が軽量である
- 機能が純粋である
- Foundation 層への依存は必要最小限に抑えられている(Scalar や軽量 Vector のみ)
- 重い数学処理(Matrix3x3 など)は Extension 側に隔離されている
- Core を変更せずに拡張機能を追加できる
Point2D の Extension 機能
Core に含めない機能は、すべて Extension として実装されています。
Extension の代表例
- 行列変換(Matrix3x3)
- 複合変換(スケール → 回転 → 平行移動)
- 回転(中心点指定 / 原点)
- スケール(均等 / 非均等)
- 反射(X軸 / Y軸 / 原点)
- 3D への変換
- Vector2D との相互変換
- 近似判定
- operator overload(Add / Sub / Mul / Neg)
analysis_transform モジュールを分離している理由
1. Foundation 層の Matrix / Vector を直接使うことで高速化するため
Core に重い数学処理を混ぜると、全体の負荷が増えるため分離している。
2. Core を軽量・純粋に保つため
Core は「点としての本質」だけに限定し、重い処理は Extension に隔離する。
3. 依存方向を健全に保つため
Core → Foundation の依存を避け、 Extension → Foundation の依存に限定することで構造が安定する。
4. 拡張性を最大化するため
Extension は自由に追加できるため、 Core を変更せずに機能を増やせる。
Core/Extension のメリット
1. Core が軽量で純粋になる
幾何形状の本質だけを Core に閉じ込めることで、 依存が軽く、テストしやすく、保守しやすい構造になる。
2. Extension を自由に追加できる
行列変換・解析・演算などの機能を、 Core を壊さずに好きなだけ追加できる。
3. Foundation 層の数学処理を効率的に利用できる
Matrix3x3 や Vector2 を直接使うことで高速化できる。
4. 依存方向が明確になる
- Core → 軽量依存
- Extension → Foundation
- Foundation → Core には依存しない(重い依存を Core に持ち込まない)
5. 幾何形状の成長性が高い
Core は不変、Extension は可変という構造が、 長期的な拡張性と保守性を保証する。
まとめ
Point2D / Point3D の内部構造は、 Core(本質)と Extension(拡張)を明確に分離するアーキテクチャによって設計されています。
- Core は幾何形状として最低限必要な性質だけを持つ
- Extension は Foundation の数学モジュールを使いながら自由に拡張できる
- Core を汚さずに機能を増やせる
- 依存方向が健全で高速
- 長期的な保守性と拡張性が高い
このアーキテクチャは、RedRing の幾何モジュール全体に共通する設計思想であり、 幾何計算の柔軟性と性能を両立するための重要な基盤となっています。