【入門編】【エラーハンドリング】On Error Resume Next と Err オブジェクトによる堅牢な例外処理モジュールの構築 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを「使いこなす」ための極意:堅牢なエラーハンドリングでスクリプトを止めるな

こんにちは。システム自動化の現場で長年戦ってきたエンジニアです。

VBScriptを書き始めた多くの人が最初にぶつかる壁、それは「ちょっとしたエラーでスクリプトが即死する」という絶望です。画面に表示されるダイアログボックス一つで、数時間かかるはずの自動処理が停止する……これほど悲しいことはありません。

今日は、VBScriptにおける「エラーハンドリングの真髄」をお教えします。これをマスターすれば、あなたのスクリプトはただの「動くコード」から、現場で信頼される「堅牢なツール」へと進化します。

1. なぜ `On Error Resume Next` を使うのか?

VBScriptにおいて、例外処理の出発点は `On Error Resume Next` です。
これは、「エラーが発生しても止まるな、次の行へ行け」という命令です。

「エラーを無視するのか?」と不安になるかもしれませんが、違います。「エラーを無視するのではなく、エラーの発生を検知するための権利を自分で握る」のです。

陥りがちな罠

初心者は `On Error Resume Next` を書くだけで満足しがちですが、これだけでは「沈黙のバグ」を生むだけです。「なぜ動かないのか分からない」という状態が一番の悪夢です。

2. プロ仕様の構造化エラーハンドリング・モジュール

エラーを「捕まえて、記録して、正しく処理する」。この3ステップを自動化する仕組みを構築しましょう。

以下に、現場でそのまま使える「汎用エラーログ関数」を実装したテンプレートを提示します。

‘ — メイン処理 —
On Error Resume Next ‘ エラー監視を開始

‘ わざとエラーを発生させる例:存在しないファイルへのアクセス
Dim fso, file
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file = fso.OpenTextFile(“C:\Dummy\NotExists.txt”, 1)

‘ エラーをチェックする
If Err.Number <> 0 Then
Call LogError(“ファイル読み込みエラー”, Err)
‘ ここで終了処理やリトライ処理を記述する
Err.Clear ‘ 重要:エラー情報をクリアしないと次の行まで引きずる
End If

On Error Goto 0 ‘ エラー監視を解除(標準の動作に戻す)

‘ — 汎用エラーログ関数 —
Sub LogError(context, objErr)
Dim fso, logFile, ts
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ ログファイルへの追記(なければ新規作成)
Set logFile = fso.OpenTextFile(“C:\Logs\ErrorLog.txt”, 8, True)

‘ 発生時刻、状況、エラー番号、詳細を記録
ts = Now & ” [ERROR] ” & context & vbCrLf
ts = ts & “Number: ” & objErr.Number & vbCrLf
ts = ts & “Source: ” & objErr.Source & vbCrLf
ts = ts & “Description: ” & objErr.Description & vbCrLf
ts = ts & “———————————–”

logFile.WriteLine(ts)
logFile.Close

‘ 必要に応じてユーザーに通知
WScript.Echo “エラーが発生しました。ログを確認してください。”
End Sub

3. コードの解説:ここがプロのこだわり

このコードには、現場のエンジニアなら必ず守る「3つの鉄則」が詰まっています。

1. `Err.Number <> 0` による判定
VBScriptの `Err` オブジェクトは、エラーが発生した瞬間にその詳細を保持します。0であれば正常、それ以外なら異常。このシンプルな判定が全ての基礎です。
2. `Err.Clear` の徹底
これを忘れると、最初のエラーがずっと残り続け、後続の正常な処理まで「エラー」として扱われるという悲劇が起きます。エラーを処理したら、必ずクリアする。 これが鉄則です。
3. `On Error Goto 0` で閉じる
エラー監視は、必要な場所だけで行うのがスマートです。監視範囲を限定することで、思わぬバグが隠蔽されるリスクを最小限に抑えます。

4. 現場で生き残るためのアドバイス

VBScriptは古い言語と言われますが、Windowsの管理業務においては今なお最強のツールです。

  • 「何が起きたか」を饒舌に記録する:

ログファイルには `Err.Description` だけではなく、その処理が「どこで(Context)」起きたかを必ず引数として渡すようにしてください。ログを見た瞬間に原因が特定できるかどうかが、プロとアマの分かれ道です。

  • 例外処理を「隠蔽」に使わない:

「エラーを握りつぶしてなかったことにする」のは悪手です。必ず「ログに書く」「管理者にメールする」「処理をリトライする」といった、明確なアクションを伴わせてください。

まとめ:あなたのスクリプトは進化する

エラーハンドリングを構造化するということは、「システムに起きたトラブルを、自分の制御下に置く」ということです。

最初は難しく感じるかもしれませんが、このテンプレートをコピー&ペーストして、あなたのプロジェクトに合わせてカスタマイズしてみてください。一度この「守りの型」を身につければ、どんな複雑なバッチ処理を組んでも怖くはありません。

ここをクリアしたあなたは、もう「マクロの記録」を使っていた頃のあなたとは別次元にいます。自信を持って、次の自動化へ踏み出しましょう!

もし分からないことがあれば、いつでも聞いてくださいね。応援しています。

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