diff --git "a/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" new file mode 100644 index 0000000..fe0be73 --- /dev/null +++ "b/docs/03_PLAN/PLAN_02_\351\226\213\347\231\272\343\202\271\343\203\206\343\203\203\343\203\227.md" @@ -0,0 +1,83 @@ +# 開発ステップ (Development Steps) + +[要件定義書](PLAN_01_要件定義書.md) の目的(1. 誰でもビルド・実行できる状態にする,2. 解析結果を変えずにコードを整理する)を達成するための作業順序を定める. + +## 進め方の方針 (Approach) + +- **先に「結果が変わらないこと」を確かめる手段を作り,それからコードを整理する.**回帰テスト(ステップ 3)より前には,解析結果に影響しない変更だけを行う. +- 各ステップは `/implement` で進め,ステップごとに作業ブランチを切って `main` に取り込む. + +## ステップ一覧 (Steps) + +| # | ステップ | 目的 | 解析結果への影響 | +| --- | --- | --- | --- | +| 1 | 実行に必要なファイルの取り込み | ビルドだけで実行ファイル一式が揃うようにする | なし | +| 2 | 実行を妨げる不具合の修正 | 解析を最後まで安定して回せるようにする | なし | +| 3 | テストプロジェクトと回帰テストの作成 | 整理の前後で結果が変わらないことを確かめる手段を作る | なし | +| 4 | 未使用コード・参照の削除 | 読む量を減らし,不要な依存(脆弱性のある Newtonsoft.Json 等)をなくす | なし(回帰テストで確認) | +| 5 | 解析処理の切り出しと重複の統合 | 画面から解析処理を分け,2 モードの重複(約 420 行)をなくす | なし(回帰テストで確認) | +| 6 | エラー処理とログの整備 | 失敗の原因が分かるようにする | なし(回帰テストで確認) | + +## 各ステップの内容 (Step Details) + +### 1. 実行に必要なファイルの取り込み + +- 旧ビルド出力(`DeepTIAS2.7.1-Latest`)から,ソースに無く実行に必要なファイルを取り込む + - ネイティブ DLL: `RemoveSmallRegionDLL.dll`(と依存する `opencv_world320.dll`),`TongueAnalysisDLL.dll` + - 外部 exe: `python/TongueFeatures.exe`,`rgb2lab/`(`TongueAnalysis.exe` と色補正データ,依存する OpenCV 3.4 のデバッグ版 DLL) + - 出力雛形: `template_outputDir/`,`template_outputDir_withCalib/` +- `*.exe`・`*.dll` を Git LFS の対象に加える +- csproj に「出力ディレクトリにコピー」を指定し,ビルドだけで `bin\x64\Release\` に揃うようにする +- 完了条件: clone → ビルド → 起動 → サンプル画像 1 枚を Image モードで解析し,`analysis.csv` が出力される +- ※ 旧ビルド出力はリポジトリ外にあり,Claude はフックの制限で読めない.取り込むファイルはユーザーがリポジトリ内にコピーする(コピー先と一覧は着手時に示す) + +### 2. 実行を妨げる不具合の修正 + +- 二値画像のウィンドウ(`Cv2.ImShow`・`Cv2.WaitKey`)で解析が止まる箇所を削除する +- Start を押すたびに解析処理が重複して登録される不具合を直す.モード選択を解析後に押せる状態に戻す +- 解析中の例外を `RunWorkerCompleted` で受け取り,画面に表示して操作できる状態に戻す +- Image&Calib の出力先が `Output\debug` に固定されている件は,ユーザーの判断を得てから直す([要件定義書](PLAN_01_要件定義書.md) の未決事項) +- 完了条件: 複数枚の画像を両モードで続けて解析でき,途中で止まらない + +### 3. テストプロジェクトと回帰テストの作成 + +- MSTest のテストプロジェクト `DeepTIAS.Tests` をソリューションに追加する +- サンプル画像で正解データ(`analysis.csv` と中間画像)を作り,`DeepTIAS.Tests/TestData/` に置く +- 解析を実行して正解データと比べる回帰テストを作る(両モード) +- 開発コマンド([ENV_04](../02_ENV/ENV_04_開発コマンド.md))にテストの実行コマンドを追記する +- 完了条件: 回帰テストが通り,わざと解析結果を変えると失敗する + +### 4. 未使用コード・参照の削除 + +- 使われていないファイル(`Form1 - backups.cs`,`Settings.Designer.cs`・`Settings1.Designer.cs`)を削除する +- 使われていないメソッド・フィールド・`DllImport` 宣言・`using` を削除する +- 使われていない NuGet 参照(Microsoft.ML 一式,Newtonsoft.Json,OpenCvSharp.WpfExtensions 等)と,リポジトリ外を指す参照(OpenCvSharp.Blob,v4.7.1 の絶対パス)を削除する +- 使われていないモデル `models/ResUnet_0.9518.pb` の扱いを決める(削除するか,別の場所に保管するか) + +### 5. 解析処理の切り出しと重複の統合 + +- `Form1.cs` の解析処理を,画面に依存しないクラスに切り出す(置き場所は `.claude/rules/project-structure.md`) +- Image と Image&Calib でほぼ同じ処理を 1 つにまとめ,違い(色補正の有無,雛形,チャネル)だけを分ける +- 解析結果に影響する数値を名前付きの定数にまとめる +- 切り出した処理に単体テストを追加する + +### 6. エラー処理とログの整備 + +- `.claude/rules/error-handling.md` に沿って,握りつぶしている例外をなくし,失敗の原因をダイアログとログで伝える +- 外部 exe の終了コードと出力ファイルを確認する +- 出力フォルダに `log.txt` を書き出す + +## 対象外 (Out of Scope) + +要件定義書の「やらないこと」のとおり,新機能の追加,解析手法の変更,モデルの差し替え,外部バイナリの作り直しは本計画に含めない. + +## 未決事項 (Open Questions) + +- 回帰テストの正解データを何で作るか(下記) + +### 正解データの作り方 + +配布済みの旧 exe(2021 年版)は現行ソースからビルドしたものではない(OpenCvSharp3 / .NET 4.7.1 時点のソース).そのため,旧 exe と現行ソースの解析結果が一致するとは限らない. + +- **案 A(推奨)**: ステップ 2 完了時点の現行ソースで解析した結果を正解データにする.旧 exe の結果とも比べ,差があれば記録しておく(差の原因調査は本計画の対象外) +- **案 B**: 旧 exe の結果を正解データにする.現行ソースの結果と差がある場合,整理を始める前に差の原因を調べる必要がある