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

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

## 設計方針 (Policy)

- **Release（配布版）＝素の製品**．診断・評価・デモ用の機能はコードごと除外する．
- **Debug＝開発・検証版**．診断/評価機能（`MEMMONITOR`・`WHITEBOARD`）を自動で含める．

## ソリューション構成 (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` 等 |
| `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 では未定義．

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

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

## 関連 (Related)

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