VBScriptでネットワークを掌握せよ:MSXML2.XMLHTTPによる「疎通・速度計測」の極意
こんにちは。現場の最前線で自動化の礎を築いてきたエンジニアです。
皆さんは「サーバーのレスポンスが悪い気がする」と感じたとき、どうしていますか? ブラウザの更新ボタンを連打するのは卒業しましょう。今回は、VBScript(WSH)という、OSの深層に根ざした強力なツールを使い、ネットワークの「鼓動」を可視化する計測ツールを構築します。
「古い言語では?」なんて侮ってはいけません。軽量で、インストール不要、そしてWindowsの心臓部に直結している。このシンプルさこそが、真の自動化エンジニアの武器なのです。
—
1. なぜ「MSXML2.XMLHTTP」なのか
VBScriptでネットワーク通信を行う際、真っ先に候補に上がるのが `MSXML2.XMLHTTP` です。これは、Webブラウザの裏側で動いている通信エンジンを直接叩くためのオブジェクトです。
- GUI不要: 画面を表示せず、純粋な通信プロセスのみを実行可能。
- 軽量: インタープリタ言語であるVBScriptと相性が良く、リソース消費が極めて少ない。
- 汎用性: どんなWindows環境でも(環境構築なしで)即座に動く。
このオブジェクトを使うことは、「Windowsという巨大なサーバーOSを、君自身の指先で操る」ことに他なりません。
—
2. 【実装】ネットワーク計測スクリプト
それでは、実際にサーバーへのレスポンス時間とスループットを計測するコードを見ていきましょう。このコードをメモ帳に貼り付け、`.vbs` という拡張子で保存してください。
‘ — NetworkAnalyzer.vbs —
Option Explicit
Dim url, http, startTime, endTime, duration
url = “https://www.google.com” ‘ 計測対象のURL
‘ 1. オブジェクトの生成
Set http = CreateObject(“MSXML2.XMLHTTP”)
‘ 2. 通信開始時間の計測
startTime = Timer
‘ 3. リクエスト送信(GETメソッド)
‘ 第3引数のFalseは「同期通信(完了を待つ)」を意味します
http.Open “GET”, url, False
http.Send
‘ 4. 通信完了時間の計測
endTime = Timer
duration = endTime – startTime
‘ 5. 結果の出力
If http.Status = 200 Then
WScript.Echo “接続成功!”
WScript.Echo “URL: ” & url
WScript.Echo “応答時間: ” & FormatNumber(duration, 3) & ” 秒”
‘ データサイズを取得してスループットを簡易算出可能
WScript.Echo “受信サイズ: ” & LenB(http.ResponseBody) & ” bytes”
Else
WScript.Echo “エラー発生。ステータスコード: ” & http.Status
End If
‘ 後始末(メモリリークを防ぐ鉄則)
Set http = Nothing
—
3. コードを読み解く:エンジニアの視点
この短いコードには、VBScriptを扱う上での「必須作法」が詰まっています。
- `Option Explicit`: これを必ず書いてください。変数宣言を強制することで、タイプミスによるバグを劇的に減らせます。初心者が「なぜか動かない」と悩む原因の8割はこれです。
- 同期通信 (`False`): `http.Open` の第3引数です。`False` にすることで、サーバーからの応答が来るまでスクリプトを「待機」させます。これにより、正確なレスポンス計測が可能になります。
- `Timer` 関数: VBScript標準の時刻計測ツールです。ミリ秒単位の精緻な計測には向きませんが、サーバーの疎通確認や数秒単位の計測には十分な精度を持っています。
- `Set object = Nothing`: これが「エンジニアの美学」です。VBScriptはガベージコレクションが強力ですが、明示的にメモリを解放する習慣を持つことで、長時間稼働する自動化タスクの安定性が飛躍的に向上します。
—
4. 陥りやすい罠と対策
初心者の方がよく突き当たる壁を、先回りして解説します。
Q1. 「アクセス拒否」や「403エラー」が出る
- 対策: 対象サーバーがスクリプトからの自動アクセスを遮断している場合があります。`http.setRequestHeader “User-Agent”, “Mozilla/5.0…”` を追加し、ブラウザを装うことで解決することがあります。
Q2. 巨大なファイルをダウンロードしたい
- 対策: `MSXML2.XMLHTTP` はメモリ上にデータを展開します。数GBのファイルを扱うとメモリ不足(Out of Memory)になります。その場合は、`ADODB.Stream` オブジェクトを併用し、ディスクに直接書き出す手法を学ぶ必要があります。
Q3. 通信がタイムアウトする
- 対策: デフォルトの設定では通信完了まで無限に待機します。本番環境のツールとして組むなら、`http.setTimeouts` を利用し、数秒でタイムアウトさせる設計が「落ちないシステム」への第一歩です。
—
最後に:ここを越えれば、あなたはもう初心者ではない
今回紹介したコードは、単なる通信計測ツールではありません。「外部環境の状態を数値化し、自分のシステムに取り込む」ためのテンプレートです。
この技術をマスターすれば、サーバー監視、ログの自動収集、APIを介したクラウド連携など、応用範囲は無限に広がります。VBScriptは古いかもしれませんが、その概念を理解したエンジニアは、PythonだろうがNode.jsだろうが、どんな言語でも本質を見抜いて使いこなせるようになります。
さあ、まずはこのコードをコピーして、あなたのPCからGoogleの「鼓動」を計測してみてください。そこから、あなたの自動化エンジニアとしての旅が始まります。応援していますよ。
