VBScript

VBScript（ブイ・ビー・スクリプト）、Microsoft Visual Basic Scripting Edition は、Visual Basic 風の、マイクロソフトによるスクリプト言語である。Microsoft Windows 上や Internet Information Server（IIS）上で動作する。

背景

VBScript は1996年8月、WWWのクライアントスクリプト言語として Internet Explorer 3.0 に実装された。当時ネットスケープコミュニケーションズとマイクロソフトは ブラウザ戦争と呼ばれるWebブラウザシェアとWeb標準を巡る技術競争下にあり、1996年3月に Netscape Navigator 2.0 に実装された JavaScript に対抗するものとして、JavaScript 互換のスクリプト言語 JScript と共に実装されたものである。
結果として、WWWのクライアントスクリプト言語としては、VBScript が Windows 版 Internet Explorer でしか動作しなかったことなどから、JavaScript が勝利を収め、この分野での VBScript は使用されなくなった。しかし、1996年12月、Internet Information Server 3.0 に実装された Active Server Pages の標準の言語として VBScript が採用された。ASPは、プログラムコード中にHTMLコードを埋め込む手法ではなく、HTMLコード中にプログラムコードを埋め込む手法をとり、習熟の容易さから成功を収めた。同時に標準の言語として VBScript の地位も確固たるものとなった。
一方、VBScriptはWWWだけでなく、Windows の汎用スクリプト言語として、Windows Script Hostの標準言語として採用された。WSHはバッチファイルを置き換えるものとして位置づけられ、Windows 95 OSR2より標準で装備された。
当時のマイクロソフトは ActiveX 戦略のもと、WWWとクライアント環境のシームレスな統合を目指したが、その中核スクリプト言語としてWSH、ひいては VBScript を位置づけた。そのため、VBScript は ActiveX オートメーションサーバを取り扱うことに長け、全ての操作はオートメーションサーバよりオブジェクトを生成し、それを介して行うという統一された様式である。これは、言語自身が環境に依存しないメリットももたらすが、反面、単純なファイルの複製でさえオブジェクトを生成し操作する手続きが必要という煩雑さももたらした。この煩雑さはバッチファイルからの脱却を阻むものとなった。
また、ActiveX 戦略自体、相重なるセキュリティ問題を引き起こし、WSH上の VBScript を利用したウイルスの出現などもあったことからセキュリティ面から敬遠される向きもあった。
簡単な処理も煩雑な記述になってしまう点、セキュリティ面のダーティなイメージから、VBScript は圧倒的なシェアをもつオペレーティングシステムの標準のスクリプト言語にしてはあまり普及せず、Windows の汎用スクリプト言語としての VBScript は、一定の評価はできるものの大成功したとは言えない。
マイクロソフトは2000年代初頭から ActiveX に変わる戦略として、.NET戦略を打ち立てており、ASPも2002年にリリースされたASP.NETに置き換えられ、その記述言語も C# や Visual Basic .NET 等となった。また、オペレーティングシステムの汎用スクリプト環境についてもWSHから Windows PowerShell へ移行すると言う。
2006年現在の展望では、PHPに代表されるオープンソースのサーバ側スクリプト言語が徐々にIIS上でも安定した動作が期待できるようになってきており、サーバ側スクリプト言語としてのVBScript も一部の根強い人気を除けばほぼその役割を終え、緩やかに衰退していくものと思われる。

主な特徴

VBScript は、OLEサーバの接着剤としてのスクリプト言語という理念のもとに設計された。Windows の汎用スクリプト言語と説明したが、Windows が .NET 戦略への転換を迎えた現在では、むしろOLE（ActiveX）用のスクリプト言語といった方が正しい。
OLE設計が徹底されており、VBScriptは言語自身にはファイル入出力さえサポートしない。
また、動的型付けを採用している点も Visual Basic から派生した言語としては異色である。

動的型付け

VBScript は多くのスクリプト言語同様、動的型付け言語であるため、変数に型はない。
VBScript のデータ型には、Empty 値、Null 値、ブール型、バイト型、整数型、通貨型、日付型、文字列型、オブジェクト型、エラー型などがあるが、これら型情報はデータ側が持ち、変数自体に型はない。(または 変数はバリアント型のみだとも言われる)。
VBScript は変数宣言または明示的な変数生成ステートメントを必須としない。はじめて使われるシンボルは変数として自動的に生成される。しかし、代入だけでなく、参照でも変数を生成してしまうため、入力間違いによる不具合を誘発しやすい。
そのため、変数宣言を強要する Option Explicit ステートメントをファイル先頭で宣言するのが良いコーディングスタイルと言われる。明示的に変数を生成するには Dim、Private、Public、ReDimなどの各ステートメントを用いる。

OLEクライアント機能

OLEオブジェクトを利用するには CreateObject 関数を使用する。CreateObject はActiveX オートメーションサーバからオートメーションオブジェクトを生成し、その参照を返す。
Dim oFileSystemSet oFileSystem = CreateObject("Scripting.FileSystemObject")oFileSystem.MoveFile "C:\2012年6月.xls" "C:\過去実績\2012年6月.xls"
以下は Microsoft Excel のシートオブジェクトを生成するサンプルである。
Dim oExcelSheetSet oExcelSheet = CreateObject("Excel.Sheet")oExcelSheet.Application.Visible = TrueoExcelSheet.ActiveSheet.Cells(1,1).Value = "売上"Set oExcelSheet = Nothing
OLEサーバとなっているアプリケーションを使ったスクリプトを VBScript は簡単に記述できる。VBScript が備えていないような機能でも、OLEサーバアプリケーションを作成すれば行うことが出来る。

VBScriptとセキュリティ

近年のコンピュータウイルスにはWSHと VBScript を組み合わせて感染する型が多発しており、VBScript のOLEクライアント機能の強力さがユーザにとっては諸刃の剣となっている。

コード例

以下のコードを適当なファイル（例えば、time.vbs）に保存し、ダブルクリックすると、現在の時刻を表示する。
MsgBox "現在の時刻は、" & Time & " です。"
また、HTML に埋め込む場合は、以下のように表記する。
<html><head><script language="VBScript">
  Function GetTime()
    MsgBox "現在の時刻は、" & Time & "です。"
  End Function</script></head><body>……</body></html>