【入門編】【独自構文設定ファイルパース】JSON/INI以外のKeyValue形式テキストを高速解析する自作設定ファイル読み込みモジュール – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

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に格納して利用する」という流れは、どんな複雑なシステムであっても基本は同じです。

このロジックを理解できたなら、あなたはもうマクロの記録に頼る初心者ではありません。設定とロジックを切り離すことで、あなたの自動化ツールは「使い捨てのスクリプト」から「堅牢な業務システム」へと進化します。

ぜひ、自分の業務に合わせてカスタマイズしてみてください。何か詰まったら、いつでもまた聞きに来てくださいね。応援しています!

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