酒井法雄のVBコンプリート

4ActiveXMicrosoftのインターネット戦略

ここのところ、Microsoftはインターネットに力を入れている。3月にサンフランシスコで開催されたPDC(The Professional Developers Conference)の内容も、インターネット一色であった。そして、4月に東京で開催されたインターネットデイでは、早くもPDCで発表された内容が国内でも発表になった。

Visual Basicを使った開発者にとってもすでに人事ではない。すでに開発のプラットホームはインターネットにシフトしているのだ。ではMicrosoftはどのようにインターネットにアプローチしようというのだろうか。今回は、Microsoftのインターネット戦略を紹介、分析し、

我々開発者が考えなくてはならない近未来を描き出すことにしよう。

有限会社イント・ツーワン 酒井 法雄 (E-mail norio@int21.co.jp)

Visual Basic 4.0は数々の優れた特徴を持った開発ツールである。この連載ではこのVisual Basic 4.0での新機能を中心に紹介してきた。本誌別冊であるVisual Basic Magazieと合わせて読んでいただければ、Visual Basic 4.0の新機能についてはほぼご理解いただけているだろう。あとは、この膨大に増えたVisual Basic 4.0の機能の細かい部分のノウハウなどを毎月紹介して行こうと考えていた。

しかし、時の流れは速い。いや、速すぎる。すでに次なるVisual Basic 5.0が年内に発売されるという噂も出てきた。Visual Basic 5.0では、コンパイラが搭載されて高速なオブジェクトを作成できるほか、OCXを作成することができるようになるという。このあたりは、今年半ばに発売されるWindows NT 4.0(日本語版は年末か?)でサポートされるネットワークOLEに伴う変更もあるので、独自仕様のリモートオートメーションを搭載しているVisual Basic 4.0にとってはどうしても必要なバージョンアップだろう。もっとも、このWindows NT 4.0はいわゆるCairoではない。従来NT 3.51のシェルをWindows 95ライクなものに乗せ換えるという、いわゆるシェルアップデート版である。分散オブジェクトOSは、まだ来年以降の話になるようだ。

そうこうするうちに、Visual Basic 6.0の噂まで聞こえてきた。5.0でさえまだ姿が見えていないというのに、もう6.0である。一般にこのような発展途上にある製品や技術は、発売あるいは発表された瞬間に古くなるものだ。さらに言うならば、社内的に仕様が固まって開発がスタートした瞬間から古くなっているのである。その間に新しい技術が確立されれば、製品の発表を待たずしてそれは古いテクノロジーとなってしまうのである。では、そんな中途半端なバージョンはやめてしまえばよいようなものだが、そうはいかない。自社OSを売りたいMicrosoftにとっては、Windows NT 4.0に合わせたVisual Basicを発売せざるをえない。加えてライバルのDelphi 2.0に高速性や柔軟性で負けている以上、コンパイラとOCX作成は必須項目なのである。

では、Visual Basic 6.0の必然性となる技術とは一体何なのだろうか? それは、一言で言うならばインターネットである。

といっても、一般的なアプリケーションを作っている方や、C/SだRDBMSだと騒ぎ続けてきてやっとVisual Basic 4.0で本当に効率的に実現できそうだというので開発に追われている方にとっては、「インターネットがなんだっていうんだ。そんなの関係ないぞ」とおっしゃるのもごもっともである。しかし、本当にそう思うのならば、なおさらインターネットについて学習する必要があると断言しよう。あのMicrosoftがすべてのプロダクトをインターネット向けにシフトすると言っているのだ。Visual Basic for Script Editionというインターネット向けの言語や、OCXをインターネット向けに仕様を見直したActiveXも発表されたのだ。これはもう傍観しているわけにはいかないだろう。単なる流行り以上に重要なことがあるはずだ。

そもそも、インターネットとは1980年ごろに米国国防総省(DARPA)がはじめた研究プロジェクトである。いわゆるLocal Area Networkを複数繋げた形で広大なネットワークを構築し、離れたコンピュータどうしで通信をできるようにしようというものだ。このために採用されたのがTCP/IPプロトコルであり、それに密接して発展したのがTCP/IPをネイティブプロトコルとしたBSD(UNIX)であった。UNIXマシンを接続することからスタートしたインターネットは、当初はあくまでも研究プロジェクトであった。我が国でも大学や企業を中心にしてjunetが構築された。しかし、当時多くのUNIXワークステーションどうしは一般の電話回線とちょっと特殊な高速モデムを使ったUUCP(Unix to Unix CoPy)で接続されており、いわばバケツリレー式に情報を共有していた。私の属する有限会社イント・ツーワンも、5年以上前からこの方式でインターネットに参加していた。

この当時は、インターネット上で商売するというのはご法度であったし、くだらない情報を流すと顰蹙をかったものだ。というのも、一般回線を使うバケツリレー式転送では、その電話代も馬鹿にならなかったのだ。不要なトラフィックは減らさなくてはならないのは当然のことだったのだ。

 

 

しかし時代は変わり、プロバイダーと呼ばれるインターネット接続回線供給会社ができ、インターネットは研究の場だけではなくなってきた。今や、Windows 95をインストールすれば、すぐにでもインターネットに接続できるようになっている。TVやラジオでもインターネットという言葉を聞かない日はないほどだ。それもそのはず、インターネットはすでに広告やサービスのメディアとなっているのである。昨年一年間でインターネット上のサーバーは莫大に増え、一年前の1万台から一気に6万台になった。ホスト数では900万を越えている(図)。

以前からインターネットを何気なく使っていた私などは、この変わりようにはただただ驚くばかりである。

では、どうしてここまでインターネットが普及してきたのだろうか。よく考えてみれば、インターネットは世界中のコンピュータを繋ごうという壮大な仕掛けである。だが、それだけだ。それだけだが、それがすごいことなのだ。それだけというのは、名前がインターネットとついているだけの話で、基本的にはTCP/IPで接続されたコンピュータに過ぎないということだ。すごいというのは、TV並みに普及していき、ついには各家がインターネットで接続されるようになるだろうということだ。

カンタンに考えよう。ここにネットワークで接続された2台のコンピュータがあるとしよう。この構成でできることはなんだろうか? ファイル共有、プリンタ共有、データベースのC/Sシステム、電子メイル、ニュースなどと答えるのは、アナタがこの業界に毒されているからだ。プリミティブに考えて、できることはたった一つだけだ。それは、通信である。

コンピュータ間で通信さえできれば、その通信で何をするかなどということはその上の次元で考えるべきことなのである。つまり、電話があったら何に使えるかという話と同じである。単におしゃべりをしてもいいし、仕事に使ってもいいし、リクエストを受け付けてもいいし、情報サービスをしてもいい。FAX情報サービスという手もある。つまりは送り手と受け手で共通の取り決めをしておけば、アイデア次第でどうにでも使うことができるのである。このような取り決めをプロトコルという。

インターネットで使われているTCP/IPプロトコルは低レベルのプロトコルで、異なるLANのセグメントを渡り歩くことができる。すなわちルーティング可能なプロトコルである。したがって、あちこちのLANを通り、特定の相手と通信することができるのである。これで通信ができるわけだから、その上でのプロトコルを決めておけば、メイルだろうがファイル共有だろうが、コンピュータどうしがうまく判断して実行してくれるわけだ。このようにプロトコルには複数のレベルがあり、これをプロトコルソフトウェアの階層と呼ぶ。

このような上位プロトコルには、電子メイルのSMTPやPOP3、ニュースのNNTPファイル転送のFTPやGopherといった数々の便利なものが用意されている。さらには、リモートマシン間でのプロシージャコール、すなわちRPC(Remote Procedure Calls)を使って、ほかのマシン上にあるプログラムを実行させることすらできる。

はっきり言って、OLEやVisual Basic 4.0やらでネットワークOLEとかリモートオートメーションなどと言っているのは、RPC上にさらにプロトコル層を作って使いやすく(分かりにくく)したにすぎない。もっと分かりやすく作ることはいくらでも可能なのである。ちゃんちゃらおかしいのである。ちなみに、OLEでのLRPC(Lightweight Remote Procedure Calls)はスタンドアローンなマシン内でのプロセス間通信であり、Lightweightなどという前置詞をつけたところで許されるべき名前ではない。RPCとは次元が違うのである。

