【入門編】【初心者向け】ReadAll・ReadLine・Readメソッドの挙動比較とファイルサイズに応じた使い分けガイド – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク
スポンサーリンク

ファイル読み込みの「最適解」を導き出す:FSOの3つのメソッドを使いこなす極限の知見

こんにちは。自動化の荒波を乗り越えようとしているエンジニアの皆さん。
マクロの記録機能で「動くもの」を作れるようになったのは、素晴らしい第一歩です。でも、プロの現場では「動けばいい」だけでは足りません。「いかに安全に、いかに効率的に、いかにリソースを浪費せずに動かすか」。これが求められるのです。

今日は、VBScriptにおけるファイル操作の心臓部、FileSystemObject (FSO) を使ったテキスト読み込みの戦術についてお話ししましょう。

テキストファイルを読み込むとき、あなたはなんとなく「全部まとめて読み込んじゃえ」と考えていませんか? もしそのファイルが数GB(ギガバイト)あったら……あなたのプログラムは、メモリ不足で悲鳴を上げて止まってしまうでしょう。

今回は、`ReadAll`、`ReadLine`、`Read` という3つのメソッドの違いを、エンジニアの視点で徹底的に解剖していきます。ここをマスターすれば、あなたは「なんとなく書く初心者」から「設計ができるエンジニア」へと一歩踏み出せますよ。

1. 登場人物の紹介:3つの読み込みメソッド

FSOでファイルを開くと、私たちは `TextStream` というオブジェクトを手にします。このオブジェクトが提供する「読み込みの武器」が、以下の3つです。

メソッド 読み込み方 特徴
`ReadAll` 一括読み込み ファイルの全内容を、一気にメモリに叩き込む
`ReadLine` 行単位読み込み 改行コード(Enter)を見つけるまで、1行ずつ読み込む
`Read` 文字数指定読み込み 指定した文字数分だけ、生データを読み込む

それぞれの挙動と、エンジニアが意識すべき「重み」を見ていきましょう。

2. 各メソッドの深層解剖

① `ReadAll`:スピード狂の全量摂取

`ReadAll` は、ファイルの最初から最後までを、まるで飲み物のように一気に飲み干すメソッドです。

  • メリット: コードが非常にシンプル。ファイル全体を一度に加工したい場合、非常に高速です。
  • デメリット: 「メモリ消費量」がファイルサイズと直結します。 1GBのファイルを `ReadAll` すると、プログラムは即座に1GB以上のメモリを確保しようとします。PCのスペックを超えると、プログラムはクラッシュします。
  • 向いているケース: 設定ファイルや、サイズが数KB〜数MB程度と分かっている小さなファイル。

② `ReadLine`:慎重派の堅実な進撃

`ReadLine` は、1行読み込んだら一旦処理を戻す、というスタイルです。

  • メリット: メモリ消費が極めて安定しています。 どんなに巨大なファイル(例:10GBのログファイル)であっても、メモリに乗るのは「今読んでいるその1行分」だけです。
  • デメリット: ループ(繰り返し処理)が必要になるため、`ReadAll` に比べるとコードが少し長くなり、処理のオーバーヘッド(微小な遅延)が発生します。
  • 向いているケース: ログファイルの解析、巨大なCSVの処理、ファイルサイズが予測できない場合。

③ `Read`:精密機械のピンポイント操作

`Read(n)` は、引数に渡した `n` 文字分だけを読み取ります。

  • メリット: 行という概念を無視して、純粋に「n文字」を扱えます。固定長フォーマット(例:1文字目が日付、2〜5文字目がID…という決まった形式)のファイルを扱う際に最強の威力を発揮します。
  • デメリット: 読み込み位置の管理を自分で行う必要があり、使いどころを間違えるとデータの整合性が崩れやすいです。
  • 向いているケース: バイナリに近い形式のテキスト、固定長データ、特定の文字位置だけを抜き出したい時。

3. 【実践】エンジニアが書くべき「賢い」コード例

