【テクニカル・上級編】【初心者向け】FileExistsとWriteBlankLinesを組み合わせた視認性の高いログファイル自動整形入門 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptの真髄:FSOで綴る「可読性」という名のアーキテクチャ

VBScriptを「過去の遺物」と嘲笑う輩がいる。だが、Windowsの心臓部で数十年にわたり、一切の依存関係を求めず、ただ静かにシステムを支え続けてきたこの言語の真価を、彼らは知らない。

今回は、File System Object (FSO) を用いたログ生成の「美学」について語ろう。単なる書き込みではない。システム管理者が深夜の障害対応でログを開いたとき、その瞬間に状況を把握できるか否か。そこにエンジニアとしての矜持が宿る。

1. なぜ「WriteBlankLines」なのか

多くの初学者は、ログファイルに単に文字列を詰め込む。結果、ログは「情報の墓場」と化す。
`WriteBlankLines` メソッドは、単なる改行コードの挿入ではない。これは、ログストリームにおける「時間的・論理的区切り」を定義するアーキテクチャの境界線だ。

視認性の低いログは、監視対象ではない。それはただのノイズだ。

2. FileExistsを起点とする「防御的プログラミング」

ログ書き込みの直前、必ず `FileExists` を通す。これは単なる存在確認ではない。ログの追記モード(`ForAppending`)における排他制御や、ファイルポインタの生成コストを意識した設計だ。

以下のコードは、単なるログ出力関数ではない。堅牢なシステム運用のためのひな型である。

‘ 伝説的なチーフアーキテクトによるログ整形モジュール
Option Explicit

Const ForAppending = 8

Sub WriteSystemLog(strMessage, strLogPath)
Dim objFSO, objFile

‘ オブジェクト生成のオーバーヘッドを考慮し、最小限のスコープで扱う
Set objFSO = CreateObject(“Scripting.FileSystemObject”)

‘ ファイルが存在しない場合はヘッダーを付与する等のメタデータ管理が可能
Dim isNewFile
isNewFile = Not objFSO.FileExists(strLogPath)

‘ ファイルを開く(エラーハンドリングは本来必須)
Set objFile = objFSO.OpenTextFile(strLogPath, ForAppending, True)

‘ 初回作成時のみ見出しを挿入するなどの「構造化」
If isNewFile Then
objFile.WriteLine “— LOG START: ” & Now() & ” —”
objFile.WriteBlankLines 1
End If

‘ メッセージと空行の挿入による視認性向上
objFile.WriteLine “[” & Now() & “] ” & strMessage
objFile.WriteBlankLines 1

‘ 厳密なメモリ解放。VBScriptにおいてSet Nothingを怠ることは、
‘ 長時間稼働するバックグラウンド処理でのメモリリークを招く
objFile.Close
Set objFile = Nothing
Set objFSO = Nothing
End Sub

3. チーフアーキテクトの視点:パフォーマンスと保守性

このコードには、現場で生き残るための「最適化の知見」が詰まっている。

  • メモリの解放: VBScriptは参照カウント方式でガベージコレクションを行うが、大規模なバッチ処理において `Set Nothing` を明示しないのは怠慢だ。特に COM オブジェクトは、明示的に解放することで Windows のリソースプールを確実に開放できる。
  • 構造化の恩恵: `WriteBlankLines 1` を挟むだけで、ログの読みやすさは劇的に変わる。後のテキスト解析ツール(PowerShellの `Get-Content` など)でログを拾い上げる際、空行が「レコードの区切り」として機能するのだ。
  • レガシー環境での共存: このコードはWindows 2000世代からWindows Server 2022まで、全く同じ振る舞いを保証する。環境依存性を極限まで排除した、ポータビリティの高いコードこそが、真の資産となる。

4. 最後に:コードは「対話」である

ログはシステムが発する唯一の言語だ。その言語を丁寧に整えることは、将来の自分、あるいは後任のシステム管理者が直面するであろう「絶望的なデバッグ作業」を救うことと同義である。

VBScriptは古いかもしれない。だが、そこで培った「リソースを制御し、情報の構造を設計する」という思考は、どのモダンな言語に行こうとも変わらない。

次は、ADODB.Streamを用いたログの文字コード変換と、WMIによるログローテーションの自動化について深掘りするとしよう。……準備はいいか?

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