VBScript

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

VBScript(ブイ・ビー・スクリプト)は、Visual Basic (VB) のサブセット(簡易版)で、マイクロソフト製のスクリプト言語である。Microsoft Windows上やInternet Information Server (IIS)上で動作する。


目次

概要

VBScript (Microsoft Visual Basic Scripting Edition)はVisual Basicの構文を真似てつくられた、Microsoft Windowsのネイティブスクリプト言語である。ランタイムとして、ASPやWSHがあり、主な用途として、

が挙げられる。

ただし、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はほぼ死語となった。しかし、19xx年xx月、Internet Information Sarver 3.0 (IIS 3.0)に実装された Active Server Pages (ASP)のデフォルトのサーバサイドスクリプト言語としてVBScriptが採用された。ASPは、当時サーバサイドスクリプトホストとして有力であった CGIHTMLを出力するスクリプトを記述するアプローチと異なり、HTML中の動的な部分にのみスクリプトを埋め込むというアプローチをとり、習熟の容易さから成功を収めた。同時にそのデフォルト言語としてVBScriptの地位も確固たるものとなった。

一方、VBScriptはWWWだけでなく、Windowsのネイティブスクリプト言語として、Windows Script Host (WSH)のデフォルト言語として採用された。WSHはバッチファイルを置き換えるものとして位置づけられ、Windows95 OSR2より標準でインストールされるようになった。

当時Microsoft社はActiveX戦略のもと、WWWとクライアント環境のシームレスな統合を目指したが、その中核スクリプト言語としてWSH、ひいてはVBScriptを位置づけた。そのため、VBScriptはActiveXオートメーションサーバを取り扱うことに長け、全ての操作はオートメーションサーバよりオブジェクトを生成し、それを介して行うという統一されたスタイルを持つ。これは、言語自身が環境に依存しないメリットももたらすが、反面、単純なファイルコピーでさえオブジェクトを生成し操作する手続きが必要という煩雑さももたらした。この煩雑さはユーザスクリプトのバッチファイルからの移行を阻害するものとなった。

また、ActiveX戦略自体、相重なるセキュリティ問題を引き起こし、WSH上のVBScriptを利用したウイルスの出現などもあったことからセキュリティ面から敬遠される向きもあった。

簡単な処理も煩雑な記述になってしまう点、セキュリティ面のダーティなイメージから、VBScriptは圧倒的なシェアをもつOSのデフォルトのスクリプト言語にしてはあまり普及せず、Windowsのネイティブスクリプト言語としてのVBScriptは、一定の評価はできるものの成功したとは言えない。

Microsoftは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ステートメント をファイル先頭で宣言するのが良いコーディングスタイルと言われる。明示的に変数を生成するには DimPrivatePublicReDimなどの各ステートメントを用いる。

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を構築できる意義は大きい(JScriptにおいてMsgBoxはWScript.Echoで代替出来るが、InputBox相当の物はない)。この点でVBScriptは優れる。

一方、オブジェクト指向言語としての機能はJScriptの方が大きく優れる。JScriptは無名関数やレキシカル・クロージャなど強力な構文も備える。

VBScriptとセキュリティ

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

コード例

以下のコードを適当なファイル(例えば、time.vbs)に保存し、ダブルクリックすると、現在の時刻を表示する。

MsgBox "現在の時刻は、" & Time & " です。"

また、HTML に埋め込む場合は、以下のように表記する。

<html>
<script language="VBScript">
  Function GetTime()
    MsgBox "現在の時刻は、" & Time & "です。"
  End Function
</script>
<body>

関連項目

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net