【実務・中級編】【上級プロフェッショナル向け】FSO操作の全履歴をタイムスタンプ・実行ユーザー付きでトランザクション風に追跡する監査ログフレームワーク – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを掌握せよ:FSO監査ログフレームワークによる「破壊的変更」の完全制御

業務自動化の現場で最も恐ろしいのは、「何が起きたか不明なままファイルが消滅すること」だ。

VBScriptの`FileSystemObject (FSO)`は強力だが、その簡便さゆえに、エラーハンドリングを怠れば「ブラックボックス化」した破壊的ツールになり下がる。本稿では、プロフェッショナルとして業務基盤を支えるための、「監査ログ・フレームワーク」の設計思想と実装コードを伝授する。

—

なぜ「ベタ書きのFSO操作」が地雷なのか

多くのエンジニアは、単に `fso.DeleteFile` や `fso.MoveFile` をコードの随所に散りばめる。これは保守性の観点から自殺行為だ。

1. トレーサビリティの欠如: 誰が、いつ、どの権限でファイルを操作したかの履歴が残らない。
2. アトミック性の欠如: 操作に失敗した際、どこまで処理が進んだのかが不明確で、再実行時に重複エラーやデータ欠損を引き起こす。
3. ロールバックの不可能性: 変更前の状態(属性やパス)を記録していないため、障害発生時に手動復旧すら不可能になる。

これらを解決するのが、「操作を抽象化し、全てのトランザクションをログに焼き付ける」という設計アプローチだ。

—

監査ログフレームワークの設計:トランザクション的思考

本フレームワークは、以下の3つのレイヤーで構成する。

1. Wrapper Layer: FSOの直呼び出しを禁止し、必ずログ関数を経由させる。
2. Audit Layer: 実行前後でファイル属性(最終更新日時、サイズ、パス)をスナップショットする。
3. Storage Layer: 追記モード(Append)で、CSV形式等でログを記録する。

プロダクションコード:AuditFSO クラス

このコードを `.vbs` ファイルとしてインクルードすることで、全操作が監査可能になる。

‘ — AuditFSO Framework Core —
Class AuditFSO
Private fso, logPath, objShell

Private Sub Class_Initialize()
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set objShell = CreateObject(“WScript.Shell”)
‘ ログパスの設定(環境変数で制御するのがベスト)
logPath = “C:\Logs\FSO_Audit_” & DatePart(“yyyy”, Date) & “.csv”
End Sub

‘ ログ記録のプライベートメソッド
Private Sub WriteLog(action, target, status, details)
Dim ts, logLine
Set ts = fso.OpenTextFile(logPath, 8, True) ‘ 8: ForAppending
logLine = Now & “,” & objShell.ExpandEnvironmentStrings(“%USERNAME%”) & “,” & _
action & “,” & target & “,” & status & “,” & details
ts.WriteLine logLine
ts.Close
End Sub

‘ 安全なファイル削除関数
Public Sub SafeDeleteFile(filePath)
Dim fileObj, info
If fso.FileExists(filePath) Then
Set fileObj = fso.GetFile(filePath)
info = “Size:” & fileObj.Size & “|Created:” & fileObj.DateCreated

On Error Resume Next
fso.DeleteFile filePath, True
If Err.Number = 0 Then
WriteLog “DELETE”, filePath, “SUCCESS”, info
Else
WriteLog “DELETE”, filePath, “FAILED”, “Err:” & Err.Description
End If
On Error GoTo 0
Else
WriteLog “DELETE”, filePath, “SKIP”, “FileNotFound”
End If
End Sub

‘ 以下、Move, Copy等も同様のラッパーを実装する
End Class

—

プロフェッショナルが守るべき運用上の注意点

1. ログファイルの競合回避

複数プロセスから同時にログを書き込む場合、`OpenTextFile` がロックエラーを吐く可能性がある。高頻度で実行されるツールであれば、ログ書き込みを別スレッド(あるいは単一のログサービス用バッチ)にキューイングさせる設計が望ましいが、VBScript単体でやるなら、「リトライ処理」を必ず組み込むこと。

2. ファイル属性のスナップショット

削除や移動の前に `GetFile` で属性を取得しておくことは必須だ。特に「いつ、どのサイズだったか」というメタデータは、後日のフォレンジック(原因調査)において、システム管理者に非常に感謝される重要な資産となる。

3. ロールバックの戦略

VBScriptには自動的なトランザクションロールバック機能はない。そのため、破壊的な操作を行う前に、対象ファイルを「一時退避領域(Tempフォルダ)」に移動させ、全体の処理が成功した後に削除する「二段階コミット」に近い手法を推奨する。

—

結論:自動化とは「リスクを可視化すること」である

自動化エンジニアの仕事は、コードを書くことではない。「障害が起きた時に、どれだけ迅速に状況を把握し、回復できるか」という運用設計をコードに落とし込むことが真の価値である。

今回紹介したFSOラッパーを導入するだけで、君のツールは「動けば良いコード」から「信頼できるエンタープライズ品質の資産」へと昇華する。

さあ、今すぐ既存の直接的な `fso.DeleteFile` を検索し、この監査フレームワークに置き換えたまえ。その一歩が、君を「スクリプト書き」から「システムアーキテクト」へと変えるはずだ。

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