インターネット、すなわちUNIXでは標準的に使われてきたこれらのプロトコルの多くは、あくまでもテキストベースでのプロトコルであり、分かりやすくデバッグもしやすい。仕様ももちろん公開されている。非常に洗練されているものだ。ところが、PCでの世界ではやれCc:Mailだの、Exchangeだの使いにくくて重いメイルアプリケーションが横行している。私の会社のように従来からUNIXをメインでコミュニケーションをしてきたシステムにPCクライアントを入れたところで、そんなものは使いものにならない。今やタダ同然、いや、タダで手に入るUNIXをPCにインストールしてメイルサーバーとし、各プロトコルに合わせたソフトウェアを作った方がずっとスマートである。MicrosoftやLotusが独自仕様にするのは、OS囲い込み、NotesやExchangeサーバー囲い込みに過ぎないのだ。

話を元に戻そう。これらのプロトコルはインターネットでは、すなわちUNIXの世界では従来から標準のものである。そして、今インターネットがこれほど騒がれているのも、こういったプロトコルの一つであるHTTP(Hyper Text Transfer Protocol)が火付け役となっている。

Hyper Textとは、Windowsのヘルプシステムのように、あるページ中にある特定のキーワードやアイコンをマウスでクリックすると、別のページに移動するというものだ。ヘルプシステムですでにご存じの通り、よくできたヘルプは非常に使いやすい。面倒な操作もなく、マウスをクリックするだけで情報を得ることができる。このようなHyper Textのページをサーバーからクライアントに送ってくるプロトコルがHTTPである。

 

 

HTTPでは、クライアントからURL(Uniform Resource Locator)と呼ばれる文字列を送信する。URLには、HTTPサーバーのあるマシンのアドレスおよび、そのマシンにあるHyper Textファイルのパス名(通常拡張子HTMLまたはHTM)を指定する。インターネットを通じて目的のサーバーに文字列が届くと、サーバーから指定されたページがクライアントに送られてくる(図 2)

 

このプロトコルにはセッションの継続という概念はない。すなわち、ファイル転送がされている間のみセッションが確立されているということだ。同じサーバーに何度かアクセスしても、それぞれは別セッションである。

HTTPで送られてくるファイルは、HTML(Hyper Text Makeup Language)と呼ばれるテキストファイルである。この内容は、タグと呼ばれる制御文字列と通常のテキストの組み合わせであり、クライアント側でこの形式をデコードして適切な画面を作る(図PPT 3)。このとき、グラフィックスやサウンド、ムービーといった形式のファイルがタグ中に指定されていれば、そのファイルもバイナリ転送される。もちろん、タグ中にURLが指定されてあれば、対応する同じまたは別のサーバーから次のHTMLファイルを転送させることができる。

このように、URLから別のURLをマウスをクリックするだけで渡りあることができる。いわゆるインターネットサーフィンである。URLはあちこちにサーバーが指定されており、それらの組み合わせはまるでくもの巣(Web)状であることから、このシステムをWorld Wide Web(WWW)と呼ぶ。サーバーはWWW Serverあるいはhttpd、クライアントはWeb Browserと呼ばれるソフトウェアを使う。WWW Serverは、HTTPの開発元であるCERNやNCSA、幾多のNCSAクローンなどがある。Web Browserとしては、HTTPが流行るきっかけとなったNCSA Mosaicや、そこから独立して今やデファクトスタンダードとなったNetscape Navigator、負けじと頑張るMicrosoftのInternet Explorerなどがある。

 

このように、Web Browserはマルチメディアをサポートしており、マウスをクリックするだけという使いやすさ、さらにはオプションボタンやチェックボックス、テキストボックス、コマンドボタンなども標準でサポートしており、ある程度のインタラクティブ性も兼ね備えている。インターネットのように世界中にサーバーがあるネットワークで使えば、世界中で公開されている情報にアクセスすることができる。このような情報には、今や個人的なものだけではなく、広告やカタログショッピング、さらには不動産や中古車の情報検索などシステムまである(図PPT 4)。

また、バイナリファイルもダウンロードできるから、ソフトウェアの販売やアップデートなどにも使われている。

ちょっと前までUNIXマシンどうしを接続するためのものだったインターネットは、大きな変革期を迎えている。プロバイダーを通した営業が可能になり、HTTPの普及によって情報を得るだけならオペレーションには専門知識を必要としない。ソフトウェアやハードウェアを見ると、Windows 95などにはWeb ブラウザがバンドルされている。インターネット専用端末も5万円ほどの低価格で発売された。高速モデムも低価格になった。インフラの点では、ISDNの普及によって高速回線も手軽になってきた(とはいえ、通信料金は高価だ。事実上のNTT独占形態を変えるとか、NTTが心を入れ替えるとかしてほしいところだ)。プロバイダーの数が多くなり、接続料金も低価格になってきた。さらに、ケーブルテレビの回線を使ってインターネット接続が可能になりつつある。こうなってくると、行き先は見えてくる。インターネット端末は、テレビなどと同様あるいは融合された形の家電製品となるだろう(図PPT 5)。

パソコンは道具である。目的ではない。ならば、インターネットという目的に使われることも当然である。ソフトウェア開発が特定の一部企業を相手にするよりは、家電のような一般市場を相手にした方が格段に利益も上がるのも、これまた当然である。

そういうわけで、企業はこの新しいメディアでの情報発信に注目しており、すでに多くの会社が広告あるいはサービスとしてこのメディアを使い始めている。また、一般ユーザーもWindows 95騒ぎでついつい買ってしまった使い道のないパソコンを、有効な情報取得端末として使い始めている。今やパソコンはインターネットにつながって当たり前の時代である。インターネット抜きにして、今後のパソコンは語れないのである。

そうは言っても、昨日までのトレンドはC/Sシステムであった。PCの高性能化、低価格化によるダウンサイジングで、汎用機に依存してきた業務形態を変えようということだ。PCクライアント、そしてPCサーバーとその上で動作するSQLエンジンを搭載したRDBMSでのシステムを構築することに、多くの企業が血眼になった。しかし、なかなかよいツールがないまま話ばかりが先行し、やっとVisual Basic 4.0のRDOでその糸口が見えてきた。さあ、いよいよC/Sの構築ができる。しかし、Visual Basic 4.0のリモートオートメーションを使えば、3階層モデルも可能になる。そのノウハウを確立せねばならない。今はそういう状況の方も多いだろう。インターネットどころではないという気持ちも納得できる。

しかし、インターネット、いやHTTPプロトコルを使ったWWW技術は、そういった社内システムにも関係することなのだ。というのも、WWWサーバーからRDBMSサーバーに接続すれば、WebブラウザでRDBMSにアクセスすることができるからだ。このとき、図(PPT 6)のような3階層モデルと

 

 

 

 

 

 

考えることができる。ちなみに、Visual Basic 4.0 Enterprise Editionでの三階層モデルは、図(PPT 7)のようなものだ。

3階層モデルのメリットには、次のようなことがある。

いわゆる負荷分散が可能になるので、全体としてパフォーマンスが期待できる。

クライアント側は表示と入力をするためだけのものであり、プログラムがすべき処理はサーバー側にある。したがって、変更は一か所で済み、クライアント側のプログラムを入れ換える必要はない。

一連のトランザクションはビジネスルール層とデータアクセス層間で行われるので、ネットワークのトラフィックを減らし、システム全体の負荷を軽減することができる。

このメリットは、そのまま両方の3階層モデルに言えることだ。ただし、WWWでの3階層構造には問題も少なくない。詳しくは後ほど述べるが、各社ともこの問題を解決すべくさまざまな新製品の計画を発表している。

このようなシステムをWWWで構築できるならば、従来作成していたクライアント側のアプリケーションすら作る必要はなくなってしまう。Webブラウザがあればいいだけの話だ。そこで、このHTTPプロトコルを使ったシステムで社内のシステムまでも構築してしまおうというのが、俗に言うイントラネットである。

イントラネットはインターネットでのWWWの仕組みをそのまま使えるから、すでに社外に情報発信をしている会社ならば、ある程度システムを共有したり、社内外に共通の情報を公開することができる。また、メイルやニュースなども社内外で使うことができる。さらには、WWWを使った電子会議システムや製品管理などのシステムも可能である(図 PPT 8)。

