VBScript
登場時期
  • 1996年 ウィキデータを編集
開発者 マイクロソフト
最新リリース 5.8 / 2008[1]
方言 Visual Basic
プラットフォーム Windows
拡張子 vbs
テンプレートを表示

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

概要

編集

VBScriptVisual Basic の構文を真似てつくられた、Windows のスクリプト言語であり、Active Scripting のスクリプトエンジンという形態で実装されている。ランタイムとしてASPやWSHがあり、主な用途として、

が挙げられる。

ただし、WWWクライアントスクリプトとしては、対応するブラウザが Windows 版の Internet Explorer だけであり、2005年時点でもほとんど使われていない。2013年にリリースされた Internet Explorer 11 では、セキュリティや互換性の設定によっては VBScript を実行しなくなり[2]、Windows 10 は2019年7月9日より、Windows 8.1 以前は2019年8月13日よりデフォルトで無効になった[3]。さらに、Windows 10 搭載の Microsoft Edge では VBScript は動作しない。

HTAやASP、HTML中に組み込まれることが多いが、単体のスクリプトファイルとしておかれる場合、拡張子は通常.vbsを使用する。

背景

編集

VBScript は1996年8月、WWWのクライアントスクリプト言語として Internet Explorer 3.0 に実装された。当時ネットスケープコミュニケーションズとマイクロソフトは ブラウザ戦争と呼ばれるWebブラウザシェアとWeb標準を巡る技術競争下にあり、1996年3月に Netscape Navigator 2.0 に実装された JavaScript に対抗するものとして、JavaScript 互換のスクリプト言語 JScript と共に実装されたものである。

結果として、WWWのクライアントスクリプト言語としては、VBScriptWindowsInternet 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 を位置づけた。そのため、VBScriptActiveX オートメーションサーバを取り扱うことに長け、全ての操作はオートメーションサーバよりオブジェクトを生成し、それを介して行うという統一された様式である。これは、言語自身が環境に依存しないメリットももたらすが、反面、単純なファイルの複製でさえオブジェクトを生成し操作する手続きが必要という煩雑さももたらした。この煩雑さはバッチファイルからの脱却を阻むものとなった。

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

簡単な処理も煩雑な記述になってしまう点、セキュリティ面のダーティなイメージから、VBScript は圧倒的なシェアをもつオペレーティングシステムの標準のスクリプト言語にしてはあまり普及せず、Windows の汎用スクリプト言語としての VBScript は、一定の評価はできるものの大成功したとは言えない。

マイクロソフトは2000年代初頭から ActiveX に変わる戦略として、.NET戦略を打ち立てており、ASPも2002年にリリースされたASP.NETに置き換えられ、その記述言語も C#Visual Basic .NET 等となった。また、オペレーティングシステムの汎用スクリプト環境についてもWSHから Windows PowerShell へ移行すると言う。

2006年現在の展望では、PHPに代表されるオープンソースのサーバ側スクリプト言語が徐々にIIS上でも安定した動作が期待できるようになってきており、サーバ側スクリプト言語としてのVBScript も一部の根強い人気を除けばほぼその役割を終え、緩やかに衰退していくものと思われる。

2023年10月にMicrosoftはWindowsクライアントでのVBScriptを非推奨にすると発表した。

そして、2024年5月にMicrosoftは3段階に分けてVBScriptを廃止すると発表している。なお、3段階とは「オンデマンド機能(FOD)をすべてのWindows 11のバージョン24H2にプリインストールさせ、デフォルトでオンにする」、「2027年頃からオンデマンド機能(FOD)をデフォルトで有効にならなくする」、「VBScriptを廃止する」である。[4]

主な特徴

編集

VBScript は、OLEサーバの接着剤としてのスクリプト言語という理念のもとに設計された。Windows の汎用スクリプト言語と説明したが、Windows.NET 戦略への転換を迎えた現在では、むしろOLE(ActiveX)用のスクリプト言語といった方が正しい。

OLE設計が徹底されており、VBScriptは言語自身にはファイル入出力さえサポートしない。

また、動的型付けを採用している点も Visual Basic から派生した言語としては異色である。

動的型付け

編集

VBScript は多くのスクリプト言語同様、動的型付き言語であるため、変数に型はない。

VBScript のデータ型には、Empty 値、Null 値、ブール型、バイト型、整数型、通貨型、日付型、文字列型、オブジェクト型、エラー型などがあるが、これら型情報はデータ側が持ち、変数自体に型はない。(または 変数はバリアント型のみだとも言われる)。

VBScript は変数宣言または明示的な変数生成ステートメントを必須としない。はじめて使われるシンボルは変数として自動的に生成される。しかし、代入だけでなく、参照でも変数を生成してしまうため、入力間違いによる不具合を誘発しやすい。

そのため、変数宣言を強要する Option Explicit ステートメントをファイル先頭で宣言するのが良いコーディングスタイルと言われる。明示的に変数を生成するには DimPrivatePublicReDimなどの各ステートメントを用いる。

OLEクライアント機能

編集

