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

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

## 設計方針 (Policy)

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

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

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

| 構成 | 用途 | 定義されるシンボル | 出力先 |
| --- | --- | --- | --- |
| `Debug\|x64` | 開発・検証 | `DEBUG` `TRACE` `WHITEBOARD` `MEMMONITOR` `SELFTEST` `HWTEST` | `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` 等 |
| `SELFTEST` | ヘッドレスのセルフテスト（`--selftest`） | `Debug\|x64`（自動）・`Debug\|AnyCPU`（csproj のみ．通常は未使用） | ✗ | `SelfTest/`（ランナー・偽カメラ・合成チャート），`UI/Form1.SelfTest`・`UI/PreviewMonitor.SelfTest`，`Program.Main` の分岐，`Form1.ShowError` のヘッドレス記録 |
| `HWTEST` | 実機テスト（`--hwtest`．実機のカメラ・光源を操作する） | `Debug\|x64`（自動）・`Debug\|AnyCPU`（csproj のみ．通常は未使用）．**`SELFTEST` と同時に定義すること**（無いと `#error`） | ✗ | `HwTest/`（ランナー・判定・引数），`UI/Form1.HwTest`，`Cameras/IScam.HwTest`・`Cameras/Lucam.HwTest`（露光・ゲインの操作），`Program.Main` の分岐，`CameraBase` の校正停止フラグ，`Form1_Load` の自動接続の省略・`Form1.ShowImage` のフレーム記録・`Form1.ShowError` の記録，メモリ観測ウィンドウを開かない分岐 |
| `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 では未定義．

### SELFTEST — ヘッドレスのセルフテスト

- `TIASshot.exe --selftest` でフォームを表示せずに，依存アセンブリのロード（`deps`）・偽カメラによるプレビュー経路（`preview`）・合成チャートによる校正〜保存（`calib-save`）を検査し，終了コード（0=合格）と結果ファイルで返す．実機カメラ・光源には触れず，保存先は一時フォルダに差し替える．
- 依存更新後などに，人間の実機確認の前段として verifier（`/verify`）が使う．実行手順は [ENV_04_開発コマンド](ENV_04_開発コマンド.md) と `.claude/verify-profile.md` を参照する．
- 配布版には不要なため Release では未定義（Release の exe に `--selftest` を渡しても通常起動になる）．

### HWTEST — 実機テスト

- `TIASshot.exe --hwtest --camera <lucam|iscam>` で実際の `Form1` を表示し，指定した機種のカメラと光源を操作して，接続・プレビュー・露光/ゲイン・光源・閉じる処理・再接続を検査する（[PLAN_06](../03_PLAN/PLAN_06_実機自動テスト計画.md)）．終了コード（0=合格）と結果ファイルで返す．保存先は一時フォルダに差し替え，同梱の `config.xml`・デバイス状態ファイルは書き換えない．
- チャート不要の検査の間は，`CameraBase` の校正停止フラグでフレームコールバックの校正処理（チャート検出・ホワイトバランスの調整・変換行列の算出）を止める（カメラの前にチャートをはめたまま検査するため）．
- `SELFTEST` の部品（`SelfTestConfig`・`SelfTestReport`・`SelfTestPump`・閉じる処理の段階の記録）を使うため，`SELFTEST` と同時に定義する必要がある（`HwTest/HwTestRunner.cs`・`UI/Form1.HwTest.cs` が `#error` で検出する）．
- 機材を操作するため，**ユーザーの合図があるときだけ実行する**．実行手順は [ENV_04_開発コマンド](ENV_04_開発コマンド.md) と `.claude/verify-profile.md` を参照する．
- 配布版には不要なため Release では未定義（Release の exe に `--hwtest` を渡しても通常起動になる）．

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

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

## 関連 (Related)

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