もちろん、この場合に一番重要なのはセキュリティの問題であるから、十分に構成は考慮しなくてはならないのは言うまでもない。

このように、イントラネットをWWWをベースにして構築すれば、メンテナンス性を上げられるし、クライアントはパソコンの機種を選ばない。それどころか、いわゆるインターネット専用端末のようなハードディスクすらないようなマシンでもかまわないのである。しかし、このまますべてがすんなりとWWWになるとは思えないが、トレンドがC/SからWWWに移行しつつある理由はここなのだ。

まるでいいことずくめのようなWWWだが、問題もある。それも、データアクセスを考えたときには、非常にクリティカルな問題だ。これは大きく分けて2つある。いずれもHTTPというプロトコル自体に内包したものである。順番に述べることにしよう。

第一の問題は、HTMLファイルが必要になるということだ。

WWWは、先に述べたようにHTTPを使ったファイル転送のプロトコルである。したがって、あらかじめファイルが用意されていないものは送ることができない。だが、それではいくらなんでも芸がなさすぎるというものだ。ちゃんと解決する方法が用意されている。それは、CGI(Common Gateway Interface)と呼ばれるものだ。

通常、URLにはサーバー名とHTMLファイル名の組み合わせが指定される。しかし、HTMLファイルの代わりに実行ファイル名を指定することができる。このとき、同時に引数として変数名とその内容も同時に送ることが可能だ。この変数名はあらかじめHTMLとして記述されたチェックボックス、オプションボタン、ドロップダウンリストボックス、テキストボックスなどにつけた名前が使われ、指定した内容が送られることになる。

指定される実行ファイルは、UNIXのシェルスクリプト、MS-DOSで言うならバッチファイルのようなものである。もっとも、シェルスクリプトは構造化して記述できるような言語であり、バッチファイルのようなものと言ったらあまりに失礼ではある。こうして実行されたプログラムは標準出力(Windowsになってからあまり出てこない言葉だが)にHTML形式のテキストを出力する。WWWサーバーは、この内容をクライアントのWebブラウザに返すというわけだ(図 PPT 9)。

CGIでは通常シェルスクリプトではなく、perlと呼ばれる言語を使う。この言語は何でもありの言語で非常に強力なのだが、逆に言えば節操がない。また、perlはUNIX用として開発されたものである。MS-DOS用などに移植されているが、UNIXのシステムに依存している便利な機能などは使うことができない。まあ、ふつうはWWWのサーバーはUNIXである。

このようなCGIの機能を使った方法であれば、プログラムが自由にHTMLを作成することができるから、自由度はきわめて高くなる。だが、一般的にはCGIを駆使したようなシステムはまだまだ少ない。というのも、HTML自体は非常にカンタンなスクリプトであるから、ちょっと勉強すれば誰でも書けるようになる。このWWWの商売をしているホームページ作成屋みたいな会社は、プログラムなどの技術はほとんどなく、むしろデザイン屋なのである。したがって、そういうシステムは作れないというわけだ。ましてやRDBMSとの連携や社内システムとの連携などといったら、できるところは非常に限られてしまう。

というわけで、ここでちょっと宣伝をさせていただくと、私の属しているイント・ツーワンではこのようなWWWとRDBMSを組み合わせたシステム構築をしている。また、今後はサーバーを自社内に設置するほど経費をかけられないという方のために、RDBMSとWWWサーバーを連動させるタイプの検索/注文/連絡システムを使った情報サービスを提供する予定だ。興味のある方はお気軽にお問い合わせいただきたい。

本題に戻るが、まだ問題は残る。先に述べたようにHTTPは継続したセッションを持たないプロトコルだ。したがって、一連のトランザクションが必要となるような処理をすることはできない。このような処理をするときには、CGI側でトランザクションの管理をするか、あるいはRDBMS側にストアドプロシージャを作成しておき、それをコールするかのいずれかの手法が必要になる。このあたりの技術があれば、WWWとRDBMSとの連動が可能である。

こうしたところに早くから注目したのが、RDBMS界の巨人Oracleである。Oracleでは、自社のRDBMS Oracle 7 Serverと接続可能なWWWサーバーをいち速く製品化した。このOracle Web Serverでは、CGIを使ったときに起動されるプロセスの数が馬鹿にならないことに注目し、そのオーバーヘッドを回避するようなシステムを目指している。さらに、分散処理なども含めたトータルなインターネット/イントラネットのソリューション構想を発表し、今年後半にはWeb Serverもバージョン2.0になる予定だ。この他にもODBC接続が可能なWWW Serverを作っているベンダーは多い。しかし、いずれも高価でありトランザクション処理に向いていないものも少なくないのが現状である。

何より問題なのはオープンを旗印にしてきたUNIX業界で独自仕様のインターフェイスやAPIが生まれることだ。仕様が公開されていないものなどは使わないのが常識である。

もう一つの問題は、クライアント側での自由度の低さである。

HTTPで送られてくる内容は、CGIを使ったものであってもクライアント側にしてみればHTML形式のファイルを表示するにすぎない。したがって、忠実に画面を作り、ユーザーがクリックした内容を表示することができるだけだ。もちろん、テキストボックスなどに指定した文字列やオプションボタンなどで指定した内容を送ることはできる。

しかし、事前にチェックすることはできない。つまり、名前を入力しないで申し込みをしても送信されてしまうのである。サーバー側では名前が入っていないことをチェックして、エラーのHTMLを送る。これではネットワークのトラフィックがいたずらに多くなってしまう。このような問題は、本来クライアント側であらかじめ回避したいものだ。

また、注文するものによって金額が変わったり、複数のものを注文するときに金額が自動計算されるというようなことも、いちいちサーバー側に送らなくてはならない。このような情報は、クライアント側で処理できた方がいいものだ。

また、アニメーションなどの効果もクライアント側でないと処理することができない(GIFというグラフィクス形式を使ったアニメーションという手はあるが...)。

しかし、HTTPではインターネット専用端末と呼ばれるものがあるくらいで、クライアント側は単なる端末にすぎない。言うならば、telnetあるいはパソコン通信などに使われるターミナルエミュレーションソフトウェアのようなものである。ターミナルソフトならばマクロみたいなものもあるが、端末側であらゆるサーバーに対応した形でマクロをいちいち組んではいられない。また、そういったマクロが処理に必要になるならば、Webブラウザさえあればどうにでもなるというメリットも損なわれてしまう。

そこで考えられたのが、Sun MicrosystemsのJavaである。ちなみにこの開発にかかわったのが、BSDを作ったかのBill Joyである。JavaはC++を元にして作成されたオブジェクト指向の言語である。専用のコンパイラでバイナリファイルにすることができる。WWWはあらゆるプラットホームで実行されるから、CPUやOSに依存したバイナリファイルではマズい。そこで、中間コード的なバイナリファイルになっている。これをJavaアプレット(小さなアプリケーション)と呼んでいる。

Javaの考え方は、HTMLと同時にプログラムも送ってしまおうというものだ。グラフィクスや音声データなども送ることができるのだから、バイナリデータを送るのはわけがないことだ。しかし、単にバイナリデータが送られても、それを実行しなければ意味がない。そこで、Javaのバイナリコードを実行することができるブラウザが必要になる。現状では、Javaのα版に対応しているのがSunのHotJava、β版に対応しているのがNetScape Navigator 2.0以降のものである。こうして対応したブラウザでJavaのアプレットが実行されるわけだ(図PPT 10)

しかし、わけの分からないプログラムが勝手に送られてくるのは恐ろしいことでもある。ウイルスどころかプライベートな情報を盗んで勝手に特定の相手にメイルするようなプログラムなどが知らないうちに動作していたのではかなわない。そこで、JavaではハードウェアやOSレベルでのファイルアクセスなどの機能はすべて操作できないような限定された言語仕様になっている...はずだったのだが、抜け道はあるもので、Net Scape 2.0ではJavaでファイルを消すことができるという問題が発生し、これを回避すべく2.01にバージョンアップされている。だが、まだまだ怪しいという噂もあるようだ。

