【実務・中級編】初心者向け:VB.NETの例外処理(Try-Catch-Finally)の正しい書き方と、エラー発生時にアプリケーションをクラッシュさせないためのログ出力の基本 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

堅牢な業務アプリの境界線:VB.NETにおける「正しい例外処理」と「沈黙させないログ」の極意

業務自動化ツールを開発する際、多くの初心者が陥る罠がある。それは「動けばいい」という甘えによる、無防備なコードだ。

「エラーが出たら止まる」のは当たり前だが、「エラーが出ても、システムが何事もなかったかのように安全に終了し、管理者に的確な遺言を残す」ことこそが、プロの書くVB.NETのコードだ。

今日は、現場で生き残るための「例外処理の作法」を伝授する。

1. 「Try-Catch」の正しい哲学:すべてを包むな

初心者はよく、コード全体を一つの大きな `Try-Catch` で囲む。これは「腹痛も頭痛も骨折も、全部同じ薬で治そうとする」に等しい愚行だ。

非推奨な書き方(アンチパターン)

‘ 全部囲んでしまうと、どこで何が起きたか特定できない
Try
‘ ファイル読み込み
‘ DB書き込み
‘ 計算処理
Catch ex As Exception
MsgBox(“エラーです”) ‘ これではユーザーも開発者も救われない
End Try

プロの設計:粒度を分ける

例外処理は「回復可能な処理」と「回復不可能な処理」を明確に分ける。

‘ 【推奨】処理ごとにTryを分割し、責任範囲を明確にする
Try
‘ ファイルIOは独立させる
ReadFile()
Catch ex As System.IO.IOException
‘ ここでログを吐いて、ユーザーに「ファイルが見つかりません」と通知する
End Try

Try
‘ DB接続も独立させる
UpdateDatabase()
Catch ex As System.Data.SqlClient.SqlException
‘ DB特有のエラーハンドリングを行う
End Try

2. ログ出力の基本:ログは「遺言」である

エラーが発生した際、何が起きたかを記録せずに握りつぶすのは、事故現場で証拠隠滅するのと同じだ。最低限、以下の情報は残せ。

1. タイムスタンプ(いつ)
2. 例外メッセージ(何が起きたか)
3. スタックトレース(コードのどこで起きたか)

現場でそのまま使えるログ出力メソッド

Imports System.IO

Public Sub WriteErrorLog(ex As Exception)
Dim logPath As String = “C:\Logs\app_error.log”
Dim logMessage As String = String.Format(
“{0} | ERROR: {1} | STACKTRACE: {2}{3}”,
DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”),
ex.Message,
ex.StackTrace,
Environment.NewLine
)

‘ ファイルを追記モードで開く
‘ 複数人/複数プロセスで競合しないよう注意が必要だが、まずはここから
File.AppendAllText(logPath, logMessage)
End Sub

3. Finallyの使い所:リソース解放の絶対ルール

VB.NETでは、ファイルやDB接続、ネットワーク通信など「外部リソース」を使用した場合、どんなエラーが起きても必ず解放(Dispose)しなければならない。これを怠ると、ツールがメモリリークを起こし、PC全体のパフォーマンスを低下させる。

`Finally` は、正常終了しようが例外が発生しようが、必ず実行される場所だ。

堅牢なコードの決定版

Dim reader As StreamReader = Nothing
Try
reader = New StreamReader(“C:\data.txt”)
‘ 処理を行う…
Catch ex As Exception
WriteErrorLog(ex)
Throw ‘ 再スローして上位層に通知する(握りつぶさない)
Finally
‘ ここが重要。リソースを必ず解放する
If reader IsNot Nothing Then
reader.Close()
reader.Dispose()
End If
End Try

※ 最近のVB.NETなら `Using` ステートメントを使うのがベストプラクティスだが、`Try-Catch-Finally` の本質を理解するためにこの構造を叩き込んでおいてほしい。

結論:コードは「自分以外の誰か」のために書く

業務自動化ツールを開発しているとき、エラーは必ず起きる。避けられない。
しかし、「エラーを予見し、記録し、安全に終了させるコード」を書いておけば、あなたは「ツールを壊す人」から「システムを守るエンジニア」へ変わる。

1. 粒度の細かいTry-Catchを書くこと。
2. ログには「どこで何が起きたか」を克明に残すこと。
3. リソースはFinallyで必ず掃除すること。

この3つを守るだけで、君のツールは現場で圧倒的な信頼を勝ち取るはずだ。さあ、今すぐ自分のコードを見直し、退屈なエラー画面を「制御された美しい終了処理」へと書き換えてみてほしい。

タイトルとURLをコピーしました