それでは、実際に現場で使えるコードを見てみましょう。単に動くだけではなく、「エラーハンドリング(例外処理)」と「オブジェクトの解放」を組み込んだ、プロの書き方です。

パターンA:安全性を重視した「ReadLine」によるループ処理

巨大なファイルでも絶対に落ちない、最も推奨される書き方です。

' ============================================================
' テーマ: 巨大なファイルでも安全に1行ずつ読み込む
' ============================================================
Option Explicit

Dim fso, ts, filePath, lineText

filePath = "C:\temp\large_log_file.txt" ' 対象ファイルパス

Set fso = CreateObject("Scripting.FileSystemObject")

' ファイルの存在チェック(これ、基本中の基本です!)
If Not fso.FileExists(filePath) Then
    WScript.Echo "Error: ファイルが見つかりません。"
    WScript.Quit
End If

' ファイルを読み取り専用(1)で開く
Set ts = fso.OpenTextFile(filePath, 1)

On Error Resume Next ' 予期せぬエラーへの備え

' ファイルの終端(EOF)に達するまでループ
Do Until ts.AtEndOfStream
    ' 1行読み込み
    lineText = ts.ReadLine
    
    ' --- ここに解析処理を書く ---
    ' 例: "ERROR" という文字が含まれていたら表示
    If InStr(lineText, "ERROR") > 0 Then
        WScript.Echo "見つかりました: " & lineText
    End If
    ' --------------------------
Loop

If Err.Number <> 0 Then
    WScript.Echo "実行中にエラーが発生しました: " & Err.Description
End If

' 重要:使い終わったオブジェクトは必ず閉じる!
ts.Close
Set ts = Nothing
Set fso = Nothing

WScript.Echo "処理が完了しました。"

パターンB:手軽さを重視した「ReadAll」による一括処理

設定ファイルのような、確実に小さいことが分かっている場合です。

' ============================================================
' テーマ: 小さな設定ファイルを一気に読み込む
' ============================================================
Option Explicit

Dim fso, ts, filePath, allContent

filePath = "C:\temp\config.ini"
Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(filePath) Then
    Set ts = fso.OpenTextFile(filePath, 1)
    
    ' 全てを一気に読み込む(ファイルが巨大だとここで死にます)
    allContent = ts.ReadAll
    
    ts.Close
    
    ' 内容の表示
    WScript.Echo "設定内容: " & vbCrLf & allContent
Else
    WScript.Echo "ファイルが存在しません。"
End If

Set ts = Nothing
Set fso = Nothing

4. 究極の使い分けガイド(決定版)

迷ったら、この基準に従ってください。これがあなたのエンジニアとしての「判断基準」になります。

ファイルサイズ 推奨メソッド 理由
〜 1MB 未満 `ReadAll` コードが短く、速度も最速。メモリも気にならない。
1MB 〜 100MB `ReadLine` `ReadAll` でも動くが、安全のために `ReadLine` を推奨。
100MB 以上 `ReadLine` (必須) `ReadAll` は使うな。メモリ不足(Out of Memory)の引き金になる。
サイズ不明 `ReadLine` (必須) 「未知の巨大ファイル」はエンジニアにとって最大の敵です。
固定長データ `Read(n)` 文字数ベースの設計なら、これ以外の選択肢はありません。

最後に:ここをクリアすれば、基本はバッチリですよ

いかがでしたでしょうか?

「動くコード」を書くことと、「安定したコード」を書くことの間には、今回学んだような「リソース(メモリ)への意識」という大きな壁があります。

1. ファイルサイズを想像する
2. 適切なメソッドを選択する
3. 使い終わったら必ず `Close` する

この3ステップを習慣にするだけで、あなたの作る自動化スクリプトの信頼性は劇的に向上します。

さあ、次は実際に自分の手で、巨大なテキストファイルを作って試してみてください。理論と実践が結びついたとき、あなたは本当の意味でVBScriptを掌握したと言えるでしょう。

応援していますよ!

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