Newer
Older
TIASShot / .claude / rules / error-handling.md

paths: ["TIASshot/**/*.cs"]

エラーハンドリング方針 (Error Handling Policy)

本プロジェクトにおけるエラーの分類・処理方法・ログ出力の方針を定める.

基本方針 (Basic Policy)

本プロジェクトは単独開発のデスクトップ(WinForms)アプリであり,重厚なエラーコード体系や構造化ログ基盤は導入しない.既存コードの実装パターン(ErrorMsgbool 返却・MessageBoxDebug.WriteLineShowMessage)を踏襲し,最小限に標準化する.

  • 例外を握りつぶさない.回復できないエラーはユーザーに伝えて安全に停止し,回復可能なエラーは当該処理のみ中断してアプリは継続する.
  • ユーザー向けの通知(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 で確実に終端する(例: BlockingCollectionCompleteAdding()finally で呼び,消費側スレッドを停止させる).

共通ルール

  • 例外を握りつぶす空の catch を禁止する.catch する場合は必ず「ログ出力+ユーザー通知」または「再スロー」のいずれかを行う.
  • MatStreamWriter・スレッド同期資源などは using または try-finally で確実に解放する.

ログ出力 (Logging)

  • ログは Debug.WriteLine のみを使用する.永続ログファイルは作成しない(リリースビルドでは出力されない点を許容する).
  • 用途は開発・デバッグ時のトレース(パラメータ値,処理の節目,捕捉した例外の内容)とする.
  • ユーザーに見せるメッセージは ShowMessage / MessageBox で行い,Debug.WriteLine と役割を分ける(ログ=開発者向け,メッセージ=利用者向け).

※ 将来,撮影現場でのトラブル解析のために永続的な記録が必要になった場合は,ログファイル方式への変更を別途検討し,本方針を更新する.

  • テストとの関係は testing を参照する(エラー処理のうち純粋ロジックで検証可能な部分は自動テストの対象とする).