Sunの示したもう一つの解決法は、Java Scriptである。これは、HTMLのタグの中にJavaのサブセットとなるコードを埋め込んで実行させてしまうというものだ。これならば、バイナリファイルよりは安心というところである。

このように、JavaはHTTPの限界を越える画期的なアーキテクチャーを持っていたため、β版どころかα版のときから脚光を浴びることとなった。しかし、Javaは多分にオブジェクト指向言語であり、C++くらい使ったことがないとすぐには修得できるようなものではない。その点、サブセットであるJava Scriptで業務などには十分であろう。ともあれ、この分野は発展途上である。時間があればぜひ触っておきたいものだ。

ちなみに、Javaはジャバと発音されるのが一般的だ。これは英語読みであり、フランス語だとジャワになる。実は、ジャワ産のコーヒー(トアルコトラジャか?)というのが語源だそうだ。

こうしたインターネットの隆盛を見て慌てたのがMicrosoftである。Microsoftは、いまやパソコン業界では誰がなんと言おうがスタンダードである。しかし、その仕様は泥臭いものが多いのも確かだ。いわば場当たり的に作ったものを売り、これを使っていれば将来はもっとよくなりますよというようなことを延々と繰り返してきた会社である。どうしてみんなこんなことに気づかないのが不思議なくらいだが、気づいてもどうしようもなかったというのも事実である。

Microsoftは成功した。パソコンの分野ではLotus Notesに対抗すべくグループウェアのプラットホームとしてExchange Serverをぶち上げたものの、なかなか日の目を見ないのが、唯一の失敗だったかもしれない。

しかし、ここへきてMicrosoftはインターネットビジネスに大きく出遅れた。気づいたときにはNetscape NavigatorがWebブラウザの標準を確立していた。サーバー側のプラットホームはUNIXがメインであり、Windows NTではない。ビデオオンデマンドや電子マネーといった分野をマルチメディアの先鋒として考えてきたのに、気づいたらUNIXのテキストベースのカンタンなプロトコルにマルチメディアの未来は変わっていたのだ。これでは常に成功してきたBill Gatesとしては虫の居所も悪くなろうというものだ。

Microsoftのゴールは三つあると思われる。

一つ目は、クライアント側であるWebブラウザの市場を制覇することだ。

二つ目は、これ以上UNIXを普及させないこと、すなわちWindows NTをサーバーの標準とすることだ。

三つ目は、電子マネーなどの従来から投資してきた技術をそこへ融合することだ。

一つ目のゴールを達成するために、MicrosoftはWindows 95 PlusにInternet Explorerをバンドルした。しかし、これは思ったほどの成功はなかった。世界的にはやはりNetscapeの標準は揺らいでいない。しかし、国内ではお手軽にインターネットを楽しむ人々にInternet Explorerは使われているようだ。

そもそもNetscapeが標準たりえたのは、HTTPをここまで普及させた原動力であるNCSA Mosaicの作者が作った会社の製品だからだ。使いやすさやプラグインなどの拡張性、Javaのサポート、さらには事実上タダ同然でばらまくといった戦法が功を奏したのだ。

Internet Explorerを標準とするためには、これらの標準を取り入れた上で、Microsoft独自の仕様を盛り込む必要があった。

二つ目のゴールを達成するためには、MicrosoftもWWW Serverを作る必要があった。しかも、Windows NT上で動作するいわゆるBack Office系の製品との融合を確立すれば、それは強みになる。もちろん、Windows NTのセキュリティシステムとの連携も忘れてはならないことだ。

三つ目のゴールは、先の二つのゴールが達成されていればたやすいことのはずだ。クライアント、サーバーともに標準となればいいのである。

そして、PDCで発表されたのが、一連のプロダクトとアーキテクチャー、そして例によって将来の展望であった。これらの製品群、そしてアーキテクチャーだけで一冊の本が書けるほどの内容である。まずは各アーキテクチャーと製品のの概要を述べよう。

クライアント系

Java Scriptの代わりにVisual Basicの言語仕様でHTMLにスクリプトを埋め込むことができるようにした仕組み。Microsoftとしては32bit Windows用Internet Explorer 3.0に搭載する。言語仕様は公開(ライセンスフリー、ロイヤリティーフリー)するので他のプラットホームにはサードパーティが移植することを期待しているようだ。

Javaアプレットに近い位置づけのものである。Javaとの違いは、基本的にはOCXの拡張である点だ。すなわち、OLEベースのカスタムコントロールである。Javaのように単体で動作させてもいいし、VB Scriptと組み合わせて実行させることもできる。すなわち、Internet Explorer 3.0がVisual Basic環境になったようなものである。また、従来OCXと呼んでいたものも、今後はすべてActiveXの仕様に合わせて共通化させる。すなわち、従来のOCXは仕様を変更してActiveXとなり、Visual Basicでもインターネット用ブラウザでも使えるようになる。ActiveX SDKは、microsoft.comからダウンロードできる。

新しいMicrosoftのアーキテクチャーを使うためのブラウザ。HTML 3.0、VB ScriptおよびActiveXをサポートする。現在、英語α版がリリースされている。

インターネット用標準プロトコルであるTCP/IPおよびその上位レイヤーに属するプロトコル、すなわちSMTPやFTP、さらにはHTTPなども扱うことができるActiveXコントロール集。すでにβ版をmicrosoft.comからダウンロードできる。

ActiveXの開発が可能になる。コンパイラも含まれ、おそらく年内には発売されるだろう。

ActiveXやMicrosoft製WWW ServerであるInternet Information Server(IIS)で提供されるInternet Server API(ISAPI)を使うことができるようになる。これはMFCでサポートされる。4.1ではISAPI、4.2ではActiveX用クラス、4.3ではActive Documentsコンテナのサンプルが含まれるという。ここまでの出荷は年内に行われる予定。

サーバー系

Windows NT Server用WWW Server。HTTP、FTP、Gopherのサーバーである。Workstationでは動作しない。英語版はすでに2/14よりインターネットで無償配布をしており、日本語版は5月に出荷を開始する。基本的にはタダの製品であり、近々発売されるWindows NT 4.0(日本語版は年末か?)にはバンドルされる。IISには次のようなMicrosoft独自のアーキテクチャーも含まれているが、それが本領を発揮するのはIIS Version 2.0に含まれる予定のActiveXサーバーフレームワークが登場してからだろう。

IISにはCGIのインターフェイスに加えて、独自のAPIセットISAPIが含まれている。このAPIセットを呼び出すDLLでCGIの代わりをさせようというものだ。

ISAPIから呼び出されるDLLを使って、ODBCデータソースに接続することができる。

サーバー側にAciveXコントロールを配置することができる。これはJavaアプレットのようにクライアント側にダウンロードして実行させるものの他に、サーバー側のAPIと組み合わせて使うことができる。

VRMLに対応したMicrosoftのソリューション。

次期Windows NT。ネットワークOLEをサポートし、IISをバンドルする。年内には日本語版が発売されるだろう。

次期SQL Server。異種レプリケーションをサポート,、分散トランザクション機能、列単位でのロックといった基本機能の強化に加えて、インターネットで使われることを前提にした様々な拡張がなされている。Windows NT 4.0より前に出荷されるようだ。

メイルやニュースに対応したバックエンド処理をするサーバー。

汎用機などとSNAで接続するためのサーバー。

リモートメンテナンス用サーバー。

インターネットで商業目的のWWWサイトを構築するためのサーバー。暗号化や認証などの機能を実現している。

TPモニター。97年に発売予定。

この他にも細かいアーキテクチャーや製品などが目白押しである。たとえば、WordでHTMLを書けるようになるなどということから始まって、WordやExcel、さらにはエクスプローラまでもインターネットのブラウザ機能を搭載するというのだ。

というわけで、本当に驚くほどのラインナップだが、今後開発者にとって重要と思われる点について、さらに述べることにしよう。

本来この連載はVisual Basicの記事だから、VB ScriptすなわちVisual Basic For Script Editionについて解説したいところだが、すでに述べたようにサーバー側のしくみや従来のOLEの拡張であるActiveXにも密接に関係するところだ。そこで、まずはIISとActiveから話をしよう。

IISの基本スペックには次のような特徴がある。

