こんにちは! VBScriptの世界へようこそ。
マクロの記録ボタンを押すだけの世界から一歩踏み出し、黒い画面(コマンドプロンプト)を自在に操る「真の自動化エンジニア」への扉を開いたあなたを、心から歓迎します。
さて、業務でVBScriptを書いていると、こんな悩みにぶつかりませんか?
- 「ログが全部白黒ームで、どこがエラーなのかパッと見でわからない……」
- 「大量のバッチ処理を走らせたはいいが、どこまで進んだか視覚的に把握したい」
実は、Windows 10以降の標準的なコンソール環境であれば、VBScriptから「ANSIエスケープシーケンス」という魔法の呪文を送るだけで、文字をカラフルに彩り、ターミナルをモダンなCLIツールに生まれ変わらせることができます。
ここをクリアすれば、あなたの書くスクリプトは見違えるほどプロフェッショナルになりますよ。さあ、一緒にその極意を紐解いていきましょう!
—
1. なぜ「CScript」なのか? そしてANSIエスケープシーケンスの正体
VBScriptを実行するエンジンには、主に2つあります。
1. WScript.exe: デスクトップ上で「ポチッ」とダブルクリックして動かすGUI寄り(メッセージボックスが出る)のエンジン。
2. CScript.exe: コマンドプロンプトの内部で文字入出力を行うCLI特化型のエンジン。
今回、コンソールを色鮮やかに彩るには、文字を画面の「標準出力」に流し込む必要があります。そのため、必ず `CScript.exe` の環境を前提とします。
そして、コンソールに色を付ける「ANSIエスケープシーケンス」とは、テキストの中に特定の制御文字(`ESC`文字:ASCIIコードの27番)を忍び込ませることで、コンソール画面に「ここから文字の色を変えろ」「カーソルを移動しろ」と命令する技術です。
—
2. 【実践】コンソールを彩るVBScriptコード
百聞は一見に如かず。まずは、標準出力に対して赤、緑、黄色のカラフルなメッセージを出力する実用スクリプトを見てみましょう。
以下のコードをメモ帳に貼り付け、拡張子を `.vbs`(例: `color_log.vbs`)として保存してください。
‘ ==============================================================================
‘ スクリプト名: ColorConsoleSample.vbs
‘ 概要: CScript環境でANSIエスケープシーケンスを使い、コンソール出力を色分けする
‘ 使い方: コマンドプロンプトを開き、 “cscript ColorConsoleSample.vbs” と実行してください
‘ ==============================================================================
Option Explicit
‘ ——————————————————————————
‘ 1. CScript環境での実行強制チェック
‘ ——————————————————————————
If InStr(LCase(WScript.FullName), “cscript.exe”) = 0 Then
MsgBox “このスクリプトは CScript.exe で実行する必要があります。” & vbCrLf & _
“コマンドプロンプトから ‘cscript ” & WScript.ScriptName & “‘ と実行してください。”, _
vbCritical, “実行環境エラー”
WScript.Quit 1
End If
‘ ——————————————————————————
‘ 2. ANSIエスケープシーケンスの定数定義
‘ ——————————————————————————
‘ エスケープ文字 (ASCII 27)
Const ESC = “\x1b” ‘ VBScriptではChr(27)を使います
‘ テキストカラー (Foreground)
Const COLOR_RESET = “\x1b[0m” ‘ すべてのリセット
Const COLOR_RED = “\x1b[31m” ‘ エラー・危険
Const COLOR_GREEN = “\x1b[32m” ‘ 正常・成功
Const COLOR_YELLOW = “\x1b[33m” ‘ 警告・注意
Const COLOR_CYAN = “\x1b[36m” ‘ 情報・プロセス名
‘ ——————————————————————————
‘ 3. ログ出力用ヘルパーサブルーチン
‘ ——————————————————————————
Sub WriteLog(level, message)
Dim prefixColor, prefixText
‘ ログレベルに応じた色とプレフィックスの割り当て
Select Case UCase(level)
Case “INFO”
prefixColor = Chr(27) & “[36m” ‘ シアン
prefixText = “[INFO] ”
Case “WARN”
prefixColor = Chr(27) & “[33m” ‘ 黄色
prefixText = “[WARNING]”
Case “ERROR”
prefixColor = Chr(27) & “[31m” ‘ 赤
prefixText = “[ERROR] ”
Case “SUCCESS”
prefixColor = Chr(27) & “[32m” ‘ 緑
prefixText = “[SUCCESS]”
Case Else
prefixColor = Chr(27) & “[0m” ‘ リセット
prefixText = “[LOG] ”
End Select
Dim resetColor
resetColor = Chr(27) & “[0m”
‘ 標準出力へカラーテキストを出力
WScript.StdOut.WriteLine prefixColor & prefixText & resetColor & ” ” & message
End Sub
‘ ——————————————————————————
‘ 4. メイン処理(シミュレーション)
‘ ——————————————————————————
WScript.StdOut.WriteLine Chr(27) & “[1m” & “=== バッチ処理シミュレーション開始 ===” & Chr(27) & “[0m”
Call WriteLog(“INFO”, “設定ファイルを読み込んでいます…”)
WScript.Sleep 800 ‘ 0.8秒待機
Call WriteLog(“INFO”, “データベースへ接続を試行中…”)
WScript.Sleep 1000
Call WriteLog(“WARN”, “接続タイムアウトが近いです。ネットワークを確認してください。”)
WScript.Sleep 800
Call WriteLog(“ERROR”, “予期せぬ例外が発生しました: 接続拒否されました。”)
WScript.Sleep 800
Call WriteLog(“SUCCESS”, “ロールバックが正常に完了しました。処理を終了します。”)
WScript.StdOut.WriteLine Chr(27) & “[1m” & “=== すべての処理が終了しました ===” & Chr(27) & “[0m”
実行方法のコツ
このスクリプトを最大限に楽しむには、必ずコマンドプロンプトを立ち上げてから実行してください。
cscript ColorConsoleSample.vbs
※Windows 10/11であればデフォルトでANSIエスケープシーケンスが有効になっていますが、もし文字化けや「`[31m`」という文字列がそのまま出てしまう場合は、Windows TerminalやPowerShell、最新のコマンドプロンプト環境でお試しください。
—
3. コードの深い解説:ここがエンジニアの腕の見せ所
初心者から一歩抜け出すために、上記のコードで使われている「プロフェッショナルな技術要素」を解説します。
① 実行環境の厳密なガード(Self-Defense)
If InStr(LCase(WScript.FullName), “cscript.exe”) = 0 Then …
VBScriptにおいて、初心者が一番ハマる罠が「ダブルクリックで実行されてエラーになる」現象です。`WScript.StdOut` は CScript 以外の環境(WScript.exe)で呼び出すと、無情にも「オブジェクトはサポートしていません: ‘WScript.StdOut’」という実行時エラーを吐いてクラッシュします。
このガード節を入れておくことで、誤操作によるユーザーのストレスをゼロにできます。
② `Chr(27)` によるエスケープ文字の生成
VBScriptは直接特殊文字を書くのが少し厄介です。ANSIシーケンスの先頭に必要不可欠な `ESC` は、ASCIIコードの `27番` です。そのため、定数や関数内で `Chr(27)` を使って動的にエスケープコードを生成しています。
③ 出力のデザインパターン(カプセル化)
`WriteLog` というサブルーチン(関数)を作っている点に注目してください。
生のANSIコードを毎回ベタ書きすると、コードが複雑怪奇になり、後から保守できなくなります(いわゆる「スパゲッティコード」の誕生です)。ログの出力ロジックを1箇所に閉じ込める(カプセル化する)ことで、保守性の高い美しいコードになります。
—
4. 陥りやすい罠とトラブルシューティング
現場でこの技術を使う際、エンジニアが必ず直面する「罠」がいくつかあります。あらかじめ知っておきましょう。
- 罠1:ファイルへリダイレクトしたときにゴミ文字が混じる
- `cscript color_log.vbs > output.log` のようにログをテキストファイルに保存すると、ANSIエスケープコード(`\x1b[31m`など)がそのままテキストに書き込まれ、ファイルが文字化けしたように見えます。
- 対策: ファイル出力とコンソール出力を分ける、またはログファイル保存時はエスケープシーケンスを除去するフィルター関数を用意するのが一流の設計です。
- 罠2:古いWindows環境(Windows 7など)で色が変わらない
- Windows 7以前の標準cmd.exeは、ANSIエスケープシーケンスをネイティブサポートしていません。
- 対策: レジストリの変更やサードパーティ製コンソールを使う必要がありますが、現代のインフラ環境(Windows 10/11, Windows Server 2016以降)であれば基本的に標準でクリアできます。
—
おわりに:ここをクリアすれば、基本はバッチリ!
お疲れ様でした!
今回は、VBScriptとCScript、そしてANSIエスケープシーケンスを組み合わせて、コンソールを劇的にリッチにする手法を解説しました。
「たかが文字の色」と思うかもしれませんが、「エラーが一目でわかるCLIツール」を作れるかどうかは、プログラミング初級者と、現場を支える自動化エンジニアの大きな分水嶺です。
VBScriptはレガシーな言語だと言われがちですが、Windows環境においてインストール不要で即座に強力な自動化を行える最高の相棒です。この知見をあなたの業務に組み込み、退屈な作業を鮮やかに彩ってみてください。
それでは、次回の実践的な自動化テクニックでお会いしましょう!
