やあ。自動化の現場で汗を流している諸君、ようこそ。
VBScriptという言語は、一見すると古臭いレガシーなツールに見えるかもしれない。しかし、OSの深層に直接アクセスし、環境構築の最後の砦としてこれほど手軽で強力な武器は他にないんだ。
今回は、現場で最も頻出する「設定ファイル(INI形式)の動的書き換え」をテーマに、FSO(FileSystemObject)とRegEx(正規表現)を組み合わせた、「現場で生き残るための実装術」を伝授しよう。
—
1. なぜ「全行読み込み→メモリ処理→上書き」なのか
初心者はよく「ファイルを一行ずつ読んで、別のファイルに書き出す」という処理をしがちだ。これはメモリには優しいが、テンポラリファイルが散らかるし、何よりコードが冗長になる。
プロの自動化では、「対象ファイルをメモリに一気に吸い上げ、正規表現で一瞬で置換し、即座に上書きする」。これが最もクリーンで、かつ予期せぬエラー(ファイルの排他制御漏れなど)に強い設計なんだ。
—
2. 構成更新の心臓部:実装コード
まずは、何も考えずに動かせる「叩き台」を提示する。これをコピーして、`ConfigUpdater.vbs` として保存してほしい。
‘ — 設定変更スクリプト —
Option Explicit
Dim fso, filePath, targetKey, newValue, fileContent, regEx
‘ 1. 定義セクション
filePath = “C:\App\config.ini” ‘ 更新対象
targetKey = “MaxConnections” ‘ 検索したいキー
newValue = “100” ‘ 新しい値
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 2. ファイルの読み込み
If fso.FileExists(filePath) Then
‘ 全文を読み込む(ReadAllはメモリを消費するが、設定ファイル程度なら最適解)
fileContent = fso.OpenTextFile(filePath, 1).ReadAll
‘ 3. 正規表現による置換処理
‘ 解説:^は行頭、\sは空白許容、=の後ろを置換対象にする
Set regEx = New RegExp
regEx.Pattern = “(” & targetKey & “\s=\s).”
regEx.IgnoreCase = True
regEx.Global = True ‘ 全箇所置換(必要に応じてFalseに)
If regEx.Test(fileContent) Then
fileContent = regEx.Replace(fileContent, “$1” & newValue)
‘ 4. 上書き保存
fso.OpenTextFile(filePath, 2).Write fileContent
WScript.Echo “更新成功: ” & targetKey & ” を ” & newValue & ” に変更しました。”
Else
WScript.Echo “エラー: 指定したキーが見つかりません。”
End If
Else
WScript.Echo “エラー: ファイルが存在しません。”
End If
Set fso = Nothing
Set regEx = Nothing
—
3. コードの「魂」を解説する
このコードがなぜ優れているのか、3つのポイントに絞って解説しよう。
① `Option Explicit` は開発者の良心
これがあるだけで、変数の宣言忘れを防げる。VBScriptは適当に書いても動いてしまう言語だが、それが最大の罠だ。これを書くことで、君のコードは「プロの仕事」に昇格する。
② 正規表現(RegEx)の魔法
なぜ `InStr` で検索しないのか?それは、INIファイルには「空白の有無」や「コメントアウト」といったゆらぎがあるからだ。
`regEx.Pattern = “(” & targetKey & “\s=\s).” `
これを使えば、「Key = Value」でも「Key=Value」でも関係なく検知できる。`$1` を使ってキー名を保持したまま値だけ差し替えるのが、この手法の美学だよ。
③ ファイルモードの使い分け
- `1`: 読み込み専用(安全)
- `2`: 書き込み(上書き用)
- `8`: 追記用
今回は上書きなので `2` を使う。シンプルだろう?
—
4. 現場で陥りやすい「罠」への対策
文字コードの壁
Windowsの標準的なINIファイルはShift-JISであることが多いが、最近のツールはUTF-8で保存されていることもある。もし文字化けが発生したら、`ADODB.Stream` を使ってエンコーディングを指定して読み込む必要がある。これはまた別の機会に話そう。
「権限」の壁
自動化スクリプトが管理者権限で実行されていない場合、Cドライブ直下やProgram Files配下のファイルは書き換えられない。スクリプトを右クリックして「管理者として実行」することを忘れないように。
—
最後に:自動化は「道具」ではなく「思想」
設定ファイルを書き換えるだけの単純なスクリプトだが、これを一行ずつ手作業で直すのは、もう卒業だ。
君がこのコードを理解し、自分の環境に合わせて改変した瞬間、君は「作業者」から「エンジニア」へと一歩進化する。
VBScriptは古いかもしれない。しかし、「環境の細部にまでコードで介入する」という姿勢は、どの言語を使っても変わらない最高のスキルだ。
何か詰まったら、いつでも戻ってきなさい。君の自動化ライフを応援しているよ。
