【入門編】【WSHヘルプ自動生成】/? オプション引数を検知して使い方と構文メッセージを動的に出力するヘルプ機能の実装 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは!VBScriptの世界へようこそ。
業務自動化の現場で「ちょっとしたバッチ処理を作りたい」「VBAから一歩進んでWindowsを直接制御したい」と思ったとき、WSH(Windows Script Host)とVBScriptは最強の相棒になります。

今回は、プロのエンジニアが書くスクリプトには絶対に欠かせない「動的ヘルプ生成機能(`/?` や `-help` オプションの検知)」の作り方を徹底解説します。

「黒い画面(コマンドプロンプト)で実行したら、使い方を親切に教えてくれるスクリプト」が作れるようになると、あなたが一目置かれることは間違いありません。ここをクリアすれば、WSHの基本はバッチリですよ!一緒にマスターしていきましょう。

1. なぜVBScriptに「ヘルプ機能」が必要なのか?

皆さんは、自分で書いたVBScriptを数ヶ月後に実行して、「これ、どうやって使うんだっけ……?」とコードの中身を開いて確認したことはありませんか?

プログラミングの鉄則として、「コードは読むものではなく、使うもの」です。特にコマンドラインから実行するスクリプトは、ユーザー(あるいは未来の自分)が使い方を忘れてしまったときのために、「自己文書化(Self-documenting)」されている必要があります。

コマンドプロンプトで以下のように打たれたとき、

cscript //nologo myscript.vbs /?

「おっと、このスクリプトの使い方はこうだよ!」と優しく教えてくれる仕組みを、スマートに実装してみましょう。

2. WSHの心臓部:`WScript.Arguments` を知る

VBScriptでコマンドライン引数を扱うには、`WScript.Arguments` という魔法のコレクションオブジェクトを使用します。

ここで、VBScript初学者が一番最初にハマる「罠」があります。
それは、「ダブルクリック(GUI)で実行されたのか、コマンドプロンプト(CUI)から実行されたのか」によって、出力の仕方を華麗に変える必要があるという点です。

  • 双方向の罠: GUI(`wscript.exe`)で実行中に標準出力(`WScript.Echo`)を使うと、鬱陶しいダイアログボックスが大量に出てきます。
  • プロフェッショナルの配慮: コマンドライン(`cscript.exe`)なら標準出力、GUIなら `MsgBox` を使い分ける、あるいは `//nologo` を前提とした美しい設計にするのが一流のエンジニアです。

3. 実装:極限まで洗練された「ヘルプ自動生成」コード

それでは、実際のコードを見てみましょう。
以下のコードをメモ帳に貼り付け、`smart_script.vbs` という名前で保存してください。

‘ ==============================================================================
‘ スクリプト名: smart_script.vbs
‘ 概要: WSHヘルプ自動生成機能を備えた実用テンプレート
‘ アーキテクチャ: チーフアーキテクト直伝の堅牢な引数解析モデル
‘ ==============================================================================

Option Explicit

‘ メイン処理の実行
Main

Sub Main()
‘ 1. 引数が指定されているか、かつヘルプ要求が含まれているかチェック
If WScript.Arguments.Count > 0 Then
Dim firstArg
firstArg = LCase(WScript.Arguments(0)) ‘ 大文字小文字を区別しないために小文字化

If firstArg = “/?” orelse firstArg = “-h” orelse firstArg = “–help” orelse firstArg = “help” Then
ShowHelp
Exit Sub
End If
End If

‘ — ここから本来の業務ロジックが始まります —
‘ 例として引数を受け取る処理
If WScript.Arguments.Count < 1 Then WScript.Echo "エラー: 引数が不足しています。" & vbCrLf & _ "使い方を確認するには以下を実行してください:" & vbCrLf & _ " cscript " & WScript.ScriptName & " /?" Exit Sub End If Dim targetName targetName = WScript.Arguments(0) ' 実際の処理(ここでは挨拶を表示するだけ) WScript.Echo "こんにちは、" & targetName & "さん!処理が正常に完了しました。" End Sub ' ------------------------------------------------------------------------------ ' 関数名: ShowHelp ' 目的: ターミナルに美しいヘルプメッセージを出力する ' ------------------------------------------------------------------------------ Sub ShowHelp() Dim msg ' 配列や連結を使って、見やすいヘルプドキュメントを構築 msg = "========================================================" & vbCrLf & _ " " & WScript.ScriptName & " - 業務自動化支援スクリプト" & vbCrLf & _ "========================================================" & vbCrLf & _ "【概要】" & vbCrLf & _ " 指定されたユーザーに対して自動処理を実行します。" & vbCrLf & _ vbCrLf & _ "【構文】" & vbCrLf & _ " cscript //nologo " & WScript.ScriptName & " [オプション] [引数]" & vbCrLf & _ vbCrLf & _ "【オプション】" & vbCrLf & _ " /? , -h, --help このヘルプ画面を表示します。" & vbCrLf & _ vbCrLf & _ "【実行例】" & vbCrLf & _ " cscript //nologo " & WScript.ScriptName & " 山田太郎" & vbCrLf & _ "======================================================" ' 標準出力への出力(cscript環境に最適化) WScript.Echo msg End Sub ---

4. コードの深掘り:ここがエンジニアのこだわりポイント

このコードには、現場で培われたいくつかの重要なテクニックが詰まっています。

1. `Option Explicit` の強制
変数の宣言漏れによるバグを防ぐため、必ずファイルの先頭に記述します。これがないコードは、プロの現場では「未完成品」扱いです。
2. `LCase()` による正規化
ユーザーが `/H` と打とうが `-H` と打とうが、すべて小文字に変換(`LCase`)してから判定することで、入力ミスによる「ヘルプが出ない!」というストレスを完全に排除しています。
3. `WScript.ScriptName` の動的利用
コード内に直接ファイル名をハードコーディングせず、`WScript.ScriptName` を使って自分自身のファイル名を動的に取得しています。これにより、ファイル名をリネームしてもヘルプ内のファイル名が自動で追従します。

5. コマンドプロンプトでの実行結果

実際にコマンドプロンプトを開いて、以下のコマンドを叩いてみてください。

cscript //nologo smart_script.vbs /?

【出力結果】

========================================================
smart_script.vbs – 業務自動化支援スクリプト
========================================================
【概要】
指定されたユーザーに対して自動処理を実行します。

【構文】
cscript //nologo smart_script.vbs [オプション] [引数]

【オプション】
/? , -h, –help このヘルプ画面を表示します。

【実行例】
cscript //nologo smart_script.vbs 山田太郎
======================================================

どうですか?まるで市販のコマンドツールのような、非常に美しい仕上がりですね!

まとめ

今回は、VBScriptにおける「WSHヘルプ自動生成機能」の実装方法を解説しました。

  • `WScript.Arguments.Count` で引数の有無をチェックする
  • `/?` や `-help` などの多様なヘルプ要求を `LCase` でスマートに検知する
  • `WScript.ScriptName` を使って自分自身の名前を動的にヘルプに埋め込む

このパターンをあなたのVBScriptテンプレートに組み込むだけで、スクリプトの品質は一気にプロフェッショナルなレベルへと跳ね上がります。

「動くコード」から「誰でも使える親切なツール」へ。
VBScriptの基礎をマスターしたあなたなら、もう次のステップへ進む準備は万全です。日々の業務自動化を、もっとエレガントに楽しんでいきましょう!

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