diff --git a/CLAUDE.md b/CLAUDE.md index 66f12c4..4ebf450 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ ## 開発進捗 -最新: テンプレートを最新版(`0ac68c7`)に同期し,補助エージェント(advisor/deps-analyst/ops-runner)・`/consult`・`/deps-update`・`/commit merge`・テンプレート改変台帳を導入.あわせて Dependabot(alerts / security updates の有効化・`.github/dependabot.yml`)をセットアップ +最新: 初回の `/deps-update` で Dependabot PR 5 件を検証し,全件がビルド不能(OpenCvSharp の semver 違反な破壊的変更/packages.config 更新の生成不具合)と判明.追従作業を Issue #29〜#32 として起票し,うち #32(ENV_04 の `vswhere` 修正)を実施 ※ 本欄は**最新ステップ 1 行のみ上書き更新**.詳細な進捗履歴(動機・設計判断・失敗パターン)は [docs/PROGRESS.md](docs/PROGRESS.md) に追記する.運用ルールは `.claude/rules/progress-log.md` を参照(該当ファイル編集時に自動ロードされる). ## 必須ルール(コード実装時) diff --git "a/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" "b/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" index 97c72ad..8375300 100644 --- "a/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" +++ "b/docs/02_ENV/ENV_04_\351\226\213\347\231\272\343\202\263\343\203\236\343\203\263\343\203\211.md" @@ -6,16 +6,18 @@ - ビルドは **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)を吸収するため,`vswhere` で MSBuild・vstest の場所を解決する. +- コマンドは 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 -property installationPath +$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) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index e4eaefc..c49f1aa 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -121,3 +121,10 @@ - マージ必須ファイルは上書きせず差分統合した(`.gitignore` は VS/NuGet 等の固有ルールを保持,`CLAUDE.md` は共通セクションのみ更新,`settings.json` は既存の PreToolUse フック配線を保持して `permissions.allow` を追加).テンプレート由来ファイルのローカル改変は 0 件だったため台帳は空で開始. - 続けて,新しい GUIDE_01 が前提にする Dependabot をセットアップした.リポジトリ設定(alerts / security updates)を `gh api` で有効化し,`.github/dependabot.yml`(NuGet: `TIASshot`/`TIASshot.Tests` の packages.config,週 1 回,マイナー/パッチをまとめる.メジャー更新も個別 PR で作らせる.GitHub Actions も対象)を追加した.手順は ENV_03 に転記. - 後段: CI(GitHub Actions)が無いため,`/deps-update` のマージゲートはローカル検証(x64 ビルド+テスト)で判定することになる.OpenCvSharp や実機カメラ SDK に関わる更新は実機確認が要る点は変わらない. + +- [x] **初回の `/deps-update` 実行:Dependabot PR 5 件が全てビルド不能と判明し,追従を Issue 化** (2026-08-28): 初回の依存更新巡回で open な Dependabot PR 5 件(メジャー 4・マイナーグループ 1)を検証した結果,**マージ可能なものは 1 件も無かった**.前エントリの後段で予告したとおりローカル検証(x64 ビルド+テスト)がゲートとして機能し,GitHub 上は全件 `MERGEABLE / CLEAN` だった破壊的変更を水際で止めた.追従作業は #29〜#32 として起票し,本コミットはうち #32 を実施. + - 原因①(グループ PR #24): `minor-and-patch` グループに入っていた OpenCvSharp4 の bump が,semver 上は minor ながら ArUco API を破壊していた(`PredefinedDictionaryName` の廃止・改名,`CvAruco.DetectMarkers` の削除).OpenCvSharp のバージョンは OpenCV 本体に追随しており **semver 契約を持たない**ため,第 2 セグメントの bump は常にメジャー相当として扱う必要がある.グループ PR は部分マージできないので,専用グループに分離しない限り残り 12 パッケージも道連れで止まる(#29). + - 原因②(メジャー 4 件): Dependabot の packages.config アップデータが,同時 open の他 PR の解決結果を csproj に混入させ,どの PR も「csproj が自分の packages.config に無いパッケージのパスを参照する」状態になっていた.csproj はパスにバージョンがハードコードされる形式のため,`EnsureNuGetPackageBuildImports` の `` が発火して確実にビルドが落ちる.根本原因は packages.config 形式そのもので,テストプロジェクトの PackageReference 移行が構造的対策になる(未着手). + - 設計判断(NUnit 4 追従の順序): `ClassicAssert` への置換は NUnit 3.14 でコンパイルできず「上げてから直す」と main が壊れる期間ができる.一方,制約モデル(`Assert.That` + `Is.*` / `Does.*`)は両バージョンで動くため,先に移行しておけば破壊期間ゼロで追従できる(#30).ArUco は逆に新旧両対応の中間形が作れず,パッケージ更新とコード移行を同一 PR で原子的に入れるしかない(#31). + - 判断待ちとして残したもの: #25・#26・#28 は net48 では更新の利得が無い(それぞれ型フォワード facade で中身同一/死んだ参照/依存 0 件→約 50 パッケージの死荷重)ため見送りが妥当だが,`@dependabot ignore` の投稿は人間の決定なので保留.分析結果は各 PR のコメントと `.claude/deps-update-report.md` に残した. + - 付随して判明: ENV_04 の `vswhere` は `-products *` が無く,VS Build Tools のみの環境(IDE 未導入)では何も返さないため `$msbuild` / `$vstest` が解決できなかった.検証を委譲したエージェントが実際にこれで検証不能に陥ったので修正した(#32).