【入門編】【テキスト操作入門】OpenTextFileを用いたログファイルの作成・追記・読み込みモードの完全攻略 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは!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の基本はバッチリです。自信を持って次のステップへ進んでくださいね!

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