【入門編】VB.NETでのカスタム例外の作成とスロー:業務エラーを明確に区別する例外設計の極意 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

VB.NETで「例外」を飼いならせ:業務エラーを分離するプロの設計術

こんにちは。現場で長年VB.NETと格闘してきた先輩エンジニアです。

皆さんは、プログラムが予期せぬエラーで止まってしまった時、ユーザーにどんなメッセージを表示していますか?
「システムエラーが発生しました」の一言で済ませていませんか?

もしそうなら、今日でその「とりあえずの例外処理」とはお別れしましょう。「何が起きたのか(システムの問題か、それともユーザーの入力ミスか)」を明確に切り分けることこそ、堅牢なアプリケーションを作るための第一歩です。

今日は、VB.NETでの「カスタム例外」の作り方を通じて、システムを「壊れにくいもの」から「運用しやすいもの」へと進化させる極意をお教えします。

1. なぜ「システムエラー」と「業務エラー」を分けるべきなのか?

プログラムには大きく分けて2種類のエラーが存在します。

  • システムエラー(想定外): データベースが死んだ、ネットワークが切れた、メモリ不足など。これはエンジニアが直すべき問題です。
  • 業務エラー(想定内): 「在庫が足りない」「日付が未来になっている」など。これはユーザー自身に「こう直してください」と伝えるべき問題です。

これらを区別せず、すべて `Exception` クラスでキャッチしてしまうと、ログがゴミだらけになり、本当に調査が必要なバグを見逃す原因になります。

2. カスタム例外クラスを作ってみよう

VB.NETでは、`Exception` クラスを継承することで、自分専用の例外を作れます。これが「業務エラー」を表現する器になります。

”’

”’ 業務ルール違反を通知するためのカスタム例外クラス
”’

Public Class BusinessLogicException
Inherits Exception

‘ コンストラクタ(エラーメッセージを受け取る)
Public Sub New(message As String)
MyBase.New(message)
End Sub

‘ 必要に応じて、エラーコード等を持たせることも可能です
Public Property ErrorCode As String
End Class

たったこれだけです。`Inherits Exception` と書くことで、「これは例外の一種ですよ」と.NETに教えてあげているわけです。

3. 実践:業務ロジックで例外を「スロー(投げる)」する

では、実際に在庫チェックの場面を想定してみましょう。

Public Sub ProcessOrder(quantity As Integer)
‘ 業務ルール:在庫が足りない場合は例外を投げる
Dim currentStock As Integer = 5 ‘ 例として在庫5

If quantity > currentStock Then
‘ ここで業務エラーをスローする!
Throw New BusinessLogicException(“在庫が足りません。現在の在庫は” & currentStock & “個です。”)
End If

‘ 通常の処理…
Console.WriteLine(“注文を受け付けました。”)
End Sub

ポイントは `Throw` です。これで処理を強制的に中断し、上位層(画面側など)へエラーを伝播させます。

4. 上位層での「賢い」キャッチ術

ここが最も重要です。呼び出し元では、例外の種類を見て対応を分けます。

Try
ProcessOrder(10)
Catch ex As BusinessLogicException
‘ 業務エラーなら、メッセージをそのままユーザーに表示
MessageBox.Show(ex.Message, “確認”, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Catch ex As Exception
‘ それ以外の予期せぬシステムエラーなら、ログを吐いて管理者へ連絡
LogError(ex)
MessageBox.Show(“予期せぬシステムエラーが発生しました。管理者に連絡してください。”, “エラー”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

なぜこの書き方が「極意」なのか?

1. ユーザーへの優しさ: 「在庫が足りない」という具体的な情報をそのまま伝えられます。
2. 管理のしやすさ: 予期せぬエラー(データベース接続失敗など)と混ざることがないため、デバッグが劇的に楽になります。
3. 拡張性: 将来、エラーの種類が増えても `Catch` を増やすだけで柔軟に対応できます。

先輩からのアドバイス:ここをクリアすれば大丈夫!

初学者のうちは「例外=怖いもの、避けるもの」と考えがちですが、例外は「正しく扱う」ことで、プログラムの守り神になります。

  • 「何でもかんでも Catch しない」:意味のない `Catch` はバグを隠すだけです。
  • 「例外は情報の塊」:エラーメッセージだけでなく、エラーコードや関連するデータを持たせると、さらに強力な武器になります。

まずは、小さな業務ルール一つに対して、この `BusinessLogicException` を使ってみてください。コードがスッキリし、何より「自分の書いたロジックが意図通りに動いている」という実感が湧いてくるはずです。

VB.NETという強力なツールを手に、ぜひ「エラーを制御する楽しさ」を味わってください。応援していますよ!

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