diff --git a/CLAUDE.md b/CLAUDE.md index b2fc126..8b1424e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ ## 開発進捗 -最新: テスト方針(GUIDE_08)を整備(ハードウェア結合層/ピュアロジック層を分離し,後者を NUnit で自動テストする方針) +最新: 規約整備としてテスト方針(GUIDE_08)・エラーハンドリング方針(GUIDE_09)を追加 ※ 本欄は**最新ステップ 1 行のみ上書き更新**.詳細な進捗履歴(動機・設計判断・失敗パターン)は [docs/PROGRESS.md](docs/PROGRESS.md) に追記する.運用ルールは GUIDE_05「進捗記録の運用ルール(CLAUDE.md / PROGRESS.md)」を参照. ## 必須ルール(コード実装時) @@ -45,7 +45,8 @@ - Git 運用ルール: docs/01_GUIDE/GUIDE_04_Git運用ルール.md - エージェント運用ルール: docs/01_GUIDE/GUIDE_05_エージェント運用ルール.md - テスト方針: docs/01_GUIDE/GUIDE_08_テスト方針.md -- ※ GUIDE_06 コーディング規約・GUIDE_07 ディレクトリ構造規則・GUIDE_09 エラーハンドリング方針は未整備(GUIDE_01 参照) +- エラーハンドリング方針: docs/01_GUIDE/GUIDE_09_エラーハンドリング方針.md +- ※ GUIDE_06 コーディング規約・GUIDE_07 ディレクトリ構造規則は未整備(GUIDE_01 参照) ### 02_ENV(環境) diff --git "a/docs/01_GUIDE/GUIDE_09_\343\202\250\343\203\251\343\203\274\343\203\217\343\203\263\343\203\211\343\203\252\343\203\263\343\202\260\346\226\271\351\207\235.md" "b/docs/01_GUIDE/GUIDE_09_\343\202\250\343\203\251\343\203\274\343\203\217\343\203\263\343\203\211\343\203\252\343\203\263\343\202\260\346\226\271\351\207\235.md" new file mode 100644 index 0000000..36fa125 --- /dev/null +++ "b/docs/01_GUIDE/GUIDE_09_\343\202\250\343\203\251\343\203\274\343\203\217\343\203\263\343\203\211\343\203\252\343\203\263\343\202\260\346\226\271\351\207\235.md" @@ -0,0 +1,49 @@ +# エラーハンドリング方針 (Error Handling Policy) + +本プロジェクトにおけるエラーの分類・処理方法・ログ出力の方針を定める. + +## 基本方針 (Basic Policy) + +本プロジェクトは単独開発のデスクトップ(WinForms)アプリであり,重厚なエラーコード体系や構造化ログ基盤は導入しない.既存コードの実装パターン(`ErrorMsg` + `bool` 返却・`MessageBox`・`Debug.WriteLine`・`ShowMessage`)を踏襲し,最小限に標準化する. + +- 例外を握りつぶさない.回復できないエラーはユーザーに伝えて安全に停止し,回復可能なエラーは当該処理のみ中断してアプリは継続する. +- ユーザー向けの通知(`ShowMessage` / `MessageBox`)と,開発者向けのログ(`Debug.WriteLine`)を混同しない. + +## エラーの分類 (Error Classification) + +| 分類 | 例 | 処理方針 | +| --- | --- | --- | +| 起動時の致命的エラー | 設定ファイル・参照ファイルの読み込み失敗,カメラ未接続 | 下位層で `ErrorMsg` に日本語の理由を設定し `bool` で失敗を返す.最終的に `Form` 層が `MessageBox` で通知して起動を中止する | +| 処理中の回復可能エラー | 撮影・保存・色変換中の一時的な失敗 | 例外境界で捕捉し,`ShowMessage` でユーザーに通知して当該処理のみ中断する(アプリは継続).UI 状態を適切に復帰させる | +| プログラミングエラー(バグ) | null 参照,配列範囲外,想定外の状態 | 握りつぶさない.`Debug.WriteLine` で記録し,原則そのまま伝播させて開発中に検知する | + +## エラーの処理方法 (Handling) + +### 起動時のエラー + +- `Connect()` / `Open()` 等の初期化メソッドは `bool` を返し,失敗時は `ErrorMsg` に日本語の理由を設定する. +- ユーザーへの通知は `Form` 層の `MessageBox.Show` に集約する.下位層(カメラ・光源・設定)は UI を直接呼び出さない. + +### 処理中のエラー + +- 撮影・保存・色変換など,失敗が想定される境界で例外を捕捉し,`_form.ShowMessage` で通知して当該処理を中断する. +- 中断時は UI 状態(`EnableShots` 等)を必ず復帰させる. +- スレッド同期に関わる資源は,例外時にも `finally` で確実に終端する(例: `BlockingCollection` の `CompleteAdding()` を `finally` で呼び,消費側スレッドを停止させる). + +### 共通ルール + +- 例外を握りつぶす空の `catch` を禁止する.`catch` する場合は必ず「ログ出力+ユーザー通知」または「再スロー」のいずれかを行う. +- `Mat`・`StreamWriter`・スレッド同期資源などは `using` または `try-finally` で確実に解放する. + +## ログ出力 (Logging) + +- **ログは `Debug.WriteLine` のみを使用する**.永続ログファイルは作成しない(リリースビルドでは出力されない点を許容する). +- 用途は開発・デバッグ時のトレース(パラメータ値,処理の節目,捕捉した例外の内容)とする. +- ユーザーに見せるメッセージは `ShowMessage` / `MessageBox` で行い,`Debug.WriteLine` と役割を分ける(ログ=開発者向け,メッセージ=利用者向け). + +※ 将来,撮影現場でのトラブル解析のために永続的な記録が必要になった場合は,ログファイル方式への変更を別途検討し,本方針を更新する. + +## 関連 (Related) + +- 撮影・保存処理の例外時の中断・終端は [PLAN_02_バグ修正計画](../03_PLAN/PLAN_02_バグ修正計画.md)(特に優先度3)と整合させる. +- テストとの関係は [GUIDE_08_テスト方針](GUIDE_08_テスト方針.md) を参照する(エラー処理のうち純粋ロジックで検証可能な部分は自動テストの対象とする). diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 6fe457e..476fd0f 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -30,4 +30,9 @@ - [x] **テスト方針(GUIDE_08)整備** (2026-06-07): 立ち上げフローの規約整備フェーズが未着手だったため、品質管理の土台としてテスト方針を策定。ハードウェア結合層(カメラ/UI/スレッド)と純粋ロジック層を分け、後者を NUnit で自動テスト、前者をビルド+手動+実機回帰で担保する方針。 - 動機: `/implement` のテストフェーズが毎回「テスト不可」で終わっていたが、実態は純粋ロジック層(`ColorCorrector` 等)にテストプロジェクトを立てていなかっただけ、という認識のズレを是正。 - - 後段: テストプロジェクト(`TIASshot.Tests`, NUnit / x64 / .NET Framework 4.8)の立ち上げと `ColorCorrector`・`Config`・`IoUtil` 等の初期テスト作成(次ステップ)。GUIDE_06 コーディング規約・GUIDE_07 ディレクトリ構造・GUIDE_09 エラーハンドリング方針は未整備のまま。 + - 後段: テストプロジェクト(`TIASshot.Tests`, NUnit / x64 / .NET Framework 4.8)の立ち上げと `ColorCorrector`・`Config`・`IoUtil` 等の初期テスト作成(次ステップ)。 + +- [x] **エラーハンドリング方針(GUIDE_09)整備** (2026-06-07): 既存の実装パターン(`ErrorMsg`+`bool` 返却・`MessageBox`・`Debug.WriteLine`・`ShowMessage`)を土台に,エラーの分類(起動時致命/処理中の回復可能/プログラミングエラー)・処理方法・ログ方針を軽量に標準化。 + - 動機: PLAN_02 優先度3(撮影中の例外をクラッシュさせずエラー表示・中断する修正)の前に方針を確定し,場当たり実装を避けるため。 + - 設計判断: ログは `Debug.WriteLine` のみとし永続ログファイルは作らない(撮影現場での解析が必要になったら別途見直す)。空 `catch` 禁止・例外時のスレッド同期資源の `finally` 終端を明文化。 + - 残: GUIDE_06 コーディング規約・GUIDE_07 ディレクトリ構造規則は未整備のまま(既存の de-facto 確立により優先度低)。