WWW Serverは、当然ながら多くのアクセスをこなすことになる。閑古鳥が鳴いているようなところもあるだろうが、イントラネットで使用するときには、それなりに多くのアクセスがあるはずだ。ましてや人気のあるインターネットのページともなれば、かなりのパフォーマンスを必要とする。この点で、IISはダントツのベンチマークをたたき出しているとMicrosoftは言っている。

リソースへのアクセスコントロールとユーザーレベルセキュリティを装備している。これは、実際にはWindows NT Serverのドメインディレクトリサービスをそのまま利用するので、アカウントの二重管理の必要はない。しかし、Windows NTのACLではグループの階層化などで自由度が低いため、その問題をひきずることになる。もっともこれは、他のMicrosoftの製品、すなわちSQL Serverなどにも言えることだ。また、NTFSによるページ単位でのアクセス権コントロールも可能である。

また、特定のIPアドレスを持つクライアントコンピュータからのアクセスを禁止、もしくは特定のIPアドレスのクライアントからのアクセスのみを許可する機能を持っている。

また、回線上のデータ機密保護としてSSLを使ったデータ暗号化機能やサーバー認証機能も持っている。

IISには、もちろんCGIを使って環境変数と標準入出力をベースにしたアプリケーションによる拡張ができる。ただし、これはMS-DOSでのものと同様である。

さらには、ISAPIを使ったDLLを作成した拡張ができる。これには二つの機能がある。一つはApplication APIsと呼ばれ、データベースやメッセージングなどのバックエンドシステムとの連携や、拡張機能の追加をする。もう一つは、Filter APIsと呼ばれ、ブラウザ、サーバー間のHTTPプロトコルパケットを処理するフィルター機能の追加が可能である(図)。

これらのプログラムはDLLで作ることになるわけだが、ここでActiveXすなわちOLEベースのプログラムを使うことができる。

ISAPIでのプログラミングは基本的にDLLを作成することだ。このDLLの中で、ISAPI関数を呼び出してインターフェイスを取る。必要に応じて、DLLからODBCなどを使ってRDBMSサーバーにアクセスするということもできる。

このようにCGIと違って拡張方式がDLLであるため、インプロセス、すなわち一つのプロセスが常に起動してある状態となり、起動にかかるオーバーヘッドがない(図PPT 12)。この点が高速たるゆえんである。しかし、デバッグするたびにサーバーを止めるのだろうか? このあたりはまだ確かめていない。ただ、それだけのためにわけのわからないオープンとは言い難いAPIを使うというのはどうかと思ってしまう。インターネットでの律速段階はネットワークのトラフィックではないのか。

ISAPIには、次のようなものがある。

※アプリケーション

GetExtensionVersion()

サーバーから呼び出されるポイント

HttpExtensionProc()

CGIでのmain()。リクエストの度に呼び出される。

GetServerVariable()

CGIでのgetenv()。

ReadClient()

クライアントからの引数取得

WriteClient()

クライアントへの標準出力

ServerSupportFunction()

URLのリダイレクションやセッションのマネージメントをサポートし、共通サービスとAPIの拡張をする。

※フィルター

GetFilterVersion()

フィルターのオン/オフを知る。

HttpFilterProc()

フィルターのメインプロシージャ。リクエストの度に呼び出される。

ServerSupportFunction()

URLのリダイレクションやセッションのマネージメントをサポートし、フィルターの拡張をする。

ISAPIの詳細は、ActiveX SDKにある。つまり、ISAPIイコールActiveXを使うためのものという位置づけなのだ。

ISAPI用のDLLとしてあらかじめ用意されているInternet Database Connector (HTTPODBC.DLL)を使えば、ODBC対応RDBMSと連携することが可能だ。これには、プログラミングは不要で、ODBCを経由してDBに渡すSQL文の定義を拡張子IDCのファイルに作成し、処理結果をHTMLに整形するための元とも言えるHTML拡張のHTX形式スクリプトを作成する。

たとえば、サンプルで用意されている次のようなHTMPのページを見てみよう。

<FORM METHOD="POST" ACTION="/scripts/samples/sample3.idc"><P>

年間売上数を入力してください: <INPUT NAME="sales" VALUE="5000" ><P>

<INPUT TYPE="SUBMIT" VALUE="クエリーを実行">

このページ(図PPT 13)では、入力用テキストボックスがあり、実行ボタンを押すと指定された値を/scripts/samples/sample3.idcに渡す。この拡張子がつけられていたときには、自動的にHTTPODBC.DLLが呼び出され、そこで次のような内容のsample3.idcが解釈される。



Datasource: Web SQL
Username: sa
Template: sample3.htx
SQLStatement:
+SELECT au_lname, ytd_sales 
+ from pubs.dbo.titleview 
+ where ytd_sales > %sales%

ここには、ODBCデータソース、ログイン名、テンプレートとなるHTXファイル、SQL文などを指定する。なお、実際にはパスワードなどもっと多くの項目を指定することができる。ここで、 %sales%は、元のHTMLファイルで指定された入力項目の名前であり、その内容が比較される。このように%でくくったものが前のHTMLから渡された変数名ということになる。

次に、ここで指定されているsample3.htxの主要な部分は次のようになっている。

<H2><I>売り上げが <%idc.sales%></I> 以上の著者</H2>

<TABLE BORDER>

<%begindetail%>

<%if CurrentRecord EQ 0 %>

<caption>Query results:</caption>

<TR><TH><B>著者</B></TH><TH><B>年間売り上げ<BR>(US ドル)</B></TH></TR>

<%endif%>

<TR><TD><A HREF="/scripts/samples/sample3a.idc?lname=<%au_lname%>"><%au_lname%></A></TD><TD align="right">$<%ytd_sales%></TD></TR>

<%enddetail%>

</TABLE>

<%begindetail%>と<%enddetail%>の間で、取得したレコードが繰り返して評価される。ここで、最初にある<%if CurrentRecord EQ 0 %>は、組み込み変数CurrentRecordが0、すなわち最初のレコードでテーブルタイトルを出している。それ以外のときには、

HREF="/scripts/samples/sample3a.idc?lname=<%au_lname%>"><%au_lname%></A></TD><TD align="right">$<%ytd_sales%></TD></TR>

で、一覧を表示している。

この後では、次のような文があり、最後のレコードまで行ってもCurrentRecordが0のときには、検索対象となるものがなかったときの処理と、そうでないときの処理が記述されている。

<%if CurrentRecord EQ 0 %>

<I><B>売り上げが </I><%idc.sales%> 以上の著者はいません。</B>

<%else%>

<P>

<HR>

著者名をクリックすると、発刊された作品が表\示されます

<%endif%>

こうしてHTTPODBC.DLLは条件に合った部分だけを実行し、結果のHTMLを作成してサーバーに返すという処理をしている。同様にして、検索結果をクリックすると、その詳細ページが表示されるようになっている。

このように、データベースコネクションでは基本的に一つのSQL文で一つのページを作るように構成される。この方式では限界画ある。したがって問題があるときには、トランザクションやHTML 3.0のフレームを使うなどして拡張する必要があるだろう。

MicrosoftはOLE AutomationでOSレベルにVisual Basicを持ち込み、Visual Basic for Applications Edition(VBA)とした。そして、インターネットにもやはりVisual Basicを持ってきた。それがVisual Basic For Script Edition、いわゆるVB Scriptである。VB ScriptはVBAコンパチの言語仕様を持つ。とはいえ、HTMLと組み合わせて使う必要から、細かい注意は必要だ。

いよいよ、マシン境界のないインターネットというプラットホームにもVisual Basicが登場したわけだ。これがうまくいけば、他のOSにもVisual Basicが移植されるようになるだろう。

VB ScriptはJava Scriptと同様にHTMLに組み込んだ形で実行される。実行するのはブラウザだから、現在のところInternet Explore 3.0α以上が必要となる。VB Scriptは、OLEオートメーションをサポートし、ActiveXをサポートする。このため、 Internet Explore 3.0αにはActiveX Scripting 対応エンジンを搭載している。ここでは、ホストとスクリプトエンジンを IOleScript により分離している。接続には公開された OLE インターフェイスをベースとしている。したがって、ActiveX Scripting ホストは、自動的に複数のスクリプトエンジンに対応することができるわけだ。したがって、Java Scriptなども対応できるというわけだ。

