VBScript
VBScript(ブイ・ビー・スクリプト)は、Visual Basic (VB) のサブセット(簡易版)で、マイクロソフト製のスクリプト言語である。Microsoft Windows上やInternet Information Server (IIS)上で動作する。
概要
VBScript (Microsoft Visual Basic Scripting Edition)はVisual Basicの構文を真似てつくられた、Windowsのネイティブスクリプト言語であり、Active Scriptingのスクリプトエンジンという形態で実装されている。ランタイムとしてASPやWSHがあり、主な用途として、
- Active Server Pages (ASP) などを使用したサーバサイドスクリプティング処理
- Windows Script Host (WSH) を利用したWindows上でのネイティブ・スクリプト
- Internet Explorerを使用したクライアントサイドスクリプティング処理
- HTML Applications (HTA)アプリケーション
が挙げられる。
ただし、WWWクライアントスクリプトとしては、対応するブラウザが Windows版のInternet Explorerだけであり、2005年現在ではほとんど使われていない。
HTAやASP、HTML中に組み込まれることが多いが、単体のスクリプトファイルとしておかれる場合、拡張子は通常.vbsを使用する。
背景
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 (IIS 3.0)に実装された Active Server Pages (ASP)のデフォルトのサーバサイドスクリプト言語としてVBScriptが採用された。ASPは、当時サーバサイドスクリプトホストとして有力であった CGIのHTMLを出力するスクリプトを記述するアプローチと異なり、HTML中の動的な部分にのみスクリプトを埋め込むというアプローチをとり、習熟の容易さから成功を収めた。同時にそのデフォルト言語としてVBScriptの地位も確固たるものとなった。
一方、VBScriptはWWWだけでなく、Windowsのネイティブスクリプト言語として、Windows Script Host (WSH)のデフォルト言語として採用された。WSHはバッチファイルを置き換えるものとして位置づけられ、Windows 95 OSR2より標準でインストールされるようになった。
当時のマイクロソフトはActiveX戦略のもと、WWWとクライアント環境のシームレスな統合を目指したが、その中核スクリプト言語としてWSH、ひいてはVBScriptを位置づけた。そのため、VBScriptはActiveXオートメーションサーバを取り扱うことに長け、全ての操作はオートメーションサーバよりオブジェクトを生成し、それを介して行うという統一されたスタイルを持つ。これは、言語自身が環境に依存しないメリットももたらすが、反面、単純なファイルコピーでさえオブジェクトを生成し操作する手続きが必要という煩雑さももたらした。この煩雑さはユーザスクリプトのバッチファイルからの移行を阻害するものとなった。
また、ActiveX戦略自体、相重なるセキュリティ問題を引き起こし、WSH上のVBScriptを利用したウイルスの出現などもあったことからセキュリティ面から敬遠される向きもあった。
簡単な処理も煩雑な記述になってしまう点、セキュリティ面のダーティなイメージから、VBScriptは圧倒的なシェアをもつOSのデフォルトのスクリプト言語にしてはあまり普及せず、Windowsのネイティブスクリプト言語としてのVBScriptは、一定の評価はできるものの成功したとは言えない。
マイクロソフトは2000年代初頭から ActiveXに変わる戦略として、 .NET戦略を打ち立てており、ASPも2002年にリリースされたASP.NETに置き換えられ、その記述言語も C#やVisual Basic .NET等となった。また、OSのネイティブスクリプト環境についてもWSHからWindows PowerShellへ移行すると言う。
2006年現在の展望では、PHPに代表されるオープンソースのサーバサイドスクリプト言語が徐々にIIS上でも安定した動作が期待できるようになってきており、サーバサイドスクリプト言語としてのVBScriptも一部の根強い人気を除けばほぼその役割を終え、緩やかに衰退していくものと思われる。
主な特徴
VBScriptは、OLEサーバの接着剤としてのスクリプト言語というコンセプトのもと設計された。Windowsのネイティブスクリプト言語と説明したが、Windowsが.NET戦略への転換を迎えた現在では、むしろOLE (ActiveX)のネイティブスクリプト言語といった方が正しい。
極端なOLE偏重設計であるため、VBScriptは言語自身にはファイル入出力さえサポートしない(FileSystemObjectを使用する)。
また、動的型付けを採用している点もVisual Basicシリーズとしては異色である。
動的型付け
VBScriptは多くのスクリプト言語同様、動的型付け言語であるため、変数に型はない。
VBScriptのデータ型には、Empty 値、Null 値、ブール型、バイト型、整数型、通貨型、日付型、文字列型、オブジェクト型、エラー型などがあるが、これら型情報はデータ側が持ち、変数自体に型はない。(または 変数はバリアント型のみだとも言われる)。
VBScriptは変数宣言または明示的な変数生成ステートメントを必須としない。はじめて使われるシンボルは変数として自動的に生成される。しかし、代入だけでなく、参照でも変数を生成してしまうため、タイプミスによる不具合を誘発しやすい。
そのため、変数宣言を強要する Option Explicitステートメント をファイル先頭で宣言するのが良いコーディングスタイルと言われる。明示的に変数を生成するには Dim、Private、Public、ReDimなどの各ステートメントを用いる。
OLEクライアント機能
OLEオブジェクトを利用するには CreateObject関数を使用する。CreateObjectはActiveXオートメーションサーバからオートメーションオブジェクトを生成し、その参照を返す。
Dim oFileSystem
Set oFileSystem = CreateObject("Scripting.FileSystemObject")
oFileSystem.MoveFile "C:\hoge.vbs" "C:\piyo.vbs"
以下はMicrosoft Excelのシートオブジェクトを生成するサンプルである。
Dim oExcelSheet
Set oExcelSheet = CreateObject("Excel.Sheet")
oExcelSheet.Application.Visible = True
oExcelSheet.ActiveSheet.Cells(1,1).Value = "hoge"
Set oExcelSheet = Nothing
OLEサーバとなっているアプリケーションを使ったスクリプトをVBScriptは簡単に記述できる。VBScriptが備えていないような機能でも、OLEサーバアプリケーションを作成すれば行うことが出来る。
オブジェクト指向機能
VBScriptはクラスベースのオブジェクト指向言語であり、Classステートメントによりクラスオブジェクトを生成することが出来る。
VBScriptのクラスオブジェクトは以下のような特徴がある。
- 継承は出来ない
- アクセス制御は出来る
- Initializeイベント/Terminateイベントを設定出来る。
以下にVBScriptのクラスのサンプルコードを示す。
Class CPoint
' プロパティ
Private m_x
Private m_y
' メソッド
Private Sub Class_Initialize ' Initialize
m_x = 0
m_y = 0
End Sub
Private Sub Class_Terminate ' Terminate
MsgBox("terminated!")
End Sub
Public Function GetX()
GetX = m_x
End Function
Public Function GetY()
GetY = m_y
End Function
Public Sub SetPoint(x, y)
m_x = x
m_y = y
End Sub
End Class
Dim obj
Set obj = New CPoint
MsgBox(obj.GetX) '0 と表示
obj.SetPoint 32, 64
MsgBox(obj.GetX) '32 と表示
Set obj = Nothing 'terminated! と表示
継承は出来ないものの、動的型付け言語であるため、多態は可能である。カプセル化も出来る。幾分制約が強いが、必要最低限のオブジェクト指向機能は備える。
他言語との比較
VB / VBAとの比較
VBScriptはVBによく似た構文を持ち相互に習得しやすいが、
- 動的型付け
- 多くの組み込みファンクション/プロシージャがない
- モジュールがない
のように、VBやVBAとの相違点は大きいため互換性が低く、そのままでは使用できない場合も多い。
JScriptとの比較
標準でASP/WSHをホストとして動く言語には、VBScriptの他に、Microsoft JScriptがある。JScriptはMicrosoftによるECMAScript (いわゆるJavaScript)の実装である。同じランタイムを利用するため、機能的には似通っているが、言語の設計思想は大きく異なる。
主な相違として、
- 組み込みGUI関数MsgBox、InputBoxの有無。
- プロトタイプベース・オブジェクト指向言語とクラスベース・オブジェクト指向言語
が挙げられる。
特にMsgBoxやInputBoxが揃うことで、GUIでありながらCUIなみの手軽さで入出力を備えたUIを構築できる意義は大きい。この点でVBScriptは優れる。 なお、JScriptにおいてMsgBoxはWScript.Echoで代替出来る。InputBox相当の物は存在しないため、VBScriptのInputBoxを呼ぶことで回避する。
一方、オブジェクト指向言語としての機能はJScriptの方が大きく優れる。JScriptは無名関数やレキシカル・クロージャなど強力な構文も備える。
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>
関連項目
- ベースになった言語 - Visual Basic
- 競合するスクリプト言語 - ECMAScript、JavaScript、JScript、PerlScript