VBScriptを掌握せよ:独自設定ファイルを「爆速」でパースする職人の流儀
こんにちは。自動化の現場でVBScriptと長年付き合ってきたエンジニアです。
世の中にはJSONやXMLといった便利なフォーマットが溢れていますが、現場のレガシーな運用では「独自のテキストファイル」を読み込む必要に迫られることが多々ありますよね。
「マクロの記録」で生成されたコードを並べるだけの段階から一歩進んで、「設定ファイルとロジックを分離する」という設計思想を持つだけで、あなたのコードの保守性は劇的に向上します。今回は、VBScriptの真髄である`Scripting.Dictionary`を活用し、独自形式の設定ファイルを高速に解析するモジュールを伝授します。
—
1. なぜ「設定ファイル」を分離するのか?
コードの中にパスや設定値を直接書き込む(ハードコーディング)のは、現場では「罪」です。設定が変わるたびにソースを書き換えていては、ミスが起きるのは時間の問題。
今回作成するパーサーは、以下のような形式のファイルを読み込みます。
データベース接続情報
DB_SERVER = 192.168.1.10
DB_PORT: 1521
; 実行モード
DEBUG_MODE = TRUE
このように、`=` や `:` で区切られ、`#` や `;` でコメントアウトされたファイル。これを一瞬でメモリ上の辞書(Dictionary)に展開するのが、今回のミッションです。
—
2. 核心:Dictionaryオブジェクトの活用
VBScriptにおいて、設定値の保持に最も適しているのは `Scripting.Dictionary` です。
連想配列とも呼ばれるこのオブジェクトは、`Key`(名前)に対して `Value`(値)を紐付け、高速な検索を可能にします。
実装コード:ConfigParser.vbs
このコードをコピーして、`ConfigParser.vbs` として保存してください。
Option Explicit
‘ 設定ファイルをパースしてDictionaryを返す関数
Function LoadConfig(filePath)
Dim fso, file, line, pos, key, val
Dim dict : Set dict = CreateObject(“Scripting.Dictionary”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ ファイルが存在しない場合のガード節
If Not fso.FileExists(filePath) Then
Err.Raise 8, , “設定ファイルが見つかりません: ” & filePath
End If
Set file = fso.OpenTextFile(filePath, 1) ‘ 1 = ForReading
Do Until file.AtEndOfStream
line = Trim(file.ReadLine)
‘ 空行とコメント行(# または ; で始まる行)をスキップ
If line <> “” And Left(line, 1) <> “#” And Left(line, 1) <> “;” Then
‘ イコールかコロンで分割(簡易パーサー)
pos = InStr(line, “=”)
If pos = 0 Then pos = InStr(line, “:”)
If pos > 0 Then
key = Trim(Left(line, pos – 1))
val = Trim(Mid(line, pos + 1))
‘ Dictionaryに格納
dict.Add key, val
End If
End If
Loop
file.Close
Set LoadConfig = dict
End Function
‘ — 実行例 —
Dim config : Set config = LoadConfig(“settings.txt”)
WScript.Echo “サーバーアドレス: ” & config(“DB_SERVER”)
—
3. ここがプロのポイント:設計上の注意点
このコードを書く際、いくつか「現場で泣かないための知見」を共有します。
- `Trim` 関数の重要性:
テキストファイルには意図しないスペースやタブが混入しがちです。`Trim` を忘れると `key` が `” DB_SERVER”` となり、後続のプログラムで一致しなくなります。入力データは常に「汚れている」と想定しましょう。
- ガード節によるエラー処理:
`If Not fso.FileExists` のように、処理に入る前に前提条件をチェックする。これを怠ると、エラーが発生した際に「どこで落ちたか」が不明なコードになります。
- Dictionaryの検索性:
`dict.Exists(“DB_SERVER”)` メソッドを使えば、設定キーが存在するかどうかを事前に確認できます。プログラムが異常終了する前に、安全装置をかけておくのが職人の流儀です。
—
4. 初学者が陥りやすい罠と対策
1. オブジェクトの解放を忘れる:
`Set fso = Nothing` を書かなくてもVBScriptが自動で解放してくれますが、巨大なループ処理の中では明示的に解放する癖をつけましょう。メモリの挙動を意識することが、安定した自動化への第一歩です。
2. `Option Explicit` を書かない:
これだけは絶対に守ってください。この一行を書くことで、「変数の宣言忘れ」という初歩的なミスをVBScriptが厳しく指摘してくれるようになります。
—
まとめ:ここをクリアすれば、あなたはもう中級者
今回紹介した「テキストファイルを読み込み、Dictionaryに格納して利用する」という流れは、どんな複雑なシステムであっても基本は同じです。
このロジックを理解できたなら、あなたはもうマクロの記録に頼る初心者ではありません。設定とロジックを切り離すことで、あなたの自動化ツールは「使い捨てのスクリプト」から「堅牢な業務システム」へと進化します。
ぜひ、自分の業務に合わせてカスタマイズしてみてください。何か詰まったら、いつでもまた聞きに来てくださいね。応援しています!
