【実務・中級編】【作業領域自動作成】実行日付(YYYYMMDD)ベースの動的作業フォルダ作成と古い作業領域の自動退避 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを支配せよ:日次バッチを「自動化の聖域」に変えるフォルダ構築術

現場の諸君、今日も泥臭いスクリプトと格闘しているか?

「毎日同じフォルダを作って、古いファイルを移動する」。そんな単純作業に時間を浪費するのはもう終わりにしよう。VBScriptにおける`Scripting.FileSystemObject`(FSO)は、古臭い技術だと思われがちだが、OSの深淵に直接アクセスできる強力な武器だ。

今回は、「実行日付ベースの自動生成」と「過去資産の安全な退避」を、バグゼロで実現する堅牢なアーキテクチャを伝授する。

—

1. なぜ「手作業」がシステムの死を招くのか

多くの現場では、バッチ処理の冒頭にハードコードされたパスを書いている。だが、それは「技術的負債」の温床だ。

  • ハードコーディングの弊害: 環境が変われば即座に沈黙する。
  • 例外処理の欠如: フォルダが既に存在する場合、FSOは平然とエラーを吐く。
  • クリーンアップの不備: Archive作業を怠れば、ディスクはゴミの山となり、検索性は死に絶える。

我々が目指すべきは、「今日という日付を自ら認識し、過去の遺産を整理し、自らを構築する自律的なスクリプト」だ。

—

2. 堅牢な作業領域構築のためのプロダクションコード

このコードは、単に動くだけではない。エラーを事前に防ぎ、ログ出力の起点となるよう設計している。

‘ =================================================================
‘ Script Name: PrepareWorkspace.vbs
‘ Description: 日付ベースの作業フォルダ作成と過去フォルダの退避
‘ =================================================================
Option Explicit

Dim fso, baseDir, archiveDir, targetFolder, dateStr
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ — 設定項目 —
baseDir = “C:\Work\BatchProcess”
archiveDir = baseDir & “\Archive”
dateStr = Year(Date) & Right(“0” & Month(Date), 2) & Right(“0” & Day(Date), 2)
targetFolder = baseDir & “\Build_” & dateStr

‘ — メイン処理 —
Call CreateDirectoryStructure()

Sub CreateDirectoryStructure()
On Error Resume Next

‘ 1. ベースディレクトリの確認
If Not fso.FolderExists(baseDir) Then fso.CreateFolder(baseDir)

‘ 2. Archiveフォルダの準備
If Not fso.FolderExists(archiveDir) Then fso.CreateFolder(archiveDir)

‘ 3. 本日のフォルダが既に存在するか確認
If fso.FolderExists(targetFolder) Then
WScript.Echo “Info: 本日のフォルダは既に存在します。”
Else
‘ 過去フォルダをArchiveへ移動(Build_で始まるフォルダを対象)
Dim folder, f
Set folder = fso.GetFolder(baseDir)
For Each f In folder.SubFolders
If Left(f.Name, 6) = “Build_” Then
f.Move archiveDir & “\” & f.Name
End If
Next

‘ 本日のフォルダ作成
fso.CreateFolder(targetFolder)
WScript.Echo “Success: ” & targetFolder & ” を作成しました。”
End If

If Err.Number <> 0 Then
WScript.Echo “Critical Error: ” & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
End Sub

—

3. アーキテクトが教える「陥りやすい罠」と対策

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

VBScriptにおいてエラーハンドリングを怠るのは自殺行為だ。だが、闇雲に使うな。「ここから先は例外が発生する可能性がある」と明確なスコープを定義し、処理が終われば直ちに `On Error GoTo 0` で制御を戻す。これがプロの流儀だ。

2. パス操作の柔軟性

`\`(円記号)の扱いに気をつけろ。パスを結合する際、手動で文字を連結すると必ずどこかで `\\` が発生する。本来であれば `fso.BuildPath` メソッドを使うのが最も安全だ。大規模開発では、パス生成を一元管理する関数を一つ作っておくことを推奨する。

3. 排他制御の意識

もしこのスクリプトがWebアプリや常駐サービスから呼ばれる場合、移動中のファイルにアクセスが発生する可能性がある。本番環境で「ファイルが使用中です」というエラーが出るなら、移動の前に `fso.FileExists` ではなく、フォルダを一度リネームして移動する「アトミックな操作」を検討する必要があるだろう。

—

4. 最後に:自動化とは「信頼」を積み上げること

このスクリプトを導入すれば、毎朝のルーチンワークは消滅する。だが、それで終わりではない。

真のエンジニアは、この「作業フォルダ作成」を起点に、「ログの自動生成」「処理終了後のメール通知」と自動化の範囲を広げていく。VBScriptは枯れた技術だが、枯れているからこそ、OSの深いレイヤーで安定して動作し続ける。

さあ、今すぐこのコードを自分の環境にデプロイし、手作業という名の「負債」を完済してくれ。質問があればコメントで送れ。コードの最適化はいつでも歓迎する。

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