【入門編】【実務中級者向け】2つの設定テキスト(INI/CONF)をFSOで比較し、不足しているキーと値だけをマージする差分統合VBS – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

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に標準搭載されている強みは今も変わりません。「環境を選ばず、即座に動く」。これこそが業務自動化エンジニアにとって最強の武器です。

このコードを自分の環境で動かし、「動いた!」という感動を味わってください。そこから君のエンジニアとしての物語が、また一つ深く動き出します。応援していますよ。

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