日常の開発で使うビルド・テスト・実行コマンドをまとめる.人間とエージェント(tester・coder,/auto-refactor・/auto-audit)がコマンドを推測せずに済むための唯一の参照先とする.コマンドが増減・変更されたら本ファイルを更新する.
TIASshot.sln は Debug|x64 / Release|x64 のみ定義).OpenCvSharp 等がネイティブ DLL に依存するため AnyCPU は使わない.dotnet build / dotnet test は使えない.MSBuild と vstest.console.exe を使う.vswhere で MSBuild・vstest の場所を解決する.$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 TIASshot.sln
nuget.exe が PATH に無い場合はリポジトリルートの nuget.exe を使う(setup.ps1 が未取得時に自動ダウンロードする).
# 開発・検証(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_ビルド構成とビルドフラグ を参照する.
自動テストの方針・対象範囲は .claude/rules/testing.md を参照する(本ファイルはコマンドのみ).
# テストプロジェクトをビルドしてから x64 で実行する & $msbuild TIASshot.sln /t:Build /p:Configuration=Debug /p:Platform=x64 & $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64
/Platform:x64 は必須.カテゴリで絞り込んで実行する(開発中の確認用.判定には全件実行を使う).
# 層②(結合ロジック)のテストだけ実行する & $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64 "/TestCaseFilter:TestCategory=Integration" # メモリ量で判定するテストを除いて実行する(環境による不安定さを切り分けるとき) & $vstest "TIASshot.Tests\bin\x64\Debug\TIASshot.Tests.dll" /Platform:x64 "/TestCaseFilter:TestCategory!=Memory"
SELFTEST フラグに依存するため,Debug 構成でのみコンパイル・実行される.ベースライン計測・マージ前検証・「テストが通ることの確認」は,必ず bin / obj を削除してから行う.
bin に前回のビルド成果物が残っていると,過去のビルドでコピーされた DLL が残存してアセンブリ解決が偶然成立し,依存の記述漏れを隠してしまう(Issue #39: テストプロジェクトに OpenCvSharp の推移的依存が無いにもかかわらず,汚れた bin では全緑に見えていた).同じマシンで作業し続ける限り気づけないため,計測・検証の前に毎回消す.
# 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 直後と同じ状態を再現する.
# 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 で再取得できるため).上記「テスト」のビルド〜vstest 実行を 1 コマンドにまとめたランナー.tester・refactorer エージェントはこれを使う(エージェントの環境からは MSBuild・vstest を直接呼べないため.実行権限は .claude/agents/ の tools で許可している).人間が使ってもよい.
# 全件(Debug 出力を削除 → ビルド → テスト.判定にはこれを使う) python scripts/verify/run_tests.py # 絞り込み(vstest の /TestCaseFilter の式をそのまま渡す) python scripts/verify/run_tests.py --filter "TestCategory=Integration" # 安定性の確認(ビルドは 1 回,テストを 3 回続けて実行する) python scripts/verify/run_tests.py --filter "TestCategory=Integration" --repeat 3 # 開発中の素早い再確認(Debug 出力を消さない.判定には使わない) python scripts/verify/run_tests.py --filter "FullyQualifiedName~ConfigTests" --no-clean
.verify/tests/run-<日時>/(build.log・test-<n>.log・result-<n>.trx・summary.json).画面には件数と,失敗したテストの名前・メッセージが出る0=全て合格,1=不合格あり(ビルド失敗・テスト失敗・絞り込みで該当 0 件),2=前提条件を満たさない(Visual Studio / Build Tools 未導入等)TIASshot.exe --selftest)は実行しない.それは下記「セルフテスト」の run_selftest.py で行うビルド後,構成に対応した実行ファイルを起動する.実行時参照ファイル(config.xml・カメラ設定 XML・TCC の CSV)が同ディレクトリに配置済みであること(ENV_02_環境構築手順).
# 開発・検証版 & "TIASshot\bin\x64\Debug\TIASshot.exe" # 配布版 & "TIASshot\bin\x64\Release\TIASshot.exe"
実機カメラ・光源に接続して動作する UI アプリのため,完全な動作確認には機材が必要.
実機なしで確認できる範囲(依存アセンブリのロード・プレビュー経路・校正〜保存)を,フォームを表示せずに検査する(Debug|x64 のみ.ENV_06 の SELFTEST).
# クリーンビルド → 既存テスト → セルフテストをまとめて実行する(結果は .verify/selftest/run-<日時>/) python scripts/verify/run_selftest.py # 依存パッケージを変更したとき(packages を退避して nuget restore からやり直す) python scripts/verify/run_selftest.py --full # セルフテスト単体(WinExe のため Start-Process -Wait で終了コードを受け取る) $p = Start-Process "TIASshot\bin\x64\Debug\TIASshot.exe" -ArgumentList "--selftest","--selftest-out","$env:TEMP\tias-selftest.txt" -Wait -PassThru $p.ExitCode # 0=全項目合格,1=不合格あり,2=セルフテスト自体の異常,3=タイムアウト Get-Content "$env:TEMP\tias-selftest.txt" # 各項目の PASS/FAIL と理由(UTF-8 BOM 付き)
TIASshot/ と TIASshot.Tests/ の bin/x64/Debug・obj/x64/Debug)のみ.bin/x64/Release 等ほかの構成の出力は消さない.--no-clean・--skip-tests は開発時の短縮用で,検証の判定には使わない.--selftest-keep を付けると,合格時も作業フォルダ(%TEMP%\TIASshot-selftest\work-*.校正データ・保存画像)を残す(不合格時は常に残る)./verify)による自動検証の手順・判定の読み方は .claude/verify-profile.md を参照する.