こんにちは!VBScriptの世界へようこそ。
マクロの記録ボタンを押すだけの世界から一歩踏み出し、自分の手でシステムを裏から操る「真の自動化エンジニア」への扉を開いたあなたを、心から歓迎します。
業務を自動化していると、避けて通れないのが「ログファイルの操作」です。
「処理がどこまで進んだか記録したい」「エラー内容をテキストに残したい」「過去のログを読み込んで集計したい」――そんな現場の切実な要望に応えてくれるのが、今回解説するFSO(FileSystemObject)の `OpenTextFile` メソッドです。
ここをクリアすれば、VBScriptのファイル操作の基本はバッチリです!
難しく考えず、優しく紐解いていくので、一緒にマスターしていきましょう。
—
1. ファイル操作の主役「FSO」と「OpenTextFile」の正体
VBScriptでテキストファイルを扱うとき、私たちはFSO(FileSystemObject)という強力な専用ツールを召喚します。このFSOが持つ `OpenTextFile` というメソッドを使うことで、ファイルを開いて「読む・書く・追加する」という一連の作業ができるようになります。
まずは、基本の「3つのモード」をしっかり押さえましょう。ここが今日の最重要ポイントです。
OpenTextFileの3つのモード
`OpenTextFile(FilePath, IOMode, Create)` の第2引数(IOMode)には、以下の3つの定数(または数値)を指定します。
| モード名 | 定数 / 値 | 意味・挙動 | 現場での主な用途 |
| :— | :— | :— | :— |
| 読み取り | `ForReading` (1) | ファイルを「読む専用」で開く。
※ファイルが無いとエラーになります。 | 設定ファイルの読み込み、過去ログの解析 |
| 書き込み | `ForWriting` (2) | ファイルを「書く専用」で開く。
既存の内容はすべて消去(上書き)されます。 | 新規ログファイルの作成、データの初期化 |
| 追記 | `ForAppending` (8) | ファイルの「末尾に追加」する形で開く。
ファイルが無ければ自動作成されます。 | 日々のログ出力(最もよく使います!) |
> 先輩からのアドバイス:
> 現場で最も多用するのは、圧倒的に `ForAppending`(追記モード) です。過去のログを消さずに、新しい記録を下へ下へと積み上げていくため、エラーログや処理履歴の保存にはこれがマストになります。
—
2. 【実践】ログファイルを作成・追記・読み込みする完全コード
それでは、実際の現場でそのままコピペして使えるサンプルコードを見てみましょう。
同じフォルダ内に `app_log.txt` というテキストファイルを作成し、「書き込み」「追記」「読み込み」を順番に行うスクリプトです。
メモ帳に以下のコードを貼り付け、拡張子を `.vbs` (例: `log_sample.vbs`)にして保存し、実行してみてください。
‘ =================================================================
‘ ログファイルの作成・追記・読み込みをマスターする実践スクリプト
‘ =================================================================
Option Explicit
Dim fso, ts, logFile, lineData
logFile = “app_log.txt”
‘ 1. FSO(FileSystemObject)のインスタンスを生成
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ —————————————————————–
‘ 【ステップ1】書き込みモード(ForWriting: 2)でファイルを作成・初期化
‘ —————————————————————–
‘ 第3引数の「True」は「ファイルが無ければ新規作成する」という意味です。
Set ts = fso.OpenTextFile(logFile, 2, True)
‘ WriteLineを使うと、末尾に自動で改行が追加されて書き込まれます。
ts.WriteLine “— ログ処理を開始します —”
ts.WriteLine “【INFO】 起動確認OK”
ts.Close ‘ 使い終わったTextStreamオブジェクトは必ず閉じる!
WScript.Echo “ステップ1:新規ファイルを作成し、初期書き込みを行いました。”
‘ —————————————————————–
‘ 【ステップ2】追記モード(ForAppending: 8)でログを追加する
‘ —————————————————————–
‘ 現場で一番使うモードです。既存のログを消さずに末尾に追加します。
Set ts = fso.OpenTextFile(logFile, 8, True)
ts.WriteLine “【INFO】 ユーザー名: ” & WScript.CreateObject(“WScript.Network”).UserName
ts.WriteLine “【WARN】 臨時ファイル領域の容量が少なくなっています。”
ts.Close
WScript.Echo “ステップ2:既存のログに新しいデータを追記しました。”
‘ —————————————————————–
‘ 【ステップ3】読み取りモード(ForReading: 1)でファイルの内容を読み込む
‘ —————————————————————–
Set ts = fso.OpenTextFile(logFile, 1)
WScript.Echo “— 【ステップ3】ここからファイルの中身を表示します —”
‘ AtEndOfStreamが「True(ファイルの終端)」になるまで1行ずつ読み込む
Do While Not ts.AtEndOfStream
lineData = ts.ReadLine
‘ 読み込んだ1行をコンソールに出力
WScript.Echo “読込行: ” & lineData
Loop
ts.Close
‘ 後片付け
Set ts = Nothing
Set fso = Nothing
WScript.Echo “すべての処理が正常に完了しました!”
—
3. コードの重要ポイントと「初心者がハマる罠」
上記のコードをより深く理解するために、エンジニアが押さえておくべき重要なポイントを解説します。
① オブジェクトのクローズ(`.Close`)を忘れない
`OpenTextFile` を実行すると、OS側でファイルが「ロック(占有)」されます。
処理が終わった後に `ts.Close` を呼ばないと、他のプログラム(Excelやメモ帳など)がそのファイルを開けなくなったり、メモリリークの原因になります。「開いたら閉じる」はプログラミングの鉄則です。
② 読み込みの定番イディオム `AtEndOfStream`
ファイルを最初から最後まで読み込むときは、以下のワンセット(イディオム)を使います。
Do While Not ts.AtEndOfStream
lineData = ts.ReadLine ‘ 1行ずつ読み進める
‘ データの処理…
Loop
これによって、ファイルの行数が何行であっても、最後まで確実に読み込むことができます。ちなみに、ファイル全体を一気に一撃で読み込みたい場合は、`ts.ReadAll` というメソッドもありますが、巨大なログファイルを扱う場合はメモリを圧迫するため、上記の `ReadLine` を使うスタイルが安全かつ王道です。
③ 存在しないファイルを「読み取りモード」で開くと…?
もし `app_log.txt` が存在しない状態で、`OpenTextFile(logFile, 1)`(読み取りモード)を実行すると、VBScriptは容赦なく「ファイルが見つかりません (エラー 53)」という実行時エラーを吐いて強制終了します。
実務でプログラムを書く際は、事前に `If fso.FileExists(logFile) Then …` と存在チェックを入れるのが、ワンランク上のエンジニアの作法です。
—
まとめ
お疲れ様でした!今回は、FSOの `OpenTextFile` を用いたログファイルの作成・追記・読み込みの完全攻略について解説しました。
- 書き込み (`2`) は、すべてをリセットして新しく書き出すとき。
- 追記 (`8`) は、今ある記録の下にそっとデータを付け足していくとき(ログの主役!)。
- 読み取り (`1`) は、中身をチェックしたり解析したりするとき。
この3つのモードの使い分けさえ頭に入っていれば、業務で必要なテキスト処理の8割はカバーできたも同然です。ぜひご自身の環境でも動かして、ファイルの挙動を肌で感じてみてください。
ここをクリアしたあなたなら、もうVBScriptの基本はバッチリです。自信を持って次のステップへ進んでくださいね!
