# 開発コマンド (Development Commands)

日常の開発で使うビルド・テスト・実行コマンドをまとめる．人間とエージェント（tester・coder，`/auto-refactor`・`/auto-audit`）が**コマンドを推測せずに済むための唯一の参照先**とする．コマンドが増減・変更されたら本ファイルを更新する．

## 前提 (Prerequisites)

- ビルドは **x64 のみ**（`TIASshot.sln` は `Debug|x64` / `Release|x64` のみ定義）．OpenCvSharp 等がネイティブ DLL に依存するため `AnyCPU` は使わない．
- レガシー形式（packages.config）のため **`dotnet build` / `dotnet test` は使えない**．MSBuild と `vstest.console.exe` を使う．
- コマンドは PowerShell で実行する．VS のエディション差（Community / Professional / Enterprise）と Build Tools のみの環境を吸収するため，`vswhere` で MSBuild・vstest の場所を解決する．

## ツールパスの解決 (Locating Build Tools)

```powershell
$vs = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -property installationPath
$msbuild = Join-Path $vs "MSBuild\Current\Bin\MSBuild.exe"
$vstest  = Join-Path $vs "Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
```

※ `-products *` は必須．これが無いと `vswhere` は通常の VS 製品しか列挙せず，**VS Build Tools のみ**の環境では何も返さない（`$vs` が空になり `Join-Path` が失敗する）．

以降のコマンドは `$msbuild` / `$vstest` を解決済みとして記載する．

## NuGet 復元 (Restore)

```powershell
nuget restore TIASshot.sln
```

`nuget.exe` が PATH に無い場合はリポジトリルートの `nuget.exe` を使う（`setup.ps1` が未取得時に自動ダウンロードする）．

## ビルド (Build)

```powershell
# 開発・検証（WHITEBOARD / MEMMONITOR 有効）
& $msbuild TIASshot.sln /t:Build /p:Configuration=Debug /p:Platform=x64

# 配布版（診断機能なし）
& $msbuild TIASshot.sln /t:Build /p:Configuration=Release /p:Platform=x64

# クリーンビルド
& $msbuild TIASshot.sln /t:Rebuild /p:Configuration=Debug /p:Platform=x64
```

構成ごとのビルドフラグの意味は [ENV_06_ビルド構成とビルドフラグ](ENV_06_ビルド構成とビルドフラグ.md) を参照する．

## テスト (Test)

自動テストの方針・対象範囲は `.claude/rules/testing.md` を参照する（本ファイルはコマンドのみ）．

```powershell
# テストプロジェクトをビルドしてから x64 で実行する
& $msbuild TIASshot.sln /t:Build /p:Configuration=Debug /p:Platform=x64
& $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64
```

- ネイティブ DLL を x64 でロードするため `/Platform:x64` は必須．
- Visual Studio 上ではテストエクスプローラーから実行できる（プラットフォームを x64 にすること）．

## クリーン環境での検証 (Clean Verification)

**ベースライン計測・マージ前検証・「テストが通ることの確認」は，必ず `bin` / `obj` を削除してから行う．**

`bin` に前回のビルド成果物が残っていると，過去のビルドでコピーされた DLL が残存してアセンブリ解決が偶然成立し，**依存の記述漏れを隠してしまう**（Issue #39: テストプロジェクトに OpenCvSharp の推移的依存が無いにもかかわらず，汚れた `bin` では全緑に見えていた）．同じマシンで作業し続ける限り気づけないため，計測・検証の前に毎回消す．

```powershell
# bin / obj を削除してからビルド・テストする
Get-ChildItem -Path TIASshot, TIASshot.Tests -Include bin, obj -Directory -Recurse | Remove-Item -Recurse -Force
& $msbuild TIASshot.sln /t:Build /p:Configuration=Debug /p:Platform=x64
& $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64
```

依存パッケージを追加・変更した PR の検証では，これに加えて `packages` も退避して `nuget restore` からやり直し，**新しいマシンでの `git clone` 直後と同じ状態**を再現する．

```powershell
# clone 相当の完全クリーン検証（packages も退避する）
Get-ChildItem -Path TIASshot, TIASshot.Tests -Include bin, obj -Directory -Recurse | Remove-Item -Recurse -Force
Rename-Item packages packages.bak      # 復元に失敗したときのために削除せず退避する
nuget restore TIASshot.sln
& $msbuild TIASshot.sln /t:Build /p:Configuration=Debug /p:Platform=x64
& $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64
```

- 合格条件: **テストが全件成功し，ビルド警告が増えていないこと**．
- `packages` の復元にはネットワークと時間がかかるため，通常の開発サイクルでは `bin` / `obj` の削除までで運用し，完全クリーン検証は依存変更時とマージ前に行う．
- 検証が終わったら退避した `packages.bak` は削除してよい（`nuget restore` で再取得できるため）．

## 実行 (Run)

ビルド後，構成に対応した実行ファイルを起動する．実行時参照ファイル（`config.xml`・カメラ設定 XML・TCC の CSV）が同ディレクトリに配置済みであること（[ENV_02_環境構築手順](ENV_02_環境構築手順.md)）．

```powershell
# 開発・検証版
& "TIASshot\bin\x64\Debug\TIASshot.exe"

# 配布版
& "TIASshot\bin\x64\Release\TIASshot.exe"
```

実機カメラ・光源に接続して動作する UI アプリのため，完全な動作確認には機材が必要．
