Newer
Older
SmTIAS-LightSim / .claude / rules / project-structure.md

paths: ["src/", "tests/", "scripts/**"]

プロジェクト構成ルール (Project Structure)

ソース・テスト・スクリプトを追加・移動するときは本ルールに従い,責務ごとのサブパッケージ配置を保つこと.設計の背景は docs/04_SPEC/SPEC_01_アーキテクチャ設計.md を参照する(本ルールは配置規則のみを定める).

ディレクトリ構成 (Layout)

src/sm_tias_lightsim/
├── __init__.py
├── uniformity.py          # Rec.709 輝度変換 + CoV/std/max-min(核計算)
├── cli/                   # CLI エントリポイント(render / evaluate / visualize)
├── scene/                 # YAML → Mitsuba scene(schema / builder / lights / materials / sensors)
├── geometry/              # STL 読込・単位変換・メッシュ分割(loader / transforms / subdivide)
├── render/                # Mitsuba 実行と出力(runner / output)
├── evaluation/            # 評価パイプライン(roi / zones / radial / oetf / normalize / shape_metrics / visualize …)
├── visualize/             # 3D 可視化(baker / projection / viewer)
└── runtime/               # 実行時ヘルパ(llvm_init 等)

tests/                     # src のサブパッケージ構造をミラー(testing.md 参照)
scripts/                   # 単発の調査・キャリブ・図生成スクリプト(パッケージ外)
configs/                   # シーン YAML・評価 YAML・メッシュ等(コード外の設定・入力)

配置ルール (Placement Rules)

  • 1 モジュール 1 責務: 新しい機能は責務に合うサブパッケージに置く.該当が無ければ新サブパッケージを作る(安易に既存モジュールへ肥大化させない).
  • サブパッケージ間の依存方向: cli → 各機能パッケージ → 核計算(uniformity 等)の一方向を保つ.核計算モジュールから上位(cli・visualize)を import しない.
  • 純関数を優先: 副作用(ファイル I/O・Mitsuba 実行)は render・cli・output 等の縁に寄せ,evaluation・geometry・visualize/projection 等は入力→出力の純関数として書く(テスト容易性のため.testing.md の「核計算は必ず単体テスト」と対応).
  • テストの配置: tests/ は src/sm_tias_lightsim/ のサブパッケージ構造をミラーする(詳細は .claude/rules/testing.md).
  • 調査・使い捨てコード: 恒久的に使わない単発スクリプトは src/ ではなく scripts/ に置く(パッケージの公開 API を汚さない).
  • 設定・入力データ: シーン/評価 YAML・STL・生成物は configs/ 配下に置き,コード(src/)に埋め込まない.