VBScriptでネットワークを掌握する:堅牢な応答速度計測エンジンの設計論
業務自動化の現場で、私たちはしばしば「なんとなく遅い」という定性的な報告に振り回される。ネットワーク診断において、感覚的な判断は最も避けるべきリスクだ。
今回は、Windows標準のVBScript(WSH)と`MSXML2.XMLHTTP`を組み合わせ、Webサーバーの応答時間とスループットを定量化する計測エンジンの設計思想を伝授する。ただ動くコードを書くのではない。「計測対象の負荷を抑えつつ、OSの制約を回避し、ログの信頼性を担保する」ためのアーキテクチャだ。
—
なぜ `MSXML2.XMLHTTP` なのか
多くのエンジニアが「WinHttpRequest」と迷うところだが、VBScriptの実行環境(WSH)において、プロキシ設定が不要なイントラネット環境や、標準的な社内サーバーの疎通確認であれば、`MSXML2.XMLHTTP`の軽量さは武器になる。ただし、「キャッシュの無効化」と「タイムアウト処理」を明示的に制御しないコードは、現場ではただの爆弾である。
プロダクションコード:計測エンジンの実装
以下のコードは、単なるリクエスト送信を超え、計測開始・終了時刻の差分からパフォーマンスを算出する「計測モジュール」としての体裁を整えている。
‘ — NetworkLatencyChecker.vbs —
Option Explicit
‘ 計測設定
Dim targetUrl, startTime, endTime, xmlHttp, diffMs
targetUrl = “http://your-server-address/testfile.bin” ‘ 計測用ダミーファイル
Set xmlHttp = CreateObject(“MSXML2.XMLHTTP”)
‘ 計測実行
On Error Resume Next
startTime = Timer
‘ 非同期通信を行わず、あえて同期モードで実行(計測の正確性のため)
xmlHttp.Open “GET”, targetUrl, False
‘ キャッシュを回避するためにランダムなクエリを付与する場合もある
xmlHttp.Send
If Err.Number <> 0 Then
WScript.Echo “ERROR: 接続失敗 – ” & Err.Description
WScript.Quit
End If
On Error Goto 0
endTime = Timer
diffMs = (endTime – startTime) 1000
‘ 結果出力(ログ保存用フォーマット)
Dim logEntry
logEntry = Now & vbTab & FormatNumber(diffMs, 2) & “ms” & vbTab & xmlHttp.Status
WScript.Echo logEntry
‘ 終了処理
Set xmlHttp = Nothing
—
アーキテクトからの助言:実務での「落とし穴」
このコードを実務で運用する際、以下の3点に注意を払わなければ、ツールは即座に陳腐化する。
1. キャッシュという偽装工作
`XMLHTTP`は、ブラウザ同様にキャッシュを利かせる挙動をすることがある。純粋な回線帯域を測りたい場合、URLの末尾に `?cachebuster=123456` のようなタイムスタンプを付与し、強制的にサーバーへリクエストを投げる工夫が必須だ。
2. ファイルシステムとの死闘(ログの排他制御)
計測結果を単一のテキストファイル(`.log`や`.csv`)に追記する場合、複数のタスクスケジューラが同時に書き込みを行うとファイルアクセスエラーが発生する。
- 解法: ログ書き込み処理は専用の関数に切り出し、エラー時に数ミリ秒待機してリトライする「再試行ロジック」を組み込むこと。
3. タイムアウトの限界
`XMLHTTP`には標準でタイムアウト設定が存在しない(無限待ちになる可能性がある)。本格的な外形監視ツールとして運用するなら、`WScript.Shell`で `ping` を打つサブプロセスを併用し、二段構えで監視するのが最も「事故らない」構成である。
—
データベース連携の推奨事項
もしこの計測データをSQL ServerやPostgreSQLへ送るなら、VBScript内で直接DB接続(ADODB.Connection)を完結させるのは推奨しない。「計測は軽量に、記録は非同期に」が鉄則だ。
- 推奨フロー:
1. VBScriptで計測し、結果をCSVへ出力(ローカル保存)
2. PowerShellなどの上位言語、あるいはDB連携ツールを用いて、CSVを吸い上げる(バッチ処理)
この疎結合な設計により、万が一ネットワークが遮断されても、計測データがロストするリスクを最小化できる。
—
結びに:エンジニアの矜持
VBScriptはレガシーと呼ばれることもある。しかし、OSに深く根ざし、特別なランタイムなしで即座に動作するこの言語は、今なお自動化の最前線で極めて強力だ。
「計測」とは単なる数値取得ではない。システムが健全であるという証拠を、いかに低コストで積み上げるかという知的な挑戦だ。このスクリプトを基点に、監視の網を広げてほしい。君たちのコードが、現場の安定運用を支える静かな守護神となることを期待している。