OLEオブジェクトを利用するには CreateObject 関数を使用する。CreateObjectActiveX オートメーションサーバからオートメーションオブジェクトを生成し、その参照を返す。

Dim oFileSystem
Set oFileSystem = CreateObject("Scripting.FileSystemObject")
oFileSystem.MoveFile "C:\2012年6月.xls" "C:\過去実績\2012年6月.xls"

以下は Microsoft Excel のシートオブジェクトを生成するサンプルである。

Dim oExcelSheet
Set oExcelSheet = CreateObject("Excel.Sheet")
oExcelSheet.Application.Visible = True
oExcelSheet.ActiveSheet.Cells(1,1).Value = "売上"
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! と表示

継承は出来ないものの、動的型付けであるため、多態は可能である。カプセル化も出来る。幾分制約が強いが、必要最低限のオブジェクト指向機能は備える。

他言語との比較

編集

Visual BasicVisual Basic for Applications との比較

編集

VBScriptVisual Basic によく似た構文を持ち相互に習得しやすいが、

  • 動的型付け
  • 多くの組み込み関数や手続きがない
  • モジュールがない

のように、Visual BasicVisual Basic for Applications との相違点は大きいため互換性が低く、そのままでは使用できない場合も多い。

JScriptとの比較

編集

標準でASP、WSHをホストとして動く言語には、VBScript の他に、JScript がある。JScript はマイクロソフト社による ECMAScript(いわゆるJavaScript)の実装である。同じランタイムを利用するため、機能的には似通っているが、言語の設計思想は大きく異なる。

主な相違として、

  • 組み込みGUI関数 MsgBoxInputBox の有無
  • プロトタイプベース・オブジェクト指向言語とクラスベース・オブジェクト指向言語

が挙げられる。

特に MsgBoxInputBox が揃うことで、GUIでありながらCUIなみの手軽さで入出力を備えたUIを構築できる意義は大きい。この点で VBScript は優れる。 なお、JScript において MsgBoxWScript.Echo で代替出来る。InputBox 相当の物は存在しないため、VBScriptInputBox 関数を呼び出す。

一方、プログラミング言語としての機能は JScript の方が大きく優れる。JScript は無名関数や静的スコープのクロージャなど強力な機構を備える。

コード例

編集

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

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

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

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

脚注

編集
  1. ^ 移入元ウィキメディア・プロジェクト: 英語版ウィキペディア
  2. ^ インターネット ゾーンにおける Internet Explorer 11 エッジ モードでの VBScript のサポート停止 マイクロソフト、2013年11月20日閲覧。
  3. ^ An update on disabling VBScript in Internet Explorer 11 - Microsoft Edge Blog
  4. ^ VBScript deprecation: Timelines and next steps” (英語). Microsoft (2024年5月22日). 2025年3月19日閲覧。

関連項目

編集

外部リンク

編集

📚 Artikel Terkait di Wikipedia

空関数

空関数(くうかんすう、英: empty function)、あるいは空写像とは、数学における関数(写像)の一種で、定義域が空集合の関数をいう。任意の集合 A {\displaystyle A} について、 A {\displaystyle A} を終域とする空関数 ∅ A : ∅ → A {\displaystyle

Null

はコンピュータに限らず使われ、しばしば zero または empty と交換可能である。例えば、null matrix は zero matrix(零行列)、null set は empty set(空集合)と同義である。ただし、empty matrix すなわち空行列は行数または列数の少なくとも

E

ウィクショナリーに関連の辞書項目があります。 E ウィクショナリーに関連の辞書項目があります。 e 数学 自然対数の底(exponential function(指数関数)、小文字) e = 2.7182818... 単位ベクトル(通例小文字) 単位行列(大文字) 群の単位元 離心率(eccentricity、通例小文字)

深さ優先探索

ースではノード数とたどる辺の数の合計に比例する。 function 深さ優先探索(v) v に訪問済みの印を付ける v を処理する for each v に接続している頂点 i do if i が未訪問 then 深さ優先探索(i) function 深さ優先探索(v) S ← 空のスタック v に訪問済みの印を付ける

セマフォ

生産者/消費者問題をセマフォで解決する場合、キューの状態を2つのセマフォで表す。emptyCount はキュー上の空いているスロット数を保持し、fullCount はキュー上の要素数を保持する。完全性を維持するには、emptyCount を実際の空きスロット数より小さくなるようにし、fullCount

委譲

this.doEach = function( aBlock ) { // subclassResponsibility; } */ Iterable = function() { this.copyEmpty = function() { return []; } // 委譲先に追加する要素の選択関数

Standard ML

'a list exception Queue val empty = ([],[]) fun insert (a,(ins,outs)) = (a::ins,outs) fun isEmpty ([],[]) = true | isEmpty _ = false fun peek ([],[]) =

パソコン音楽クラブ

magazine » 全員匿名参加のコンピレーションアルバム『empty hours』がリリース”. avyss-magazine.com. 2020年12月11日閲覧。 ^ “empty hours 1, by Various Artists”. empty hours. 2020年12月11日閲覧。 ^ “Pasocom