VB Scriptでは、危険性のある言語仕様を制限し、DLL の呼び出しやファイル I/Oなどは一切できないようになっている。これはセキュリティを考えれば当然のことであるが、ActiveXを使えば自由に拡張することができる。

ActiveXは、ISAPIと組み合わせて使うこともできる。これはOLEベースのコントロールなのだから当然である。

また、クライアント側でも使われる。このときの動作は見掛け上はJavaアプレットと同様で、必要に応じてダウンロードされる。このとき、セキュリティのために、図(PPT 18左)のようなダイアログが表示される。しかしActiveXはOCXの拡張版であるから、システムのレジストリデータベースに登録する必要があり、この作業までが自動実行される。逆に、すでにユーザーのクライアントマシンにVisual Basicなどがインストールされており、既存のActiveXがインストールされていれば、それが自動的に使われる。ただし、この機能は原稿執筆時のIE3.0αでは動作しない。あらかじめ必要なActiveXをダウンロードする必要がある。

MicrosoftではJavaもライセンスしたが、これはActiveXの一つとして動作させるという。

ActiveXはアニメーションなどをするものを単体で動作させることもできるが、VB Scriptと組み合わせて使えば、いろいろな効果をあげることができる(図PPT14)。次にwww.microsoft.comにあったActiveXとVBScriptの例を示す(図PPT15)。

左側のものは、チャートのActiveXとタイマーのActiveXを組み合わせたもので、一定時間ごとにチャートの種類が変わっていくというデモだ。次にソースの抜粋を示す。

オブジェクトの定義部分

<HTML>

<HEAD>

<TITLE>Chart Control</TITLE>

...

<OBJECT

classid="clsid:{99B42120-6EC7-11CF-A6C7-00AA00A47DD2}"

id=sprlbl1

width=50

height=200

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="{FC25B780-75BE-11CF-8B01-444553540000}"

id=chart1

width=300

height=150

align=center

hspace=0

vspace=0

>

<param name="_extentX" value="300">

<param name="_extentY" value="150">

<param name="ChartStyle" value="0">

<param name="ChartType" value="0">

<param name="hgridStyle" value="0">

<param name="vgridStyle" value="0">

<param name="colorscheme" value="1">

<param name="rows" value="4">

<param name="columns" value="4">

<param name="data[0][0]" value="30">

<param name="data[0][1]" value="60">

<param name="data[0][2]" value="20">

<param name="data[0][3]" value="40">

<param name="data[1][0]" value="31">

<param name="data[1][1]" value="61">

<param name="data[1][2]" value="21">

<param name="data[1][3]" value="41">

<param name="data[2][0]" value="32">

<param name="data[2][1]" value="62">

<param name="data[2][2]" value="22">

<param name="data[2][3]" value="42">

<param name="data[3][0]" value="33">

<param name="data[3][1]" value="63">

<param name="data[3][2]" value="23">

<param name="data[3][3]" value="43">

</object>

リストを見ると、拡張された<OBJECT ..>タグでActiveXのクラスIDと位置などの基本的な位置などを規定している。プロパティは、

<param name="_extentX" value="300">

のように<param name ...>タグで規定している。

次に、テキストが続く。

表示されるテキスト部分

<H3>Chart Types</H3>

<P>The Chart control supports the following types of charts.

<BR>

<UL>

<LI>Pie Chart

<LI>Point Chart

<LI>Line Chart

<LI>Area Chart

<LI>Bar Chart

<LI>Column Chart

<LI>Stocks Chart

</UL>

...

次に、タイマーActiveXの定義がある。ここではTimeOutプロパティに750msec、EnableプロパティをTrueにしていると思われる。

タイマーのオブジェクト定義部分

<OBJECT id=timer classid="{59CCB4A0-727D-11CF-AC36-00AA00A47DD2}" >

<param name="TimeOut" value="750">

<param name="enable" value="1">

</OBJECT>

タイマーイベント自体は、VB Scriptで記述される。これは、タグ<script language="VBS">から</script>までがVB Scriptと解釈される。

内容としては、通常のVisual Basicの構文と同じである。

タイマーイベントを規定するVB Script


<script language="VBS">
sub timer_time
	i = chart1.chartstyle
	chart1.chartstyle = chart1.chartstyle + 1
	if i = chart1.chartstyle then
		chart1.chartstyle = 0
		i = chart1.charttype
		chart1.charttype = chart1.charttype + 1
		if i = chart1.charttype then
			chart1.charttype = 0
			chart1.chartstyle = 0
		end if
	end if
end sub
</script>
</FONT>
</BODY>
</HTML>

もう一つのデモは、もう少し実用的だ。これはピザの注文をとるページである。左側のオプションボタンでピザの種類を決めると、右側にトッピングがチェックボックスで表示される。同時に、中央下側のテキストボックスに説明が、さらに下に総合計が表示される仕組みだ。他にも文字が流れる機能やらいろいろあるが、ここの部分に注目しよう。

SetIngredientsは、引数に指定された値によってトッピングの種類のチェックボックスの値を設定するものだ。

SetTotalCostは、フォーム上にあるコントロールの指定に合わせて、トータルコストを計算し、テキストボックスsumに表示するものだ。

SetDescriptionTextは、指定された文字列を中央のテキストボックスに表示する。

以下、DoHawaiianやDoNewYorkなどは、フォーム定義<FORM Name="OrderForm">の下で

<INPUT TYPE=RADIO NAME=RadioGroup onClick="DoHawaiian">Hawaiian

のように、あらじめ定義されたラジオボタンが押されたときに呼び出される。

DoOrderではオーダー前にAlertを使ってメッセージボックスを出すことができる。

HTTPを使う限り、インタラクティブな操作には必ずサーバーから新しいページが送られてくる必要があったが、このようにVB Scriptを使えば必要最低限のことはクライアント側で処理することができる。

※VB Script部分


<SCRIPT LANGUAGE="VBS">
'-------------------------------------------------
'-- SetIngredients
'--
'--   Checks/unchecks the appropriate checkboxes on the page.
'--   Recomputes cost of the pizza.
'-------------------------------------------------

SUB SetIngredients(bPepperoni, bOnion, bPineapple, bSalmon, bAnchovies, bHam)
Dim Form
   Set Form = document.OrderForm
   Form.Pepperoni.checked  = bPepperoni
   Form.Onion.checked      = bOnion
   form.Pineapple.checked  = bPineapple
   Form.Salmon.checked     = bSalmon
   Form.Anchovies.checked  = bAnchovies
   Form.Ham.checked        = bHam
   SetTotalCost
END SUB

'-------------------------------------------------
'-- SetTotalCost
'--
'-- This method will set the total cost of the
'-- pizza.
'--
'-------------------------------------------------
SUB SetTotalCost
Dim Form
   Set Form = document.OrderForm
   '----------
   '-- Get total number of toppings.
   '----------
   total = Form.Pepperoni.checked + _
           Form.Onion.checked     + _
           Form.Pineapple.checked + _
           Form.Salmon.checked    + _
           Form.Anchovies.checked + _
           Form.Ham.checked
   '----------
   '-- The price of a pizza is $10... then add the number of
   '-- toppings.
   '----------
   Form.sum.value = "$" + CStr(10 + (total * 2)) + ".00"
END SUB

'-------------------------------------------------
'-- SetDescriptionText
'--
'-- This method will set the description of the pizza.
'--
'-------------------------------------------------
SUB SetDescriptionText(strToSet)
  document.OrderForm.Text1.value = strToSet
END SUB

'-------------------------------------------------
'-- When the user clicks the order button,
'-- submit the order and alert the user that their
'-- order will be arriving soon...
'-------------------------------------------------
SUB DoOrder
   '----------
   '-- Make sure the total cost is set and
   '-- give the user a nice message.
   '----------
   SetTotalCost
   SetDescriptionText "Thank you, your pizza will arrive piping hot."
   '-- Alert is a method on the window object
   Alert "Thank you, your pizza will arrive piping hot. Your account " + _
         "was billed " + document.OrderForm.sum.value + "."
END SUB

'-------------------------------------------------
'-- HAWAIIAN PIZZA
'--
'--   A Hawaiian pizza contains Pineapple and Ham.
'-------------------------------------------------

SUB DoHawaiian
   SetIngredients False, False, True, False, False, True
   SetDescriptionText "Our aloha special. Taste the exotic flavor of the big island."
