diff --git "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" index 7522deb..f846297 100644 --- "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" +++ "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" @@ -49,23 +49,25 @@ | 項目 | 採用技術 | 備考 | | --- | --- | --- | | OS | Windows 11 | | -| IDE | Visual Studio 2022 Community | ワークロード「.NET デスクトップ開発」「C++ によるデスクトップ開発」 | -| ビルド | MSBuild(Visual Studio 2022 付属) | コマンドラインでは `msbuild` を使う | +| ビルドツール | Visual Studio Build Tools 2022 | ワークロード「.NET デスクトップ ビルド ツール」「C++ ビルド ツール」 | +| IDE | 必須にしない(エディタは任意.VS Code 等) | 画面(`Form1.Designer.cs`)を編集するときだけ Visual Studio 2022 Community を追加する | +| ビルド | MSBuild(Build Tools 付属) | コマンドラインで `msbuild` を使う | | NuGet 復元 | `msbuild -t:restore -p:RestorePackagesConfig=true` | `nuget.exe` を別途入れずに済む | | テスト | MSTest | .NET Framework 4.8 のテストプロジェクトとして作る | | バージョン管理 | Git + Git LFS,GitHub | | ## 選定理由 (Rationale) -### IDE +### ビルドツールと IDE -- Visual Studio 2022 Community を採用する.WinForms のデザイナ(画面の見た目の編集)とデバッガが使え,C# の WinForms 開発では標準的なため. -- 「C++ によるデスクトップ開発」ワークロードも入れる.`rgb2lab\TongueAnalysis.exe` がデバッグビルドで,VC++ のデバッグ用ランタイム(`ucrtbased.dll` 等)が無いと起動しないため. -- ※ VS Code + Build Tools も候補にしたが,WinForms デザイナが使えず画面の変更時に `Form1.Designer.cs` を手で書く必要があるため不採用とした. +- Visual Studio Build Tools 2022 を採用し,IDE は必須にしない.開発計画([PLAN_02](../03_PLAN/PLAN_02_開発ステップ.md))の作業はビルド・実行・テストで足り,画面のレイアウトを変える作業が無いため. +- 「C++ ビルド ツール」ワークロードも入れる.`rgb2lab\TongueAnalysis.exe` がデバッグビルドで,VC++ のデバッグ用ランタイム(`MSVCP140D.dll`・`ucrtbased.dll` 等)が無いと起動しないため.このワークロードを入れると,デバッグ用ランタイムが `C:\Windows\System32` に入ることを確認した. +- ※ デバッグ用ランタイムは単体では配布されておらず,ライセンス上リポジトリに入れて再配布することもできない. +- ※ 画面の見た目を変えるとき(WinForms デザイナが要るとき)や,ブレークポイントを使ったデバッグをしたいときは,Visual Studio 2022 Community を追加で入れる(Build Tools と共存できる). ### テストフレームワーク -- MSTest を採用する.Visual Studio に最初から入っており,後任の学生も追加の知識なしで使えるため. +- MSTest を採用する.Visual Studio 系の標準のテストフレームワークで,Build Tools 付属のテスト実行環境でも動き,後任の学生も追加の知識なしで使えるため. - 主なテストは回帰テストとする.旧ビルドで出した `analysis.csv` を正解とし,整理後のコードで同じ入力を解析した結果が一致するかを確認する. ## 維持するもの・変えないもの (What We Keep) diff --git "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" index b925eaf..0d5dca0 100644 --- "a/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" +++ "b/docs/02_ENV/ENV_02_\347\222\260\345\242\203\346\247\213\347\257\211\346\211\213\351\240\206.md" @@ -9,16 +9,23 @@ ## 手順 (Steps) -### 1. Visual Studio 2022 Community を入れる +### 1. Visual Studio Build Tools 2022 を入れる -ワークロード「.NET デスクトップ開発」と「C++ によるデスクトップ開発」を選んでインストールする. -コマンドで入れる場合は以下を実行する. +ワークロード「.NET デスクトップ ビルド ツール」と「C++ ビルド ツール」を入れる.PowerShell で以下を実行する(管理者権限の確認が出たら許可する). ```powershell -winget install Microsoft.VisualStudio.2022.Community --override "--add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --passive" +winget install --id Microsoft.VisualStudio.2022.BuildTools --exact --override "--add Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive --norestart" ``` -- ※ 「C++ によるデスクトップ開発」は `rgb2lab\TongueAnalysis.exe`(Calib モードで使う)が必要とする VC++ のデバッグ用ランタイムを入れるために必要. +Build Tools が既に入っていて「C++ ビルド ツール」だけが無い場合は,以下で追加する. + +```powershell +& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" modify --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive --norestart +``` + +- ※ 「C++ ビルド ツール」は,`rgb2lab\TongueAnalysis.exe`(Image&Calib モードで使う)が必要とする VC++ のデバッグ用ランタイムを入れるために必要.入れると `C:\Windows\System32` に `MSVCP140D.dll`・`ucrtbased.dll` 等が入る. +- ※ 追加のコマンド(`modify`)は動作を確認済み.新規インストールのコマンド(`winget install`)は未検証. +- ※ 画面(`Form1.Designer.cs`)を WinForms デザイナで編集したいときは,Visual Studio 2022 Community を追加で入れる(`winget install --id Microsoft.VisualStudio.2022.Community --exact --override "--add Microsoft.VisualStudio.Workload.ManagedDesktop --includeRecommended --passive --norestart"`). ### 2. Git・Git LFS・GitHub CLI・Python を入れる @@ -42,12 +49,12 @@ ### 4. ビルドする -Visual Studio で `Tongue extraction.sln` を開き,構成を `Release`・プラットフォームを `x64` にしてビルドする.NuGet パッケージは初回ビルド時に自動で復元される. -コマンドでビルドする場合は [ENV_04_開発コマンド](ENV_04_開発コマンド.md) を参照する. +[ENV_04_開発コマンド](ENV_04_開発コマンド.md) のコマンドで,NuGet パッケージを復元してから構成 `Release`・プラットフォーム `x64` でビルドする. +Visual Studio 2022 Community を入れた場合は,`Tongue extraction.sln` を開いて同じ構成でビルドしてもよい(NuGet パッケージは初回ビルド時に自動で復元される). ### 5. 入力データを置いて実行する -※ Image モードは動作確認済み.Image&Calib モードは未検証(`rgb2lab\TongueAnalysis.exe` が VC++ のデバッグ用ランタイムを必要とするため,手順 1 の「C++ によるデスクトップ開発」を入れた PC で確認する) +※ Image モード・Image&Calib モードとも動作確認済み(Image&Calib は手順 1 の「C++ ビルド ツール」が必要) 実行に必要な外部バイナリ・色補正データ・出力雛形は `Tongue extraction\runtime\` にあり,ビルド時に出力フォルダへコピーされる. diff --git "a/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" "b/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" index f83a762..8b9f9f2 100644 --- "a/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" +++ "b/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" @@ -1,6 +1,6 @@ # 開発コマンド (Development Commands) -コマンドは PowerShell から実行する.`msbuild` は「Developer PowerShell for VS 2022」で使える.通常の PowerShell では `& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"` のようにフルパスで呼ぶ. +コマンドは PowerShell から実行する.`msbuild` は「Developer PowerShell for VS 2022」で使える.通常の PowerShell では `& "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe"` のようにフルパスで呼ぶ(Community を入れた場合は `C:\Program Files\Microsoft Visual Studio\2022\Community\...` でもよい). | 用途 | コマンド | | --- | --- | @@ -9,6 +9,6 @@ | 実行 | `cd "Tongue extraction\bin\x64\Release"; .\DeepTIAS2.7.exe`(作業ディレクトリを exe の場所にして起動する) | | テスト | 未定(テストプロジェクト作成後に記入) | -- ※ 復元・ビルドは Visual Studio Build Tools 2022(17.14)の MSBuild で動作を確認した.Community 版の MSBuild のパスは未検証. +- ※ 復元・ビルドは Visual Studio Build Tools 2022(17.14)の MSBuild で動作を確認した. - ※ ビルド時の警告「規則セット ファイル "MinimumRecommendedRules.ruleset" を検出できませんでした」は Build Tools に規則セットが含まれないために出るもので,ビルド結果には影響しない. -- ※ 実行は Image モードで動作を確認した.Image&Calib モードは未検証(VC++ のデバッグ用ランタイムが必要.[ENV_02](ENV_02_環境構築手順.md) 手順 1). +- ※ 実行は Image・Image&Calib の両モードで動作を確認した(Image&Calib は VC++ のデバッグ用ランタイムが必要.[ENV_02](ENV_02_環境構築手順.md) 手順 1). diff --git "a/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" "b/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" index a824202..d15c573 100644 --- "a/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" +++ "b/docs/03_PLAN/PLAN_01_\350\246\201\344\273\266\345\256\232\347\276\251\346\233\270.md" @@ -70,7 +70,7 @@ ## 制約・リスク (Constraints & Risks) - 外部バイナリにはソースが無く,不具合があっても修正できない. -- `rgb2lab\TongueAnalysis.exe` と `TongueAnalysisDLL.dll` はデバッグビルドで,Visual Studio のデバッグ用ランタイム(`ucrtbased.dll` 等)が入った PC でしか動かない可能性がある. +- `rgb2lab\TongueAnalysis.exe` と `TongueAnalysisDLL.dll` はデバッグビルドで,VC++ のデバッグ用ランタイム(`ucrtbased.dll` 等)が入った PC でしか動かない.デバッグ用ランタイムは再配布できないため,Image&Calib モードを使う PC ごとに Build Tools の「C++ ビルド ツール」等を入れる必要がある([ENV_02](../02_ENV/ENV_02_環境構築手順.md) 手順 1). - 入出力のパスが作業ディレクトリ基準(`..\Input`,`..\Output`)で固定されている. - 解析の正しさを確かめる基準は,旧 exe での実行結果しか無い. - 旧 exe と現行ソースは OpenCV のバージョンが異なる(3.2 と 4.9)ため,解析結果がずれている可能性がある.ずれの大きさと原因は比べてみるまで分からない. diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 1f0d94b..3812859 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -28,3 +28,7 @@ - 設計判断: 重複登録は「DoWork のハンドラを 1 つにして RunWorkerAsync の引数でモードを渡す」方式にした(登録を外し忘れて重複する余地が構造上無いため). - テスト・リファクタリング(`/implement` の Phase 2・3)は省略した.変更が画面操作の流れだけで,規約上画面操作は自動テストの対象外であり,テストプロジェクトはステップ 4 で作るため.整理はステップ 6 で行う. - 未実装・後段: Image&Calib の完走確認には Visual Studio 2022 Community(C++ によるデスクトップ開発)の導入が必要(ステップ 3 の前提).出力フォルダ名が 12 時間表記で午後のフォルダが午前より前に並ぶ件は未対応. + +- [x] **開発環境を Build Tools 中心に変更**: IDE(Visual Studio 2022 Community)を必須にせず,Build Tools 2022 に「C++ ビルド ツール」を追加する構成にした.これで VC++ のデバッグ用ランタイムが入り,Image&Calib モードが最後まで動くことを確認した. + - 設計判断: 開発計画にはビルド・実行・テストの作業しか無く,画面のレイアウトを変える予定が無いため,十数 GB の IDE を必須にしない.画面を編集するときだけ Community を追加する.デバッグ用ランタイムは単体配布・再配布ができないため,開発ツールとして入れるしかない. + - 発見: 旧 exe の Image&Calib 出力(`_legacy\Output\20260818030340`)と比べると,色補正(`LabCsv`)はバイト単位で一致したが,舌検出の矩形が 1〜2 画素ずれ,以降の 304 列中 253 列がずれていた(中央値で約 1%).ステップ 3 で原因を調べる.比べた旧出力が 2021 年 12 月版の exe によるものかは未確認のため,ステップ 3 で旧 exe を改めて実行する.