こんにちは。自動化の現場で泥臭いトラブルを何度も乗り越えてきた、一人のエンジニアとしてお話しします。
君が今、長大な設定ファイルと格闘し、その中の「ノイズ」を消し去りたいと考えているのなら、それは素晴らしい兆候です。不要なコメントや空行は、マシンの可読性を下げるだけでなく、人間の集中力をも奪うからです。
今日は、Windowsの標準装備であるVBScript(FSO: FileSystemObject)を使い、設定ファイルを「純粋な設定値の塊」へと昇華させる魔法のレシピを授けましょう。
—
1. なぜ「FSO」でなければならないのか?
VBScriptには多くのオブジェクトがありますが、ファイル操作において`FileSystemObject`(以下、FSO)は絶対王者です。
- なぜFSOか: OS標準のAPIを直接叩くため、余計なライブラリのインストールが一切不要。どんなWindows環境でも、テキストエディタ一つで動かせるからです。
- メモリ効率: ファイル全体を一気に読み込まず、行単位でストリーム処理することで、数GBある巨大なログファイルや設定ファイルでも、メモリを圧迫せずに瞬時に処理できます。
—
2. 実践:設定ファイルクリーンアップ・スクリプト
それでは、設定ファイルを読み込み、`#`や`//`で始まるコメント行、および空行を除去して出力するスクリプトを公開します。
‘ クリーンアップ設定
Const ForReading = 1
Const ForWriting = 2
Dim fso, inputFile, outputFile
Dim inputPath, outputPath
Dim line, trimmedLine
‘ ファイルパスの設定(環境に合わせて変更してください)
inputPath = “config.conf”
outputPath = “config_cleaned.conf”
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ ファイル存在チェック(初学者が忘れがちな鉄則!)
If fso.FileExists(inputPath) Then
Set inputFile = fso.OpenTextFile(inputPath, ForReading)
Set outputFile = fso.CreateTextFile(outputPath, True)
Do Until inputFile.AtEndOfStream
line = inputFile.ReadLine
trimmedLine = Trim(line) ‘ 前後の空白を除去
‘ ここが核心:コメント行と空行の判定
‘ # または // で始まる行、かつ空行ではないものを抽出
If Len(trimmedLine) > 0 Then
If Left(trimmedLine, 1) <> “#” And Left(trimmedLine, 2) <> “//” Then
outputFile.WriteLine trimmedLine
End If
End If
Loop
inputFile.Close
outputFile.Close
WScript.Echo “クリーンアップ完了!”
Else
WScript.Echo “エラー: 設定ファイルが見つかりません。”
End If
Set fso = Nothing
—
3. このコードを読み解くための3つの鍵
初心者が陥りやすいポイントを、先輩として解説します。
① `Trim()` の重要性
設定ファイルには、行頭にスペースやタブが入っていることがよくあります。`Trim()`を忘れると、`Left(line, 1)`で判定する際に「スペース」が先頭に来てしまい、コメント判定に失敗します。「データは常に汚れている」と想定するのがエンジニアの流儀です。
② `AtEndOfStream` でループを回す
`ReadAll`で全データをメモリに読み込むのは、ファイルが小さい時は楽ですが、巨大なファイルでは致命的です。`ReadLine`を使い、一行ずつ処理して書き出す。この「ストリーム処理」の癖をつけるだけで、君のコードの質は劇的に向上します。
③ オブジェクトの解放(後始末)
スクリプトの最後で `Set fso = Nothing` をしていますね。VBScriptは終了時に自動解放されますが、大規模なバッチ処理を行う場合、明示的に解放する習慣をつけることで、メモリリークのリスクを最小化できます。
—
4. 陥りやすいエラーとその対策
- 「書き込み権限がありません」エラー:
出力先フォルダに書き込み権限がないか、あるいは出力先ファイルを別のプログラム(Excel等)で開いていませんか?VBScriptは排他制御に弱いため、ファイルは必ず閉じておきましょう。
- 文字化け問題:
FSOはデフォルトで「システム標準のエンコード(Shift-JISなど)」で読み込みます。もしUTF-8の設定ファイルを扱う場合は、`ADODB.Stream` オブジェクトを使う必要があります。まずはこのコードで「読み書きの感覚」を掴み、次にステップアップしましょう。
—
最後に:自動化の真髄
「設定ファイルを綺麗にする」というのは、単なる掃除ではありません。「ノイズを排除し、本質的な設定値だけをシステムに認識させる」という、エンジニアとしての哲学的な行為です。
このコードをコピー&ペーストして、拡張子を `.vbs` に変えて保存してみてください。ダブルクリックするだけで、君のPCが賢く仕事をしてくれるはずです。
ここをクリアした君なら、次はADODB.Streamを使った高度なファイル操作や、WMIを使ったOS情報の取得など、さらに深淵な自動化の世界へ進めるはずです。応援していますよ!