END SUB

'-------------------------------------------------
'-- CHICAGO PIZZA
'--
'--   A Chicago pizza contains Onion and Pepperoni.
'-------------------------------------------------
SUB DoChicago
   SetIngredients True, True, False, False, False, False
   SetDescriptionText "Capone's favorite."
END SUB

'-------------------------------------------------
'-- Seattle PIZZA
'--
'--   A Seattle pizza contains Rain... However,
'--   Rain is not a valid choice so the user can
'--   only select Salmon.
'-------------------------------------------------

SUB DoSeattle
   SetIngredients False, False, False, True, False, False
   SetDescriptionText "Our best rainy day pizza. For the fish lover in you."
END SUB

'-------------------------------------------------
'-- NEWYORK PIZZA
'--
'--   A New York pizza contains Pepperoni.
'-------------------------------------------------
Sub DoNewYork
   SetIngredients True, False, False, False, False, False
   SetDescriptionText "For a taste of the Big Apple"
END SUB

'-------------------------------------------------
'-- THEWORKS PIZZA
'--
'--   A pizza with the works contains everything.
'-------------------------------------------------
SUB DoTheWorks
   SetIngredients True, True, True, True, True, True
   SetDescriptionText "Our most popular"
END SUB

SUB SendComments
    Alert "Thank you, your comments have been sent."
End SUB
</SCRIPT>

※ フォーム定義
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=700>
<TR>
     <TD>
	<TABLE CELLPADDING=0 CELLSPACING=0>
          <TR>
            <TD COLSPAN=2 ROWSPAN=2>
             <IMG SRC="/ie/images/THEPIZZA.GIF" HEIGHT=95 WIDTH=100>
            </TD>
            <TD HEIGHT=8 WIDTH=25>
            </TD>
          </TR>
          <TR>
            <TD BGCOLOR=GRAY>
            </TD>
          </TR>
          <TR>
            <TD HEIGHT=8 WIDTH=10>
            </TD>
            <TD BGCOLOR=GRAY WIDTH=75>
            </TD>
            <TD BGCOLOR=GRAY>
            </TD>
          </TR>
        </TABLE>
     </TD>
     <TD BGCOLOR="003355" colspan=2 width=1280><FONT COLOR=WHITE SIZE=6 FACE=ARIAL><MARQUEE BEHAVIOR=SLIDE DIRECTION=RIGHT BGCOLOR="003355" ALIGN=MIDDLE>Microsoft Pizza From The Rainy State...</MARQUEE></FONT></TD>
</TR>
<TR>
      <TD VALIGN=TOP>
                <TABLE WIDTH=100 HEIGHT=800 BORDER=0 cellpadding=5 align=right VALIGN=TOP bgcolor="ffcc66">
			<TR>
                        <TD>
                        <font face=arial size=+1><B>Pizza from the Northwest</B></FONT>
                        <P><FONT face=arial SIZE=1><B>Try our 5 delicious varieties of pizza delivered hot to your office.</B></FONT>
			</TR>
                        </TD>
		</TABLE>
      </TD>
<TD>
<FORM Name="OrderForm">
<TABLE BGCOLOR="#FFFFCC" WIDTH=180 ALIGN=LEFT>
   <TR><TD BGCOLOR=NAVY ALIGN=CENTER><FONT COLOR=FFFFCC>Pick A Style...</TD></TR>
   <TR><TD><IMG SRC="/ie/images/SLICE.GIF" ALT="*" ALIGN=CENTER> <INPUT TYPE=RADIO NAME=RadioGroup onClick="DoHawaiian">Hawaiian  </TD></TR>
   <TR><TD><IMG SRC="/ie/images/SLICE.GIF" ALT="*" ALIGN=CENTER> <INPUT TYPE=RADIO NAME=RadioGroup onClick="DoChicago"> Chicago   </TD></TR>
   <TR><TD><IMG SRC="/ie/images/SLICE.GIF" ALT="*" ALIGN=CENTER> <INPUT TYPE=RADIO NAME=RadioGroup onClick="DoNewYork"> New York  </TD></TR>
   <TR><TD><IMG SRC="/ie/images/SLICE.GIF" ALT="*" ALIGN=CENTER> <INPUT TYPE=RADIO NAME=RadioGroup onClick="DoSeattle"> Seattle   </TD></TR>
   <TR><TD><IMG SRC="/ie/images/SLICE.GIF" ALT="*" ALIGN=CENTER> <INPUT TYPE=RADIO NAME=RadioGroup onClick="DoTheWorks">The Works </TD></TR>
</TABLE>
<TABLE BGCOLOR="#FFFFCC" WIDTH=180 ALIGN=RIGHT>
   <TR><TD BGCOLOR=NAVY ALIGN=CENTER><FONT COLOR=FFFFCC>Toppings...</TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Pepperoni onClick="SetTotalCost">Pepperoni </TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Onion onClick="SetTotalCost">    Onion     </TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Pineapple onClick="SetTotalCost">Pineapple </TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Salmon onClick="SetTotalCost">   Salmon    </TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Anchovies onClick="SetTotalCost">Anchovies </TD></TR>
   <TR><TD><INPUT TYPE=CHECKBOX NAME=Ham onClick="SetTotalCost">      Ham       </TD></TR>
</TABLE>

<FONT FACE="WINGDINGS" SIZE=6>
   <MARQUEE DIRECTION=RIGHT ALIGN=MIDDLE>F</MARQUEE>
</FONT>
<BR>
<CENTER>
   <CENTER>
      <BR><FONT SIZE=4>Order Now!</FONT>
      <BR><BR>
      <INPUT TYPE=BUTTON VALUE="Order" NAME="Order" onClick="DoOrder"><INPUT TYPE=RESET VALUE="Reset">
      <BR><BR>
      <FONT SIZE=2>
      <I> The cost for a Pizza is $10.00 </I> <BR>
      <I> Each additional topping is $2.00 </I>
   </CENTER>
   <BR CLEAR=LEFT>
   <BR CLEAR=RIGHT>
   <BR>
   Description: <INPUT NAME=Text1 SIZE=60>
   Total = <INPUT NAME=Sum VALUE="$0.00" SIZE=8><BR>
</CENTER>
<BR>

</FORM>
<HR>
<FORM ID=FORM2>
<CENTER>
<H2>Customer Satisfaction Survey</H2><P>
Pick your favorite pizzas:<P>
<SELECT MULTIPLE NAME="Computer">
	<OPTION VALUE=Hawaiian>Hawaiian
        <OPTION VALUE=Chicago>Chicago
        <OPTION VALUE=NewYork>New York
        <OPTION VALUE=Seattle>Seattle
        <OPTION VALUE="The Works">The Works
</SELECT><P>

Pick your favorite topping:<P>
<SELECT NAME="Corporation">
          <OPTION VALUE=Pepperoni>Pepperoni
          <OPTION VALUE=Onion>Onion
          <OPTION VALUE=Pineapple>Pineapple
          <OPTION VALUE=Salmon>Salmon
          <OPTION VALUE=Anchovies>Anchovies
          <OPTION VALUE=Ham>Ham
</SELECT><P>

Enter your comments here:<P>
<TEXTAREA NAME="Text4" ROWS=5 COLS=50></TEXTAREA><P>
<INPUT TYPE=BUTTON VALUE="Send" NAME="Send" onClick="SendComments"><INPUT TYPE=RESET VALUE="Reset">
</CENTER>
</FORM>

	CONTROL				TAG
	ButtonCtl Object			INPUT TYPE=BUTTON
	CheckboxCtl Object		INPUT TYPE=CHECKBOX
	ComboCtl Object			SELECT MULTIPLE
	ListCtl Object			SELECT 
	PasswordCtl Object		INPUT TYPE=PASSWORD
	RadioCtl Object			INPUT TYPE=RADIO
	TextAreaCtl Object		TEXTAREA 
	TextCtl Object			INPUT NAME
このように、VB ScriptとActiveXは、Visual Basicユーザーにとってみればハードルが低い。比較的カンタンに使いこなすことができるだろう。ただし、セキュリティの面ではまだまだ不安な側面もあることは否めない。それは、今後ブラッシュアップされていくことだろう。

