ここ一年ほどで急速な発展をとげ、今やあたらしいメディアとして認知されてきたインターネット。MicrosoftはこのインターネットでもVisual Basicを投入してきた。果たしてインターネットでのVisual Basicとはどういうものなのだろうか。
酒井 法雄
インターネットが急速な進歩と普及を遂げている。従来、インターネットと言えば研究プロジェクトであり、一部の企業や大学といったある意味で特権階級的な人々に使われてきたものであり、一般人からは遠い存在であった。junetで云々といった話をしたときに、「そのネットってどこに申し込んだら入れるの?」と聞かれるのが一番困った。そういうオープンなものではなかったのだ。最近のインターネットの状況だけを知る人に当時の雰囲気を正確に語るのは難しいし、果たして意味のあることなのか分からないが、商取り引きなどはしてはいけなかったし、くだらないことをNewsに書き込むことすら許されなかった。というのも、主に一般公衆回線回線をUUCPというプロトコルでバケツリレー式にデータを転送する方法が主流だったので、くだらない大きなデータはあちこちの電話料金を増大させることになったからだ。かっこよく言えば、ネットワークのトラフィックを意味なく増やしてはいけないという格言になるわけだ。
ところが数年前からインターネットは研究の場からオープンな場に移行した。といっても、プロバイダーに支払う金額はまだまだ高いと思う今に比較してもべらぼうに高かったし、unixマシンがないことには始まらないようなものだった。当時、インターネットでできたことと言えば、電子メール、ニュース、FTPといったあたりが主流であったが、パソコンユーザーに取ってはパソコンに関する有益な情報も国内外を問わず少なかった。とうてい、インターネットが普及するような要素はなかったのである。
ところが、この状況はHTTP(Hyper Text Transfer Protocol)によって一変したのだ。HTTPは非常に単純なもので、指定されたテキストファイルをサーバーから転送するというだけのものだ。ただし、少々しかけがしてある。
テキストは単純なテキストではなく、 HTML(Hyper Text Making Language)と呼ばれるもので、フォントの大きさや位置、色、ピクチャーなどのデータ挿入位置、さらに別のファイルへのリンクを指定することができるのである。したがって、クライアント側のWebブラウザと呼ばれるソフトウェアにも、単純なテキストが表示されるわけではなく、Windowsのヘルプファイルのように多彩な表現が可能であり、別の項目に飛ぶことができるというわけだ。操作も基本的にはマウスをクリックするだけでよいから、unixどころかパソコンについての知識も必要ない。
HTMLはページ記述言語としては非常に単純なものであり、roffなどに比較してもこれではいくら何でも機能が足りないのではないかという程度のものである。しかし、逆にこれが幸いして誰にでも比較的カンタンに書くことができる。
このようなHTTPのサーバーをWWW(World Wide Web) Serverと呼ぶ。もちろんサーバーの管理はそうカンタンにはいかないし、クライアント側もインターネットに接続するにはそれなりの技術が必要となる。しかし、その部分以外はきわめてカンタンであったため、爆発的に普及することとなった。世界中に文字どおりくもの巣(Web)のように張り巡らされたリンクをたどって次々と知りたい情報を得ることができる、いわゆるインターネットサーフィンは、実際楽しいものだ。
しかし、楽しくなかったのはMicrosoftである。このままインターネットが普及していけば、パソコンの用途としてインターネットが主流となってくる。すると、Webブラウザ自体がOSであり、もうWindowsだろうがMacOSだろうがOSは何でもよくなってしまう。現実にOracleはいわゆるOSを持たない$500 PCといったインターネット専用端末まで発表しているし、それに準じた製品も別メーカーからすでに発売されている。
さらに、Web Serverからファイルを送らせるのではなく、特定のプログラムを走らせるCGI(Common Gateway Interface)を使えば、あらかじめ作っておいたものではない動的な画面や、データベースとのリンクも可能となる。ここまでくれば、従来クライアント/サーバーの時代だと騒いでいたのが、全部WWWでもできてしまうではないかということになってしまう。もう、DAOもRDOもODBCもOLEも、もちろんVisual Basicも必要ないのである。
もちろん、サーバー側も従来unix主導できたインターネットのこと、Microsoftの独自仕様が目立つ製品群では対処できない部分が多い。
これは、Microsoftにとっては本当に危機的な状況だった。そこで、インターネット対策として大量の新しいアーキテクチャーや製品群を発表することとなったのである。これらの詳細については五十嵐氏のページに任せるとして、結果としてMicrosoftはクライアント側、サーバー側ともに共通のActiveXと呼ばれるアーキテクチャーを導入した独自仕様を持ち込むこととなった。
オープンというキーワードが重要なインターネット市場に、独自アーキテクチャーを微妙なバランスで持ってきたわけだが、現状ではWindows以外のプラットホームでの具体的なソリューションが提示されていない。また、細かいセキュリティや設定などには自由度の点で問題も多い。したがって、本当にActiveX構想がインターネット全般に普及するのかは、まだ疑問である。しかし、企業内でのC/SからWWWを使ったイントラネットの構築ということであれば、かなりの市場が期待できると思われる。というのも、Microsoftの製品はエントリーしやすいからである。とにかく動くものを作りたいという向きには非常にいいのだ。
膨大なActiveX構想だが、本誌の読者諸氏の中にはインターネット自体には興味がない方(本当はそんなことを言っていられない状況であることは認知していただきたいが)も少なくないだろう。しかし、そんな方でもオッと思うのがVisual Basic For Script Edition、いわゆるVB Scriptであろう。その名の通り、インターネットで使われるVisual Basicである。では、いったいどんなところにVisual Basicが使われるのだろうか。
この話をするためには、HTML、そしてHTTPが抱える潜在的な問題について述べなくてはならない。すでに述べたとおり、HTTPは指定されたHTML形式のファイルを送るというだけの単純なシステムである。もちろん、CGIを使って動的なことはできるが、このとき送られてくるものも、一つのファイルと見なすことができる。したがって、一つ一つの作業ごとに一画面が送られてくるということになる。セッション自体も、サーバー側にリクエストを出して、それに対応するファイルを送ってくるまでがワンセッションであり、セッションは継続しない。
ここで、データベースと連動したシステムを考えてみよう。いまクライアント側に送られてきたものは、住所録の入力フォームだとする。Webブラウザ内に表示されるテキストボックスに必要な情報を入力してコマンドボタンを押せば、データベースに登録されるものである。ところが、名前を入力しないでコマンドボタンを押したらどうなるだろうか。Webブラウザは、まったく素直にあらかじめ現在のHTMLに埋め込まれている、押されたことに対応するアクションと対応して実行されるCGIプログラムをサーバー側にリクエストする。名前がないから登録できないという判断は、サーバー側のCGIプログラムが行い、「名前を指定してください」といった情報だけの間抜けなページが送られてくることになってしまうのだ。これはネットワークのトラフィックをいたずらに増やすことにもなるし、あまり感心できない仕様だ。しかし、これしかできないのである。
Visual Basicで考えれば、コマンドボタンに対応するClickイベントでテキストボックスの内容をチェックして、事前にメッセージボックスなどで警告することができるのは言うまでもない。
VB Scriptは、このような問題を解決しようというものだ。すなわち、HTMLというページ記述言語ファイルの中に、Visual Basicのコードを同時に埋め込んでしまおうというのである。
ここまで来れば、イメージがわいてきただろう。HTMLでは当然ながらカスタムコントロールもつかうことができない。そこで、ActiveXコントロール(OCX, すなわちOLEベースのカスタムコントロールをインターネット向けに仕様を見直したもの。言うならば、次期OCX)もHTMLに埋め込んでしまおうというわけだ。もちろん、VB Scriptを使ってActiveXコントロールの制御もできるわけだから、あたかもVisual Basicのようなデザインが可能になるのである。ActiveXコントロールは、クライアントマシンになければ他のグラフィクスやサウンド、マルチメディアデータなどと同様に自動的にダウンロードされ、さらにはレジストリも登録されて実行できるような仕組みになる。
セッションを継続できないHTTPにはトランザクションに関する問題などもあるから、ActiveXコントロールとVB Scriptですべてが解決するわけではないが、かなり使いやすいものが構築できるはずだ。
VB Scriptは、Visual Basic 4.0やVBAのサブセットの言語仕様で書かれたプログラムを実行するための言語エンジンだ。しかし、これはまさに言語エンジンのみであり、Visual Basicのようなエディタ、デバッガといった開発環境は提供されない。VB Script体はOLEオートメーションをサポートするので、Windows環境においてはActiveXコントロールやOLEサーバーの利用など様々なメリットがある。
マイクロソフトは、Windows95版、WindowsNT版、Windows3.1版および Macintosh版のVB Scriptをバイナリモジュール形式で公開し、またソースファイルライセンスも無料で行う予定だという。実際には、Microsoft製WebブラウザであるIE(Internet Explorer) 3.0が各プラットホーム用に公開されるということになるだろう。現在のところ、Windows NT用のIE 3.0αが公開されている。また、MicrosoftはVB Scriptの仕様を公開しており、モジュールだけでなくソースも無料でライセンス契約をすることができる。他のプラットホームやブラウザに対しても門戸を開いているというわけだ。
VB Scriptを語る上でもう一つ面白い、あるいは複雑なのは、ActiveX Scriptの存在である。これは、IEの持つ本来のWebブラウザとしての機能と、VB Scriptのエンジンを分離したことによる。この分離された部分のインターフェイスはOLEで実現されており、これをActiveX Scriptと呼んでいる。OLE AutomationのスクリプトでVB Scriptのエンジンを呼び出すことになる。すると、ActiveX Scriptに合わせて作成された言語エンジンであれば、どんなものでも呼び出すことができるというわけだ。Microsoftでは、後述するJava Scriptもこの方法で使うことができるようにするという。これは、現在のNetscape NavigatorからIEが標準ブラウザとなるための大きな仕掛けではあるが、インパクトとしては今一歩だ。
VB ScriptやActiveXのような仕組みを初めて考えたのがMicrosoftであれば、「これはすごいぞ、インターネットもやはりMicrosoftだ」ということになるのだが、残念ながらそうではない。
すでに同様の仕組みは考えられていたのである。ActiveXコントロールに対応するのが、SunのJavaであり、VB Scriptに対応するのがNetscape/Sun連合によるJava Scriptである。JavaやJava Scriptの方がずっと早くからこういう仕組みを考えていたのだから、Microsoftの製品群は独自性は認めた上で、あえて二番煎じと言わざるを得ない。
だが、後発の方がよくできている点があるのが一般的な話だから、両者を比較してみる必要がある。次に、いくつかの見地から比較してみよう。
Java/Java Scriptには、すでに各プラットホームで実行できるブラウザも存在している。対するMicrosoftサイドのものは、いまだβ版やα版であり、ActiveXコントロールすら開発キットがない状態だ。しかも、プラットホームもWindows系しかないのが現状である。その点では、Jave系の方が断然有利である。
JavaはC++をベースにしたオブジェクト指向言語である。デキるプログラマには受けはいいが、シロートが一朝一夕に書けるようになるものではない。Java Scriptはそのへんが簡略化されているから、比較的カンタンではある。
一方のActiveXコントロールはといえば、これは従来のOCXと同じものだから、一朝一夕どころかはっきり言って難しい。VisualC++とMFCが使いこなせ、かつOLEやVisual Basicについての知識も必要になる。Visual Basic 5.0になるとActiveXコントロールが作れるようになるというから、そこに期待したい。Visual Basicは確かに基本はカンタンである。そのサブセットであるVB Scriptはさらにカンタンであるから、Visual Basicプログラマーにとっては難しいことはない。しかし、Java Scriptだってそんなに難しいわけではないからかならずしも決定的なアドバンテージとは言い難い。
Javaは、Javaアプレットというマシンコードに依存しない中間コードのようなものが送られてくる。Webブラウザは、各プラットホームで実行できる環境を持っている。すなわち、まさにWebブラウザがOSなのである。Javaではあらかじめセキュリティに重大な問題が発生する可能性のあるような機能は、削除されている。といっても裏技は開発されるものだから、まだまだセキュリティホールはあるものと思われる。
一方、VB Scriptもファイル操作やDLLコールができないなど、セキュリティに関することは考慮はされている。しかし、ActiveXコントロールは基本的にはOCXと同様のものだから、何でもアリだ。非常に危険である。せいぜいダウンロード時に「なんかヤバいことが起きてもしらないぞ (y/n)」みたいなメッセージボックスで出る程度である。このため、Microsoftではあらかじめセンターに登録してある安全なActiveXコントロールのみをダウンロードできるような仕組みを考えているようだが、そんなことをいちいちやっていられるかという意見が多い。
いずれもセキュリティには疑問が残るところではあるが、JavaはMicrosoftのような大きな穴、いやザルにはなっていないと言えるだろう。
現状では、セキュリティと汎用性は相反する要素になっている。ActiveXとVB ScriptはWindows上の他の開発言語などとも共通に使うことができるが、セキュリティは低い。一方、Javaはセキュリティは高いが特定のプラットホームでの開発言語との共用はできない。しかし、今後、Webブラウザ自体がOS的色彩を持ってくることを考えると、Javaこそ汎用の言語、アプレットとなる可能性が高い。
Microsoftサイドの製品を使うメリットは、クライアントがWindows系であったとき、すでにあるOCXやActiveXを使うことができ、さらにそれらのパーツをVisual Basicなどからも使うことができるという点だろう。
このように考えてくると、ActiveXやVB Scriptはインターネット上でのアドバンテージはあまりないように思えるが、先に述べたように企業内でのイントラネットではかなりの普及が見込まれると思われる。
次に、VB Scriptの言語仕様を示す。この仕様はざっと見る限りは必要にして十分と言えるだろう。
では、実際にVB ScriptやActiveXコントロールの動作はどうなっているのだろうか。
原稿執筆時では、これを体験するには英語版IE 3.0α版を英語版Windows 95あるいは英語版Windows NT 4.0βで動作させる必要がある。サーバー側は、www.microsoft.comのサンプルのページを見るのが一番だ。ただし、動作が不安定なのか実装されていないのか不明だが、ActiveXコントロールの自動ダウンロードは正常に行うことができず、あらかじめ手動でダウンロードしたActiveXコントロールをインストールしておく必要があった。
また、このActiveXコントロールをVisual Basicから使おうとすると、一部のコントロールは正常に動作せず、Windows NT自体が終了できないという恐ろしい自体が発生した。十分にお気をつけいただきたい。
何がともあれ、コードを見てみよう。次のコードは、www.microsoft.comにあったietimer.htmからの抜粋である。ここでは、回転可能なラベルActiveXコントロールとタイマーActiveXコントロールを使い、一定のインターバルごとに発生するtimeイベントでラベルを回転させたり色を変更したりするものだ。
<OBJECT ...>タグは、使うActiveXコントロールのクラスIDや位置、サイズなどを規定するものだ。続く<param name =.... value=...> タグでは、プロパティの初期値を設定ししている。この定義は、</OBJECT>までの間で指定する。ここでは、coolという名前(id)の回転可能ラベル、labelというidの回転ラベル、timer1, timer2というidのタイマーの合計4つのActiveXコントロールを指定している。
ちなみに、ActiveXコントロールが固有のものであることを判断する基準は、classidによる。このidはもちろん従来のOLEサーバーやOCXなどと同じである。このIDは当然ながら世界中に唯一つ存在するものでなければならない。この生成メカニズムは、コントロールを作成するマシンに内蔵されているネットワークカードのIDとの組み合わせで行われる。ネットワークカードのIDは固有のものであり同じものは二つとないことになっているから、そのマシンで作成されたActiveXコントロールも世界で一つしかないことになる。しかし、ネットワークカードが入っていないマシンを使ったときには重複するものが存在する可能性があるし、このIDを偽造すればかなりヤバいこともすることができるはずだ。これも重大なセキュリティホールである。
それはさておき、その後に続く<SCRIPT LANGUAGE="VBS">タグから</SCRIPT>タグまでの間に記述されたものは、通常のHTMLではなくActiveX Scriptであり、"VBS"の指定から接続すべき言語エンジンはVB Scriptということになる。ここの内容は従来のVisual Basicとまったく同じようなコードを記述することができる。ここでは、labelは回転させ、coolは色を変えるコードが記述されている。
<OBJECT
classid="clsid:{99B42120-6EC7-11CF-A6C7-00AA00A47DD2}"
id=cool
width=50
height=1300
align=left
hspace=20
vspace=0
>
<param name="_extentX" value="50" >
<param name="_extentY" value="700" >
<param name="angle" value="90" >
<param name="alignment" value="3" >
<param name="BackStyle" value="0" >
<param name="caption" value="Cool Controls">
<param name="FontName" value="Arial">
<param name="FontSize" value="20">
<param name="FontBold" value="1">
</OBJECT>
<OBJECT
classid="clsid:{99B42120-6EC7-11CF-A6C7-00AA00A47DD2}"
id=label
width=120
height=120
align=right
hspace=0
vspace=0
>
<param name="angle" value="0">
<param name="alignment" value="2">
<param name="BackStyle" value="0">
<param name="caption" value="Cool OCX">
<param name="FontName" value="Lucida Handwriting">
<param name="FontSize" value="30">
</OBJECT>
<OBJECT
classid="{59CCB4A0-727D-11CF-AC36-00AA00A47DD2}"
id=timer1
align=middle
>
<param name="TimeOut" value="100">
<param name="enable" value="1">
</OBJECT>
<OBJECT
classid="{59CCB4A0-727D-11CF-AC36-00AA00A47DD2}"
id=timer2
align=middle
>
<param name="TimeOut" value="500">
<param name="enable" value="1">
</OBJECT>
<SCRIPT LANGUAGE="VBS">
sub timer1_time
label.Angle = (label.Angle + 5) mod 360
end sub
sub timer2_time
cool.forecolor = rnd() * 16777216
end sub
</SCRIPT>
<INPUT TYPE=BUTTON VALUE="Send" NAME="Send" onClick="SendComments">
<SCRIPT LANGUAGE="VBS">
SUB SendComments
Alert "Thank you, your comments have been sent."
End SUB
</SCRIPT>
この他にも、リストボックスやコンボボックスなどからの指定によってオプションボタンやチェックボックスの値が自動的に変更されるといった処理や、リストボックスから別のリストボックスへのアイテムの移動なども、VB Scriptを使って記述することができる。もちろん、もっと複雑なものもActiveXコントロールと組み合わせれば作成することが可能だ。次に、www.microsoft.comにあったピザ注文サンプルを示す。
MicrosoftのActiveX構想でもう一つ興味深いのは、DCOM(Distributable Compornent Object Model)である。COMはOLEの中核を担うメカニズムだが、それを分散可能にしたのがDCOMである。すなわち、ネットワークで接続されたマシン間でのOLE Automationをするものだと言い換えることができる。別の言い方をすれば、Visual Basic 4.0 Enterprise Editionに搭載されたリモートオートメーションの正式版である。
DCOM自体は、Windows NT 4.0からサポートされることになる。ActiveX構想では従来のOLEサーバーと同様に、言い換えればVisual BasicからOCXを使ったのと同様にクライアント側のIEでActiveXコントロールをVB Scriptで制御できる他、サーバー側に用意されたActiveXサーバーアプリケーションと通信をすることができるようにするという。ということは、もはやHTTPは画面イメージを送るためだけに使われるもので、その他の処理は全部ActiveX構想で拡張されたものでやってしまおうということにほかならない。
これは、確かに大きな改革であるが、果たしてよい改革なのか疑問と言わざるを得ない。HTTPのメリットはカンタンであることだ。それを無視して通信プロトコルまでも勝手に拡張していいものだろうか。私にはどうも正常な進歩とは思えないのである。DCOMはこういう使い方でない方がスマートだと思うのだが...。
すでに何度も述べたように、ActiveX構想やVB Scriptはそれなりに便利なものではあるが、セキュリティやプラットホームの多様性を考えると、インターネットでどの程度普及するのかはまだまだ未知数である。さらに、今回のレポートではα版、β版といったレベルのものしかなかった。私にはこのままの構想で今後の製品が出てくるとは考えにくい。さらにブラッシュアップしてくるはずである。その構想がどのように変化するかはわからないし、妙な詮索をするより出てくるものを楽しみにしたい。
そういう意味では、現状のさっぱりビジュアルに作ることができない環境ではなく、Visual Basicライクにデザインすることができるような環境が一日も早く登場することを待ちたい。
ごらんいただいたように、VB Scriptはカンタンだ。Visual Basicを少々いじったことがある方ならば、何も難しいことはない。したがって、このように「待ちたい」などと悠長な表現をしてしまうわけだが、ただ待っていればよいというものではない。
すでに機能までのクライアント/サーバーコンピューティングなどという言葉は、もうトレンドではないのだ。インターネット時代はものすごい勢いでそこまできているのだ。今すぐにでも、HTTPやWWWサーバーの仕組みを調査したり学習するべきだ。
Visual Basic + RDOとかリモートオートメーションなどはもう使うことはないとまでは言うつもりはない。今からでもそういうものを使う柔軟なアプリケーション開発は当然あるはずだ。だが、もしあなたがインターネットのことを知ろうとしなければ、近いうちに必ず破滅がくるだろう。