先日、Microsoftは長年Windowsに標準搭載されていたスクリプト言語のVBScriptを非推奨にすると発表しました。VBScriptはExcelのVBAと互換性のある言語で、筆者が大好きだった言語の一つです。VBScriptの終焉は歴史の転換点の一つとも言えます。本稿ではVBScriptの果たした役割を確認し、代わりに何を使えば良いのかも考察してみましょう。
ついにVBScriptが非推奨になってしまった件
2023年10月、ついにMicrosoftはVBScriptをWindowsの非推奨機能「Deprecated features for Windows client」に加えました。近い将来、オンデマンド機能に変更されて、その後、OSからも削除されるとのことです。
VBScriptが大好きだった筆者としては、2023年の重大残念ニュースの一つです。とは言え、このニュースは寝耳に水という訳ではありませんでした。何十年も前からVBScriptに対する更新は完全に止まっていたからです。また、近年では、VBScriptのスクリプトに対して、厳しいセキュリティ制約も課せられていました。
Windows標準スクリプト言語VBScriptの歴史について
そもそも、VBScriptは長年に渡って、Windowsに標準でインストールされて来ました。動的型付け言語で、使い勝手も良いため、筆者は最近も現役で使用しており重宝していました。OS標準ということから、多くのVBScriptのコード資産を活用し、今でも日常的に使っていた方もいることでしょう。
そんな、VBScriptの歴史を振り返ってみましょう。VBScriptが華々しく登場したのは、27年前の1996年のことでした。
MicrosoftのVisual Basicをベースにして開発され、WebブラウザのInternet Explorer 3.0に実装されたのです。そして、VBScriptは、WebサーバーのIISで動作するASP(Active Server Pages)の標準言語として採用されたことから、広く使われるようになります。加えて、Windows上でさまざまな処理を自動化するための標準のスクリプト言語として、Windows Script Host(WSH)の標準言語としても使われるようになります。
Webブラウザのスクリプト言語としてのVBScriptは、JavaScriptに敗北して搭載されなくなってしまったものの、OS標準のスクリプト言語という立場では、Windows 98/2000から最新のWindows 11に至るまで20年以上に渡って、Windowsの標準のスクリプト言語として搭載されてきました。
VBScriptの魅力について
WSHとしてのVBScriptについて言えば、COM/OLEオートメーション(ActiveX)に対応したアプリケーションを自在にスクリプトで操作できるため強力でした。ExcelやWordなどMicrosoftの主力製品は当然のこと、AdobeのIllustratorなど多くのアプリケーションが対応しており、VBScriptを使って自動操縦することができました。
VBScript自体がアップデートされないのにも関わらず、長年愛され使われているのには、こうした拡張性の高さも理由に挙げることができるでしょう。
また、今でも業務で鉄板として使われるExcelのVBAは、Excelを起動しないと使えませんが、VBScriptは、エクスプローラー上でVBScriptのスクリプトをダブルクリックするだけで実行できたので、VBAよりも使い勝手が良く筆者はこの方法を利用して、いろいろな業務を自動化しました。 しかし、この気軽に実行できるという点を突かれて、VBScriptで多くのコンピューターウィルスが作成されました。それによって、VBScriptへの否定的なイメージが作り出されました。もちろん、それはVBScriptが衰退した直接の原因ではありませんが、追い打ちをかけました。
なお、公式にVBScriptが非推奨になった理由は説明されていませんが、既に多くの新しい代替技術が存在することや、古い技術のメンテナンスにコストがかかることなどを挙げることができるでしょう。
VBScriptは今すぐ葬られてしまうのか?何に置き換えたら良い?
とは言え、これまでも互換性を大切にしてきたMicrosoftです。ここ数ヶ月の間に、いきなり使えなくする訳ではありません。VBScriptがOS標準という安寧の立場から下ろされたとしても、アナウンスの通り、当面の間はオンデマンド機能としてVBScriptは提供されます。なお、オンデマンド機能とは、WindowsのOSの一部として標準的にインストールされていないものの、必要に応じて追加でインストールできるオプションの機能のことです。
そのため、慌ててVBScriptの代わりを探す必要はないのですが、いつかは消えてしまうことは確定しているのです。今から、少しずつほかの技術に置き換えて行くのが良いでしょう。
Windows上で気軽に使えるスクリプト言語であれば、Python、JavaScript(Node.js)、Rubyとたくさんの候補があります。これらのスクリプト言語を使えば、VBScriptかそれ以上簡単にファイルのコピーやExcelの自動化などの処理を作成することができます。また、あくまでも「Windows標準で使えること」に拘るのであれば、PowerShellスクリプトも用意されています。
使えなくなる前にVBScriptで遊んでみよう
2023年11月現在、VBScriptはまだ問題なく利用できます。使えなくなる前に、Windows標準のスクリプト言語のVBScriptで遊んで懐かしんでみるのはどうでしょうか。
テキストエディタを起動して、以下のコードを「a.vbs」という名前で保存します。
msgbox "hello"
そして、エクスプローラー上で「a.vbs」をダブルクリックすると、プログラムが実行されます。このように、VBScriptの実行はとても簡単なのです。
FizzBuzzを作成してみよう
本連載では恒例のFizzBuzz問題をVBScriptで作ってみましょう。敢えて関数を使って解いてみます。FizzBuzz問題とは次のような問題です。
> 問題例 1から100までの数を出力するプログラムを書いてください。ただし、3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と表示してください。3と5の倍数の時は「FizzBuzz」と表示してください。
以下が、VBScriptで作ったFizzBuzzのプログラムです。FizzBuzzの実行結果をファイルに書き出します。
' VBScriptでFizzBuzz
' 値iを与えてFizzBuzzの結果を得る関数 --- (*1)
Function GetFizzBuzzStr(i)
Dim IsFizz, IsBuzz, s
IsFizz = ((i Mod 3) = 0) ' Fizzを判定
IsBuzz = ((i Mod 5) = 0) ' Buzzを判定
s = "" & i
If IsFizz And IsBuzz Then
s = "FizzBuzz"
ElseIf IsFizz Then
s = "Fizz"
ElseIf IsBuzz Then
s = "Buzz"
End If
GetFizzBuzzStr = s ' 関数の戻り値を指定
End Function
' 1から指定の値までのFizzBuzzを求めて返す関数 --- (*2)
Function FizzBuzz(MaxValue)
Dim s
s = ""
For i = 1 To MaxValue
s = s & GetFizzBuzzStr(i) & Chr(13) & Chr(10)
Next
FizzBuzz = s
ENd Function
' ファイルにFizzBuzzの結果を保存 --- (*3)
Dim fso, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile("FizzBuzz.txt", True)
file.WriteLine FizzBuzz(100)
file.Close
MsgBox "Saved!"
上記のプログラムを「fizzbuzz.vbs」という名前で保存した後、ダブルクリックすることで実行できます。実行すると、「FizzBuzz.txt」というファイルが生成されます。これを開くと、FizzBuzzの結果を確認できます。