現在のところ、Microsoftはセキュリティ以外の部分に熱心だ。それは分散オブジェクト環境である。つまり、サーバーからActiveXをダウンロードしてくるだけでなく、サーバーサイドにあるActiveXとクライアントサイドにあるActiveXが通信をしようというのだ。Visual Basic 4.0のリモートOLE、Windows NT 4.0のネットワークOLEがまさにそういう仕組みであるから、そのままインターネットに持ってきたと考えればよい(図PPT 16通常のクライアントサイドのOLE Automation、17インターネットでのOLE Automation)。この技術をDCOM(Distributed Componet Object Model)と呼んでいる。従来のOLEの核だったCOMを分散処理に合わせて拡張したものである。実際には、この仕組みがWindows NT 4.0に搭載されることになる。

Internet Control Packは、32bitのInternet用ActiveX コントロール集である。Windowsアプリケーション開発者をインターネットの世界へというのがテーマのようだが、前述したとおり、これではExchangeサーバーもWindows NTもいらなくなってしまう。

ともあれ、ActiveXというのはOCXだから、VB, VC++, Access などで利用することができる。比較的上位のプロトコルに合わせて作成されているので、WinSock APIやプロトコルに対する詳しい知識はなくてもなんとかなってしまう。さらに、フリーライセンスである。

本当にいいのだろうか...

ICPには、次のようなものがある。

・WinSock TCP ActiveX コントロール

クライアントおよびサーバー用があり、相手を指定する、すなわちTCP/IPを使った通信を実現する。実行時には非表示であり、双方向のデータ交換が可能だ。これさえあれば何でもできる。

・WinSock UDP ActiveXコントロール

クライアントおよびサーバー用があり、相手を指定しない、すなわちUDPでのブロードキャストを使った通信ができる。実行時には非表示であり、双方向のデータ交換が可能だ。これさえあれば本当に何でもできる。

・FTP ActiveX コントロール

FTPクライアントのコントロール。ファイル転送を実現する。実行時は非表示。

HTTPクライアントのコントロールである。つまり、HTMLドキュメントを直接取得できるものだ。MIMEの情報も得られる。

・HTML ActiveX コントロール

ここまでくると病気だが、HTMLデータの分析とレイアウトをしてしまうコントロールだ。つまり、ブラウザが作れてしまう。主な特徴は次の通り。

スクロールビュー

インライングラフィック: GIF, JPEG, BMP, XBM

HTML バージョン 2.X + NetScape 2.0 ・ Explorer 2.0 の主な拡張仕様

埋込み HTTP ・ ファイル URLs…

・NNTP ActiveX コントロール

ニュースサーバへの接続、ニュースグループ・記事のリスト表示、記事の取得・投稿ができるコントロールである。

・SMTP ActiveX コントロール

SMTPメールサーバーへのアクセスをし、インターネットメールの投函ができる。

・POP ActiveX コントロール

POP3プロトコルによるメールサーバーへのアクセスをし、メールサーバーからのインターネットメールの取得が可能になる。あの重いExchangeはもう必要ない。

というわけで、実はウチでも作って売ろうとしていたものばかりであり、本当はすでに大半ができていたのだが売り物にならなくなった。残念だ。しかし、どうにかしてMicrosoftはインターネットの分野でも注目を浴びようとしているとしか思えない。こんなものをタダで配ってしまったら、本当にExchangeとかWindows NTは使われなくなってしまう。

Microsoftがこれだけの動きを見せたのにいち速く対応した会社がある。カナダのNcompass Labs(www.ncompasslabs.com)だ。ここでは、Netscape対応のプラグインを使って、OCXを自動的にダウンロードする仕組みを作ってしまった。MicrosoftのActiveX構想に合わせて、早くもActiveXでも同様の仕組みになっている(図PPT 19,20)。

19の左側は、Wordのドキュメントを自動ダウンロードしてエンベッドしたもの。右側はクレーンのカスタムコントロールと操作をするパッドのカスタムコントロールで、クレーンの動きを制御するデモだ。20の左側はキューブがくるくるまわり、その面にビットマップを貼り付けることができるというものだ。ただし、執筆時にはVB Scriptはまだサポートされていない。

図19

図20

この方式でもセキュリティは甘く、ダウンロード前に確認のダイアログが出るだけだ(PPT21右)。

図21

ダウンロードすると、自動的にレジストリに登録されるので、Visual Basicに貼り付けて実行することも可能だ(PPT 20右)。

このように、VB ScriptおよびActiveX構想を実現しても、Inernet Explorerがシェアを取れるとは限らないことは容易に予想できる。

インターネットに合わせてBack Office系製品も充実してくる。これは、主に先に述べたIISを中心とするものだ。中でも4/27にバージョンアップするSQL Server 6.5では、Internet Database Connectorとの連携処理性能を最適化する。

たとえば、テーブルを HTML文書化するウィザードやWeb Assistantなども装備される。これは、トリガやスケジュールベースでHTMLを自動更新するというものだ。その他にもまた、IISのログもDBに蓄積することが可能だ。

ただし、インターネットからの利用ライセンスが新たに設定され、これが何と50万円である。NT Serverと合わせて62万円は基本ソフトとしてかかるということになる。これは安いとは言えないような気がする。

HTML化を自動でおこなうウィザードは、Exchangeサーバーにも搭載され、図(PPT 21)のように各Back Office Serverはインターネットに対応して連携することになる。Microsoftでは、Fire WallやMarchant Serverなど他のサーバーラインナップも合わせて、将来的には図(PPT22)のようなラインナップにするという。

インターネットに遅れを取ったMicrosoftは、一気に形成を逆転すべく続々と製品やアーキテクチャーを投入したという印象だ。確かに、Microsoftの製品だけでもサーバー、クライアントともにかなりのレベルでシステムを構築できるだろう。しかし、UNIX主流できたインターネットでこれらの製品がどの程度受け入れられるかは、まだわからない。

また、これだけ製品を出すと矛盾点もある。たとえば、ICPを使えば、IE 3.0ばかりかVisual BasicでもTCP/IPに適したメイルやニュース、基本的な通信、UDP、FTPなどのアプリケーションを作ることができる。これは、サーバーがタダで手に入るFree BSDなどのUNIXで構築されたときにも使うことができるのだ。それならExchange ServerもIISもNT Serverもなくてもいいのである。現状ではその方がオープンで汎用性のあるクライアントアプリケーションになるのだ。

ちなみに、Free BSDは基本的に4.4BSD Liteであるから、完璧なUNIX OSであり、WWW Serverをはじめとしてほんどすべての仕組みやアプリケーションが、まるでPCのDOSベースと同様にカンタンにインストールできるようになっている。もちろんそれなりの知識は必要になるが、もはや、UNIXといえども難しくはなくなってきているのだ。このときの問題といえば、データベースとのコネクションがないことくらいだが、これくらいは「作ればあるもん」と言っておこう。

このように考えてくると、IISのアドバンテージはインターネットの世界においてはさほど感じられない。しかし、イントラネットでは別である。やはり一人は専任の管理者を置かなくては運用できないUNIXと違って、Windows NTベースでのシステムの運用や管理は楽である。ただし、IISでのデータアクセスは基本的に一つのSQL文に対応した画面としなくてはならないので、自由度の点では今一歩であり、複雑な処理には向かない。

とはいえ、IISやActiveX、VB Scriptは必ずある程度の普及はするであろうから、Netscapeをはじめとする他のブラウザもプラグインなどの仕組みで対応するようになるはずだ。となると、今度はIE 3.0のアドバンテージにも疑問が出ないではない。

否定的なことばかりを書いたが、このMicrosoftのインターネット戦略が間違っているわけではない。私がMicrosoftの立場でも、既存の製品ラインナップを考えたらこのようにするだろう。逆に、短期間でよくここまでかんばったなという印象だ。クライアントとなるOSがWindowsベースである以上、これらの戦略がかなり受け入れられることは確かであろう。その間に、さらによい方向性を模索することになるのだろう。

最後になったが、どうもVisual Basicの記事ではなくなってしまったような気がしないでもない。しかし、やはりインターネットという新しいメディアでも、MicrosoftはVisual Basicを中心として据えているのだ。Visual Basicユーザーにとっては何とも嬉しい話である。