【入門編】【入力値バリデーション】IsNumeric / IsDate を用いた WScript.Arguments の型チェックとデフォルト値適用 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを掌握せよ:コマンドライン引数の「型」を制して、落ちないスクリプトを書く技術

こんにちは。自動化の世界へようこそ。
現場でVBScriptを扱うエンジニアとして、多くの「動かなくなったスクリプト」を見てきました。その原因の多くは、実は非常に単純なこと——「外部から渡される値(引数)を信用しすぎたこと」にあります。

今回は、WScript.Arguments(引数)という「未知の入力」をいかに安全にさばき、スクリプトの停止を防ぐか。その極意を伝授します。

1. なぜ「そのまま」使ってはいけないのか?

コマンドラインからスクリプトを実行するとき、私たちはついこう書きがちです。

‘ 危険なコード例
Dim myAge
myAge = WScript.Arguments(0)
WScript.Echo “来年は” & (myAge + 1) & “歳ですね”

もし、ユーザーが数字ではなく「こんにちは」と入力したら? スクリプトは「型不一致」のエラーを吐いて無慈悲に終了します。外部からの入力はすべて「文字列(String)」としてやってくるという事実を忘れてはいけません。

2. 鉄壁のバリデーション・パターン

引数の妥当性をチェックし、値が空ならデフォルト値を適用する。この「守りのコード」をテンプレート化しましょう。

実装コード:安全な引数取得のテンプレート

‘ 引数のバリデーションとデフォルト値適用
Dim inputAge, safeAge

‘ 1. 引数が存在するか確認(エラー回避の基本)
If WScript.Arguments.Count > 0 Then
inputAge = WScript.Arguments(0)
Else
‘ 引数がない場合はデフォルト値を設定
inputAge = 20
End If

‘ 2. IsNumericで型チェック
If IsNumeric(inputAge) Then
‘ 数字として扱えるなら数値型に変換して代入
safeAge = CDbl(inputAge)
Else
‘ 異常値の場合はログを出してデフォルトへ逃がす
WScript.Echo “警告: 数値以外が渡されました。既定値20を使用します。”
safeAge = 20
End If

‘ 3. 安全な値を使って処理を続行
WScript.Echo “処理する年齢は: ” & safeAge

3. このコードに隠された「アーキテクトの知見」

① IsNumeric と IsDate の役割

VBScriptには強力な型判定関数が備わっています。

  • IsNumeric: 文字列が数値として計算可能か判断します。
  • IsDate: 日付として変換可能かを判断します。

これらを通さずに計算を行うのは、目隠しをして高速道路を走るようなものです。必ず「チェックして、ダメならデフォルト」というフローを守ってください。

② WScript.Arguments.Count の重要性

`WScript.Arguments(0)` をいきなり参照してはいけません。引数が渡されていない状態でインデックスを指定すると、「添字が範囲外です」という致命的なエラーが発生します。必ず `.Count` で箱の中に中身があるか確認する癖をつけましょう。

③ 明示的な型変換 (CInt, CDbl, CDate)

VBScriptの変数は「Variant型(何でも入る箱)」です。便利な反面、予期せぬ挙動を招きます。`CDbl()` や `CInt()` を使うことで、「これは数値として扱う」という意思表示をコードに刻むことができます。

4. 陥りやすいエラーと対策

  • 「型が一致しません」エラー:

文字列の「10」と数値の「10」を足そうとすると、VBScriptは混乱します。バリデーション後に必ず明示的な型変換関数を通してください。

  • 「添字が範囲外です」:

引数チェックを省略している証拠です。`.Count` で安全を確認してからアクセスしましょう。

まとめ:ここをクリアすれば、もう怖くない

プログラミングにおいて、「ユーザー(あるいは外部プログラム)は、必ず間違った値を入力する」という前提で設計するのが、真に堅牢なシステムを作る第一歩です。

1. Count で存在確認
2. IsNumeric / IsDate で型確認
3. 変換関数 で型を確定させる

この3ステップを意識するだけで、あなたの書くVBScriptは、突然停止することのない「プロフェッショナルなツール」に生まれ変わります。

さあ、次はあなたのスクリプトにこのガードレールを設置してみてください。コードが驚くほど安定するはずですよ。応援しています!

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