======================================================================== リファクタリング計画 (Refactoring Plan) ======================================================================== 0. 方針 (Policy) ------------------------------------------------------------------------ ・処理の変更は一切行わない.構造の整理のみを目的とする. ・各フェーズ完了後に必ずテストを実施し,動作が変わっていないことを確認してから次へ進む. ・テストの具体的な手順は `TEST_01_テスト仕様.txt` を参照する. 1. 現状の問題点 (Current Issues) ------------------------------------------------------------------------ `CameraBase.cs` に以下の責務が集中している. ・カメラ制御の抽象定義(Connect/Disconnect/Shot) ・チャート検出(ArUco マーカー検出,ホモグラフィ計算,マスク生成) ・色補正処理(TCC行列計算,多項式拡張,画像変換) ・ファイル I/O(CSV読み書き,保存フォルダ生成,撮影情報出力) ・サウンド再生 2. 目標とするディレクトリ構成 (Target Structure) ------------------------------------------------------------------------ TIASshot/ ├── Cameras/ ← カメラ制御(CameraBase, IScam, Lucam) ├── ChartDetection/ ← チャート検出(CameraBaseから分離) ├── ColorCorrection/ ← 色補正・TCC計算(CameraBaseから分離) ├── UI/ ← フォーム(Form1, PreviewMonitor) ├── Config.cs ← 設定ファイル読み込み(変更なし) ├── LightSource.cs ← 光源制御(変更なし) └── Program.cs ← エントリポイント(変更なし) 3. フェーズ構成 (Phases) ------------------------------------------------------------------------ 3-1. フェーズ1: フォルダ整理とファイル移動 ■ 作業内容 ・以下のフォルダを作成し,既存ファイルを移動する. - `Cameras/` ← CameraBase.cs, IScam.cs, Lucam.cs - `UI/` ← Form1.cs, Form1.Designer.cs, Form1.resx, PreviewMonitor.cs, PreviewMonitor.Designer.cs, PreviewMonitor.resx ・名前空間(namespace)はそのまま `TIASshot` で統一する. ・ファイルの中身は変更しない. ■ テスト ・ビルドが成功することを確認する. ・アプリが起動し,カメラが接続されることを確認する(手動). 3-2. フェーズ2: 色補正処理の分離 ■ 作業内容 ・`ColorCorrection/` フォルダを作成する. ・CameraBase から以下を新クラス `ColorCorrector` に切り出す. - フィールド: `TCC_SRGB`, `TCC_XYZ`, `ChannelList`, `ExtendChannels`, `UpdateRate` - メソッド: `ExtendMat`, `CalcConvertMatrix`, `ConvertColor`, `ConvertImage` - メソッド: `CalcTcc`(チャート RGB 値の受け取りと行列計算・保存を担当) ・CameraBase は `ColorCorrector` を保持し,処理を委譲する. ■ テスト ・ビルドが成功することを確認する. ・回帰テスト: 同一入力画像から算出した変換行列が,リファクタリング前と一致することを確認する. - 具体的な手順は `TEST_01_テスト仕様.txt` の「2. 回帰テスト」を参照する. 3-3. フェーズ3: チャート検出処理の分離 ■ 作業内容 ・`ChartDetection/` フォルダを作成する. ・CameraBase から以下を新クラス `ChartDetector` に切り出す. - フィールド: `ARDict`, `PointsDst40`, `PointsDst41`, `_detectionCount`, `_lastPosition` - メソッド: `DetectChart` - 出力: チャートマスクリスト(`List`)を戻り値または引数で渡す ・CameraBase は `ChartDetector` を保持し,処理を委譲する. ■ テスト ・ビルドが成功することを確認する. ・回帰テスト: 保存済みの実画像を入力として,チャートマスクの位置が一致することを確認する. - 具体的な手順は `TEST_01_テスト仕様.txt` の「3. チャート検出テスト」を参照する. 3-4. フェーズ4: ファイル I/O・サウンドの分離 ■ 作業内容 ・CameraBase から以下をユーティリティクラスとして切り出す(配置先は `Cameras/` または新フォルダ). - `LoadMatFromCsv`, `SaveMatToCsv` - `SetSaveFolder`, `WriteInfo` - `EventSound` ■ テスト ・ビルドが成功することを確認する. ・撮影からファイル保存までの一連の動作を手動で確認する. ・保存された CSV・画像の内容がリファクタリング前と一致することを確認する. 4. 共通ルール (Common Rules) ------------------------------------------------------------------------ ・各フェーズは独立したブランチではなく,`refactor/code-cleanup` ブランチ上で順に進める. ・フェーズ完了ごとにコミットする.コミットメッセージは `[clean]` タグを使用する. - 例: `[clean] 色補正処理を ColorCorrector クラスに分離` ・テストが通らない場合は,次のフェーズに進まない.