Newer
Older
TIASshot / docs / 05_PLAN / PLAN_01_リファクタリング計画.txt
========================================================================
リファクタリング計画 (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<Mat>`)を戻り値または引数で渡す
    ・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 クラスに分離`
・テストが通らない場合は,次のフェーズに進まない.