# ビルド構成とビルドフラグ (Build Configurations and Flags)

本プロジェクトは，診断・評価用の機能（メモリ観測・白板撮影・リーク再現）を**条件コンパイルシンボル（ビルドフラグ）**で出し分けている．配布版（Release）にはこれらをコードごと含めない方針である．本ドキュメントは，どのフラグが何を有効化し，どの構成で定義されるかをまとめる．

## 設計方針 (Policy)

- **Release（配布版）＝素の製品**．診断・評価・デモ用の機能はコードごと除外する．
- **Debug＝開発・検証版**．診断/評価機能（`MEMMONITOR`・`WHITEBOARD`）を自動で含める．
- 一部のデモ用フラグ（`LEAKY_REPRO`）は既定では未定義とし，必要なときだけ**手動で**付与して対比計測に使う．

## ソリューション構成 (Solution Configurations)

`TIASshot.sln` が定義する構成は次の 2 つ（プラットフォームは **x64** のみ）．OpenCvSharp 等がネイティブ DLL に依存するため x64 でビルドする．

| 構成 | 用途 | 定義されるシンボル | 出力先 |
| --- | --- | --- | --- |
| `Debug\|x64` | 開発・検証 | `DEBUG` `TRACE` `WHITEBOARD` `MEMMONITOR` | `TIASshot/bin/x64/Debug/` |
| `Release\|x64` | 配布 | `TRACE` | `TIASshot/bin/x64/Release/` |

> ※ `TIASshot.csproj` には `Debug\|AnyCPU` / `Release\|AnyCPU` の PropertyGroup も残っているが，`.sln` は `x64` のみをビルド対象としており，通常はこれらを使わない．
> ※ `TIASshot/bin/Debug-NoWB/` というフォルダが残っている場合があるが，これは `WHITEBOARD` フラグ導入前の古い手動ビルドの残骸であり，現在のソリューションには対応する構成は存在しない．

## ビルドフラグ一覧 (Build Flags)

| シンボル | 目的 | 定義される構成 | Release（配布）含有 | 出し分け対象（主なもの） |
| --- | --- | --- | --- | --- |
| `MEMMONITOR` | メモリ観測ウィンドウ＋プレビュー計測 | `Debug\|x64`（自動） | ✗ | `UI/MemoryMonitorForm`，`UI/PreviewProfiler`，`UI/TimedPictureBox`，`UI/Form1.MemMonitor`（F9 トグル），`Form1.ShowImage` 等のプレビュー計測 |
| `WHITEBOARD` | 白板撮影モード（照明均一性評価用） | `Debug\|x64`（自動） | ✗ | 白板撮影ボタン（`Form1` の専用 partial），`Cameras/IScam.ShotWhiteBoard` 等 |
| `LEAKY_REPRO` | メモリ修正（優先度2）前の挙動を再現するデモ用 | **どの構成でも未定義（手動オプトイン）** | ✗ | `ColorCorrection/ColorCorrector.ConvertImage` のリーク版分岐，`UI/MemoryMonitorForm` のモード表示 |
| `DEBUG` | .NET 標準デバッグシンボル | `Debug\|x64` | ✗ | 標準（一部の開発時分岐） |
| `TRACE` | .NET 標準トレースシンボル | 全構成 | ○ | `System.Diagnostics.Trace` |

### MEMMONITOR — メモリ観測・プレビュー計測

- 起動時にメモリ観測ウィンドウ（`MemoryMonitorForm`）を自動で開き，PrivateMemory / WorkingSet をライブ折れ線グラフ＋CSV で記録する．
- プレビュー経路の計測（各段の実効 FPS・コピー時間・描画時間・GDI/USER/ハンドル数・画像サイズ・校正/撮影/F9 のイベント）を CSV（`bin/x64/Debug/MemMonitor_Results/`）に出力する．
- 副モニタ表示を実行中に切り替える計測用ホットキー **F9** も本フラグ限定で有効．
- 配布版には不要なため Release では未定義．

### WHITEBOARD — 白板撮影モード

- SmTIAS との装置間比較（照明均一性評価）用に，校正・色補正を行わず素の RGB を保存する独立撮影パスを追加する．
- ImagingSource（IScam）でのみ実装．未対応カメラでは通知して何もしない．
- 配布版の舌診撮影フローには不要なため Release では未定義．

### LEAKY_REPRO — リーク再現（対比計測デモ用）

- メモリ修正（PLAN_02 優先度2＝`ConvertImage` の中間 Mat 未解放）の**修正前の挙動**を忠実に再現するためのデモ用フラグ．
- 既定（未定義）では入れ子 `using` による**修正後**実装が使われる．`LEAKY_REPRO` を定義してビルドすると，`ConvertImage` が中間 Mat を Dispose しないリーク版に切り替わり，観測ウィンドウのモード表示も「リーク再現（修正前）」になる．
- 「修正前→修正後」をメモリ観測で対比録画するときにのみ使う．どの標準構成にも含めないため，使うときは手動で付与する（下記）．

## ビルド方法 (How to Build)

標準構成（Debug / Release）のビルド・テスト・実行コマンドは [ENV_04_開発コマンド](ENV_04_開発コマンド.md) を参照する．`Debug|x64` では `WHITEBOARD` と `MEMMONITOR` が自動で有効になり（メモリ観測ウィンドウが開き，白板撮影ボタンが表示される），`Release|x64` ではいずれの診断フラグも含まれない．

### LEAKY_REPRO を有効にする（対比計測デモ時のみ）

`LEAKY_REPRO` はソリューション構成に含まれないため，一時的に手動で付与する．いずれかの方法で行い，**計測後は元に戻す**こと．

- Visual Studio: プロジェクトのプロパティ →［ビルド］→ 条件付きコンパイル シンボル に `LEAKY_REPRO` を追加してビルド．
- または `TIASshot.csproj` の `Debug|x64` の `<DefineConstants>` に一時的に `;LEAKY_REPRO` を追記してビルド．

## 関連 (Related)

- 各フラグ導入の経緯・設計判断は [docs/PROGRESS.md](../PROGRESS.md) の該当エントリを参照:
  - `WHITEBOARD`（白板撮影の専用ビルド記号化）
  - `MEMMONITOR` / `LEAKY_REPRO`（メモリ修正の効果検証ツール）
- メモリ計測の結果は [docs/06_TEST/TEST_01_メモリ修正効果計測.md](../06_TEST/TEST_01_メモリ修正効果計測.md)．
