【入門編】【ポーリング処理】FileSystemObject とループ処理による特定フォルダの新規ファイル追加リアルタイム監視 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptの常識を覆す:フォルダ監視の「呼吸」をコードに刻む

こんにちは。業務自動化の世界へようこそ。
Excelマクロ(VBA)の記録ボタンを押し終え、次なるステップとして「Windowsの裏側で静かに働く常駐プログラム」を作りたいと考えたあなたへ。

VBScriptは、今やレガシーと呼ばれることもありますが、OSの深淵を叩くにはこれ以上ないほど軽量でパワフルな言語です。今回は、特定のフォルダを監視し、ファイルが置かれた瞬間に息を吹き返す「リアルタイム監視スクリプト」の極意を伝授します。

1. なぜ「ポーリング」なのか?

ファイル監視には「FileSystemWatcher」のような高度なイベント駆動もありますが、VBScriptの真骨頂は「シンプルであること」です。

一定時間ごとにフォルダを覗きに行く「ポーリング処理」は、以下の3つの要素で構成されます。

  • 監視対象の特定: `FileSystemObject` の活用
  • 息継ぎ: `WScript.Sleep` によるCPU負荷の抑制
  • 状態保持: ループを回し続けるための `Do…Loop`

ここがプロの知見:Sleepの魔力

初心者が陥りがちなミスは、`Sleep` を短くしすぎてCPUを焼き尽くすことです。1秒(1000ミリ秒)程度のインターバルで十分です。OSは人間が思っている以上に賢く、1秒の余裕があれば他のタスクを完璧にこなします。

2. 実装:フォルダ監視の設計図

以下のコードは、指定フォルダを監視し、ファイルを発見したら「処理済みフォルダ」へ移動させてから、あなたのビジネスロジックを呼び出す構成です。

‘ 監視用設定
Const WATCH_FOLDER = “C:\Input”
Const DONE_FOLDER = “C:\Output”
Const SLEEP_TIME = 1000 ‘ 1秒間隔でチェック

Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ 監視ループ開始
Do
‘ フォルダが存在するか確認
If fso.FolderExists(WATCH_FOLDER) Then
Set folder = fso.GetFolder(WATCH_FOLDER)

‘ フォルダ内の全ファイルを走査
For Each file In folder.Files
‘ 【重要】ファイルのロック対策:移動を試みることで使用中か判断する
On Error Resume Next
file.Move DONE_FOLDER & “\” & file.Name

If Err.Number = 0 Then
‘ 移動成功=書き込み完了とみなして処理開始
Call ProcessFile(DONE_FOLDER & “\” & file.Name)
Else
‘ 移動失敗=他プロセスが編集中と判断し、スキップ
Err.Clear
End If
On Error GoTo 0
Next
End If

‘ CPUを休ませる(重要!)
WScript.Sleep SLEEP_TIME
Loop

‘ ここに業務ロジックを記述
Sub ProcessFile(filePath)
WScript.Echo “処理開始: ” & filePath
‘ 実際の処理(ファイル読み込みやAPI送信など)をここに書く
End Sub

3. なぜこのコードが「現場」で生き残るのか?

A. 「移動」によるロック対策

ファイルをコピーではなく「移動(Move)」で処理するのは、プロの定石です。

  • コピーだと: 処理中に元のファイルが更新されると、不整合が起きる。
  • 移動だと: OSの排他制御を利用できる。もしコピー中のファイルであれば `file.Move` でエラーが発生するため、それを `On Error Resume Next` で捕捉し、「まだ処理すべきではない」と判断できるのです。

B. `On Error Resume Next` の正しい使い方

エラーを握りつぶすのは悪手ですが、「他プロセスによるロック」という一時的な事象を判定するために使うのは正攻法です。エラーが出たら `Err.Clear` を忘れずに行うことが、スクリプトを長時間安定稼働させる秘訣です。

4. 陥りやすいエラーと回避策

1. 無限ループの停止方法:
このスクリプトは永遠に動き続けます。停止させるには、タスクマネージャーから `wscript.exe` を探して終了させる必要があります。「止める方法」を先に知っておくのが、自動化エンジニアの嗜みです。
2. パスの記述:
フォルダパスの末尾に `\` を入れ忘れるとエラーになります。`fso.BuildPath` メソッドを使うと、パスの連結を安全に行えます。
3. 権限問題:
スクリプトを実行するユーザーに、監視フォルダの「書き込み権限」が必要です。移動ができない場合、コードの不備ではなくOSの権限設定を疑ってください。

最後に:自動化の先にあるもの

このスクリプトは、単なる「ファイル監視」ではありません。あなたの代わりに24時間働いてくれる「デジタル・エージェント」の雛形です。

まずはこのコードをコピーして、`WATCH_FOLDER` のパスを自分の環境に合わせてみてください。コンソールに「処理開始」のメッセージが出た瞬間、あなたの業務自動化は新しいステージへ突入します。

「動いた!」という感動を大切に。そこから先は、API連携やデータベース接続など、無限の可能性が広がっています。応援していますよ。

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