現場で生き残るための「例外処理」:VB.NETで堅牢なアプリを作る極意
こんにちは。現場で長年、数多のシステムトラブルを鎮火してきたエンジニアです。
皆さんが書いたコードが、ユーザーの手元で「突然パタリと落ちる」。これほど恐ろしいことはありません。なぜアプリは落ちるのか? それは、「起こるはずのないエラー」に対して無防備だからです。
今回は、VB.NETの「例外処理(Try-Catch-Finally)」を単なる構文としてではなく、「アプリケーションを守る盾」として使いこなすための極意を伝授します。
—
1. なぜ「例外処理」が必要なのか?
プログラムは、人間が想定していない状況(ファイルがない、ネットワークが切れた、数値変換できない等)に遭遇すると、パニックを起こして強制終了します。これを「例外(Exception)」と呼びます。
例外処理とは、「エラーが起きたら、クラッシュする代わりに、こう対処しなさい」という緊急避難マニュアルをコードに書く作業です。
—
2. Try-Catch-Finally:緊急避難の三箇条
この構文は、以下の3つの役割に分解できます。
1. Try: 「ここでエラーが起きるかもしれない」という危険地帯を囲む。
2. Catch: 「エラーが起きたらこうする」という救済措置を書く。
3. Finally: 「成功しようが失敗しようが、最後に必ずやる」後始末を書く。
実践的なコード例
Public Sub ProcessFile(filePath As String)
Dim fileReader As System.IO.StreamReader = Nothing
Try
‘ 【Try】危険地帯:ファイルを開く処理(存在しない場合、ここで例外発生)
fileReader = New System.IO.StreamReader(filePath)
Console.WriteLine(fileReader.ReadToEnd())
Catch ex As Exception
‘ 【Catch】救済措置:エラーの内容をログに記録し、ユーザーに優しく通知
‘ ex.Messageには具体的なエラー内容が入っています
LogError(“ファイル読み込み中にエラー発生: ” & ex.Message)
MessageBox.Show(“ファイルの読み込みに失敗しました。ファイルを確認してください。”)
Finally
‘ 【Finally】後始末:エラーの有無に関わらず、開いたファイルは必ず閉じる
If fileReader IsNot Nothing Then
fileReader.Close()
‘ リソースの解放は職人技の基本です
End If
End Try
End Sub
—
3. 「ログ出力」はエンジニアの黒歴史を救う命綱
初心者の方ほど、「エラーが起きたらメッセージボックスを出すだけ」で満足してしまいます。しかし、「何が起きたか」という記録(ログ)がないと、後からなぜ落ちたのか誰も証明できません。
業務アプリでは、最低限以下の情報を残すのが鉄則です。
- いつ(日時): 発生時刻
- どこで(メソッド名): どの処理で詰まったか
- なぜ(例外内容): なぜ失敗したのか(ex.ToString() で詳細なスタックトレースを記録)
簡易的なログ出力メソッドの例
Private Sub LogError(message As String)
‘ 簡易的にテキストファイルへ追記する実装例
Dim logPath As String = “C:\Logs\ErrorLog.txt”
Dim logContent As String = DateTime.Now.ToString(“yyyy/MM/dd HH:mm:ss”) & ” – ” & message
‘ 実際に現場ではNLogやlog4netなどのロギングライブラリを使うのが定石です
System.IO.File.AppendAllText(logPath, logContent & Environment.NewLine)
End Sub
—
4. 陥りやすい罠:やってはいけない「空のCatch」
初心者がやりがちな最大のミスがこれです。
Try
‘ 危険な処理
Catch ex As Exception
‘ 何もしない!
End Try
これは、「泥棒が入ったのに、わざと目隠しをして見なかったことにする」のと同じです。エラーが起きてもアプリは止まりませんが、データが壊れたり、原因不明のまま放置されたりするため、後で必ず大きな代償を払うことになります。
Catch句の中には、必ず「何らかの対応(ログ出力やユーザーへの通知)」を記述してください。
—
最後に:例外処理は「優しさ」です
例外処理を丁寧に書くことは、単にバグを防ぐことではありません。「もしエラーが起きても、ユーザーを路頭に迷わせない」という開発者としての優しさです。
- Tryで危険を囲い、
- Catchでログに真実を刻み、
- Finallyで後腐れなく後片付けをする。
このサイクルを身につければ、あなたの書くVB.NETコードは、驚くほど安定したものに変わります。ここをクリアすれば、もうあなたは初心者ではありません。自信を持って、堅牢なシステムを構築していきましょう!
