VBScriptで設定ファイルを賢く統合せよ!FSOを使いこなす「差分マージ」の極意
こんにちは。自動化の現場でVBScriptと長年向き合ってきた、君の技術的メンターです。
「新しい環境に移行するたびに、設定ファイル(INIやCONF)を一つずつ手作業で書き写している……」
もし君が今そんな退屈な作業に時間を溶かしているなら、今日で卒業しましょう。
今回は、「新旧2つの設定ファイルを比較し、不足している項目だけを自動で追記する」という、実務で死ぬほど役立つスキルを授けます。VBScriptの心臓部である「FileSystemObject(FSO)」を使いこなし、泥臭い作業をエレガントな自動化へ昇華させましょう。
—
1. なぜ「設定ファイルの統合」が重要なのか?
システムをアップデートする際、設定ファイルは「新機能が追加されて肥大化」することがよくあります。しかし、ユーザーの環境設定(IPアドレスやパスワードなど)が書かれた旧ファイルをそのまま捨ててしまうと、再設定の地獄が待っています。
「必要な項目だけを自動で追加し、既存の設定は死守する」
このロジックを組めるようになれば、君はもう「マクロの記録」で右往左往する初心者ではありません。現場の信頼を勝ち取るエンジニアの第一歩です。
—
2. 差分統合スクリプトの全貌
まずはコードを見てみましょう。これをそのまま`.vbs`ファイルとして保存すれば、即戦力として機能します。
Option Explicit
‘ — 設定エリア —
Dim fso, oldFile, newFile, logFile
Dim oldPath, newPath, outputPath
oldPath = “C:\Config\old.ini”
newPath = “C:\Config\new.ini”
outputPath = “C:\Config\merged.ini”
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 設定ファイルを辞書オブジェクトで読み込む
Dim oldDict, newDict
Set oldDict = LoadToDict(oldPath)
Set newDict = LoadToDict(newPath)
‘ 新しい設定を旧設定にマージ
Dim key
For Each key In newDict.Keys
If Not oldDict.Exists(key) Then
‘ 旧ファイルに存在しないキーなら追加
oldDict.Add key, newDict(key)
End If
Next
‘ 結果を書き出し
Dim f
Set f = fso.CreateTextFile(outputPath, True)
For Each key In oldDict.Keys
f.WriteLine key & “=” & oldDict(key)
Next
f.Close
MsgBox “設定の統合が完了しました!”, vbInformation
‘ — 補助関数:ファイルを辞書に読み込む —
Function LoadToDict(path)
Dim dict, ts, line, parts
Set dict = CreateObject(“Scripting.Dictionary”)
If fso.FileExists(path) Then
Set ts = fso.OpenTextFile(path, 1) ‘ 1=ForReading
Do Until ts.AtEndOfStream
line = ts.ReadLine
If InStr(line, “=”) > 0 Then
parts = Split(line, “=”, 2)
dict.Add Trim(parts(0)), Trim(parts(1))
End If
Loop
ts.Close
End If
Set LoadToDict = dict
End Function
—
3. コードの「ここが本質」:初心者が躓くポイント
① なぜ `Scripting.Dictionary` を使うのか?
配列でファイルを比較しようとすると、ループが二重・三重になり、コードはスパゲッティ化します。`Dictionary`オブジェクトを使えば、`Exists`メソッドでキーの有無を一瞬で判定できます。これが「メモリ上で効率的に処理する」という自動化の定石です。
② `Split(line, “=”, 2)` の意味
設定ファイルには「Key=Value」という形式が多いですが、値の中に「=」が含まれているケースを考慮しなければなりません。第3引数の `2` は「最大2つまで分割する」という意味。これにより、値の中に `=` があっても正しく分割できます。これが経験の差が出る細部です。
③ 陥りやすいエラー:文字コードの罠
VBScriptの標準機能は、基本的に「Shift-JIS」を前提としています。もし新しい設定ファイルが「UTF-8(BOMなし)」などで作成されていると、文字化けや読み込みエラーが発生します。
実務では、`ADODB.Stream` オブジェクトを使って文字コードを明示的に指定して読み込むのがプロの流儀ですが、まずはこのコードで「ファイルの構造を理解する」ことから始めてください。
—
4. さあ、次のステップへ
このスクリプトは、単なる「差分統合」以上の可能性を秘めています。
- 応用編1: 差分があった項目だけをログファイルに吐き出し、ユーザーに「何が追加されたか」を通知する。
- 応用編2: `WScript.Arguments` を使って、ドラッグ&ドロップでファイルをマージできるように改造する。
VBScriptは古くからある言語ですが、OSに標準搭載されている強みは今も変わりません。「環境を選ばず、即座に動く」。これこそが業務自動化エンジニアにとって最強の武器です。
このコードを自分の環境で動かし、「動いた!」という感動を味わってください。そこから君のエンジニアとしての物語が、また一つ深く動き出します。応援していますよ。
