あなたも分かる ASP: Active Server Pages の ABC

Michael Edwards
Developer Technology Evangelist
Nancy Winnick Cluts

May 28, 1997
日本語版最終更新日 1999 年 4 月 25 日

Active Server Pagesは、HTML、スクリプト、および再利用可能なActiveXサーバー コンポーネントを組み合わせて、ダイナミックで強力なWebベースのビジネス ソリューションを構築できる、コンパイル不要のオープンなアプリケーション環境です。Active Server Pagesにより、VBScriptとJScriptをネイティブでサポートする、IISのサーバー サイド スクリプティングが可能になります。

Microsoft Internet Information Server の Web サイト Non-MSDN link

まあ、これが公式発表です。私は、このパラグラフを読んだときに、これがデベロッパーとしての私にどのような意味を持つのか、Active Server Pages(ASP)テクノロジは使いやすいのか、どのような働きをするのかといった事柄を知りたいと思いました。そこでドキュメンテーションに目を通し、Tech・Ed 97でいくつかのプレゼンテーションに出席し、インターネット サーフィンをした結果、Active Server Pagesはいったい何なのか、このテクノロジはどれほど複雑なのか、そして、より詳しい情報はどこで見つけられるのか(大量のリンクがあります!)などの疑問に対する答えを得たのです。

Active Server Pagesで作成されたファイルは.ASPという拡張子を持ちます。実は、この記事もその一例なのです。上に示したアドレスを見てください。ASPファイルを使うと、HTML、JavaScriptやVisual Basic® Scripting Edition (VBScript)を含むスクリプティング、および任意の言語で書かれたコンポーネントを自由に組み合わせてWebサイトを構築することができます。つまり、ASPファイルはHTML、スクリプティング、およびコンポーネントの呼び出しの任意の組み合わせを含むことができるファイルに他なりません。サーバー上のASPファイルを変更したときには、そのファイルを単に保存するだけです。次にWebページがロードされた時点で、スクリプトは自動的にコンパイルされます。

なぜそうなのでしょうか? それは、ASPテクノロジがMicrosoftのWebサーバーに直接組み込まれており、すべてのMicrosoftのWebサーバー上でサポートされているからです。これにはWindows NT Internet Information Server (IIS) 3.0、Windows NT Workstation、およびWindows 95 Personal Web Serverが含まれます。

IIS 3.0によるActive Server Pagesのいくつかの使用例です。

  • 従業員ハンドブックを、すぐに古くなってしまう印刷版ではなく、オンラインで提供します。従業員に住所や健康保険の記録などのレコードに自分でアクセスし、更新させることで、管理コストが削減できるという利点もあります。私は、このような機能を歓迎するであろう総務部員を何人か知っています!
  • オンライン ストアを、既存の在庫データベースとオーダー処理システムと連動させます。
  • サイトの訪問者に、その人が必要としている情報だけを含んでいるカスタマイズされたビューを表示し、前回訪問してからの新着情報に自動的にフラグを付けることができます。
こう思ったでしょう。「だから何だ? いまでも、情報を更新するCGIスクリプトを書いて、次にそのページが再ロードされたら、新しい情報を表示させることができるじゃないか」と。たしかにそうなのですが、ASPはWebサーバーのサービスとして実行されるので、マルチスレッドとマルチユーザーの点で最適化されています。したがって、高速に動作しますし、インプリメントも簡単です。ASPを使えば、Webページのデザインと、データベースやアプリケーションにアクセスするための細かいプログラミングを分離することができます。このため、プログラマは自分の仕事(コーディング)に専念することができ、デザイナーはデータベースではなくデザインだけに集中できるのです。

これらの要素は、スクリプティングによって統合されます。

例として、URLの中のティッカー シンボル要求をASPファイルに渡すフォームを考えてみましょう。ASPファイルの最初の部分は、株価サーバーと通信を行うコンポーネントを呼び出します。このオブジェクトのプロパティ、たとえば始め値や終り値などは、HTMLを使って簡単に挿入できます。プログラマは任意の言語を使うことができ、株価サーバーとの通信だけに専念できます。HTMLオーサーはコンポーネントのスクリプティングの方法を知っているだけでよく、株価サーバーがどう動作するかは考えなくて済みます。

使うのは難しいか?

あなたがどうかは知りませんが、サーバー上での処理という話になると、私は頭が痛くなります。スレッド処理、同期処理、ユーザー インターフェイスを持たないスレッドといった問題が頭に浮かぶからです。面倒な仕事になるぞ、と覚悟します。でも、ASPは、私がここ数年見つけたものの中では、一番簡単に使えます。

経験を積んだプログラマは、ASPファイルの作成のために新しい言語を学ぶ必要すらありません。ActiveXスクリプティングをサポートしている任意の言語が使用できるのです。すでにVisual Basicで開発をしている人ならば、VBScriptは簡単に使えます!

また、HTMLでページのオーサリングを行っている人は、ASPが自分のスキルを少しばかり高めるいい機会になります。VBScript は簡単に学べます。MicrosoftのJavaScriptのインプリメンテーションであるJScriptNon-MSDN linkも同じです。

Active Server Pagesを使い始めるにあたっては、独自のコントロールを作成する必要すらありません。サーバー上で実行できる、ユーザー インターフェイスを持たない市販のコントロールを利用することができます。ユーザー インターフェイスを持ってはならない理由は、サーバーの前に座っているコンピュータ オペレータが、ユーザーのマシンに関するダイアログ ボックスを片っ端から消している図を思い描いてもらえればすぐに理解できるでしょう。要するに、ユーザーがログオンに成功したかどうかをオペレータが気にする必要はないわけです。ユーザー インターフェイスはクライアント アプリケーション(ユーザーが実行しているアプリケーション)のためのものであり、サーバー サイド スクリプティングにはまったく不要なのです。

またもやオブジェクト モデル!

まったく気が引けるのですが、いまや使い古された「オブジェクト モデル」といういかめしい言葉を使わざるを得ません。一連の流れを説明しましょう。ブラウザがWebサーバーに対してASPファイルを要求すると、WebサーバーはActive Server Pagesを呼び出してASPファイルの内容を読み、そこに含まれているコマンドを実行し、結果として得られたHTMLページをブラウザに送ります。ASPファイルはHTML、スクリプト、またはコマンドの任意の組み合わせを含むことができます。スクリプトは、変数に値を代入したり、サーバーに対して情報を要求したり、任意のコマンドのセットを組み合わせてプロシージャにするといった処理を行うことができます。

<%Response.Cookies("MyFavTVShow")="I Dream of Jeannie"%>

ASPがサポートしているスクリプティング言語は、If-Then-Elseコンストラクトの使用をサポートしています(プログラマの読者はほっとしたことでしょう)。最後に、HTMLの中にも、ちょっとしたロジックを埋め込むことができます。たとえば、IISのドキュメンテーションから取った次のコードは、時刻に基づいて挨拶文を設定する方法を示しています。

<FONT COLOR="GREEN">
<%If Time > = #12:00:00 AM# And Time < #12:00:00 PM# Then%> 
Good Morning!
<%Else%>
Hello!
<%End If%> 
</FONT>

読者なら、もっと興味深い使い方を考えつくことでしょう。だから、例を挙げるのはこれぐらいにしておきます。

組み込みオブジェクト

ASPには、グローバルに使用できる5つの標準オブジェクトがあります。

  • Request - ユーザーから情報を取得する
  • Response - ユーザーに情報を送信する
  • Server - Internet Information Server を制御する
  • Session - ユーザーの現在のWebサーバー セッションに関する情報を格納し、その間の設定の変更を行う
  • Application - アプリケーション レベルの情報を共有し、アプリケーションが実行されている間の設定を制御する
RequestオブジェクトとResponseオブジェクトはコレクション(同じ方法でアクセスされる情報の集まり)をサポートしています。オブジェクトは、何らかの手順を実行するためにメソッドを使用し(オブジェクト指向プログラミング言語を知っている方は先刻ご承知でしょう)、オブジェクトの属性(色、フォント、サイズなど)の格納にプロパティを使用します。

Requestオブジェクト

Requestオブジェクトは、ユーザーからHTTP要求として情報を取得するために使用されます。前に述べたように、RequestオブジェクトとResponseオブジェクトはコレクションをサポートしています。

  • ClientCertificate- Webブラウザが発行した要求から認証フィールドを取得します。要求できるフィールドはX.509標準に定められています。
  • QueryString - 名前などのテキストを取得します。前に例として挙げた、私の好きなTV番組はその一例です。
  • Form - HTMLフォームからデータを取得します。
  • Cookies - アプリケーション定義のクッキーの値を取得します。
  • ServerVariables - サーバー名などのHTTP情報を取得します。
Responseオブジェクト

Responseオブジェクトは、ユーザーに情報を送信するために使用されます。ResponseオブジェクトはコレクションとしてCookiesだけをサポートしています(クッキー値の設定のため)。また、Responseオブジェクトはいくつかのプロパティとメソッドもサポートします。現在サポートされているプロパティを以下に示します。

  • Buffer- サーバーでのページ出力のバッファリング。これがtrueに設定されていると、サーバーはカレント ページ上のすべてのサーバー スクリプトが処理されるか、FlushまたはEndメソッドが呼び出されるまで、応答を送信しません。
  • ContentType- コンテントのタイプ(テキスト/HTML、Excelなど)。
  • Expires- 有効期限(このWebページに関するユーザーのキャッシュの中のデータが無効と見なされるまでの時間)を分単位で設定します(たとえば、10分で有効期限が切れるようにします)。
  • ExpiresAbsolute- 有効期限を絶対的な日付と時刻で設定できます。
  • Status - ステータス行を返します(サーバーが用いている HTTPの仕様 Non-MS linkで定義されます)。
以下に、Responseオブジェクトがサポートしているメソッドを示します。
  • AddHeader- 指定された値のHTMLヘッダーを追加します。
  • AppendToLog- Webサーバー ログ ファイルの末尾に文字列を付加します。
  • BinaryWrite- バイナリ データを書き込みます(Excelスプレッドシートのデータなど)。
  • Clear- バッファリングされたHTML出力をクリアします。
  • End- スクリプトの処理を停止します。
  • Flush- バッファの中のすべての情報を送信します。
  • Redirect- ユーザーを別のURLにリダイレクトします。
  • Write- HTMLストリームに書き込みを行います。これは次のコンストラクトを使って行えます。
Response.write("hello") 

次のショートカット コマンドも使用できます。
<%="hello"%>

Serverオブジェクト

ServerオブジェクトがサポートしているプロパティはScriptTimeoutの1つだけです。このプロパティでは、スクリプト処理のタイムアウトの値を設定することができます。また、Serverオブジェクトは以下のメソッドをサポートしています。

  • CreateObject- サーバー コンポーネントのインスタンスを作成します。このコンポーネントは、サーバー上にインストールされている任意のコンポーネントです(ActiveXなど)。
  • HTMLEncode- 指定された文字列をHTMLにエンコードします。
  • MapPath- 現在の仮想パスを物理的なディレクトリ構造にマップします。これにより、このパスを、サーバー上にディレクトリまたはファイルを作成するコンポーネントに渡すことができます。
  • URLEncode- 指定された文字列にURLエンコーディングを適用します。
Sessionオブジェクト

Sessionオブジェクトは、カレント ユーザーのWebサーバー セッションに関する情報を格納するために使用されます。このオブジェクトに格納された変数は、複数のアプリケーションから使用されている場合でも、ユーザーのセッションがアクティブな間はずっと存在しています。このオブジェクトがサポートしているメソッドはAbandonの1つです。このメソッドは(信じようと信じまいと!)、現在のWebサーバー セッションを放棄し、すべてのオブジェクトを破棄します。また、このオブジェクトがサポートしているプロパティは、カレント セッションの識別子を含んでいるSessionIDと、セッションのタイムアウト値を指定するTimeoutの2つです。セッション識別子については注意すべき点が1つあります。これはGUIDではありません。この識別子は、現在のWebサーバー セッションが実行されている間だけ有効です。Webサーバー サービスをシャットダウンすると、識別子はまた最初から同じものが使われていきます。したがって、これを使ってログオンIDを作成するようなことはしないでください。さもないと、重複するIDが大量に発生し、頭痛の種を抱え込むことになります。

Applicationオブジェクト

Applicationオブジェクトは、アプリケーション(共通のルートを持つページのグループ)の実行中はずっと持続する情報を格納することができます。一般に、これはIISサーバーが動作している期間全体に相当します。これは、(ページ カウンタなどの)複数のユーザーに対して保持していなければならない情報を格納する場所として適しています。このオブジェクトの短所は、ユーザーごとに新しく作成されるわけではないので、コードが1回だけ呼び出されたときには表面化しないエラーが、続けて10,000回呼び出されると発生する可能性があるということです。また、Applicationオブジェクトはすべてのユーザーから共有されるので、マルチスレッド化のインプリメントは悪夢のようになるでしょう。

関連情報

Active Server Pages 技術 に関しては既に非常にたくさんの情報が存在します。

先ずは、ドキュメントから始めるのが良いでしょう。

次に、Internet Information Server Web サイト Non-MSDN linkをご覧になるのが良いでしょう。

Microsoft IISチームは、MSDN Online Web Workshop の Serverセクションに、いくつかの記事 を用意しています。これらの記事では、IISとASPに関連するテクノロジについて詳しく説明しています。読者は、ATLを使ってアクティブ サーバー コンポーネントを作成する方法、ASPを使ってセッションを管理する方法について学ぶことができます。

IISチームは、ASPとIISに関する初めての本として、Working with Active Server Pages (QUE Corporation, US$39.99)を読むことを推奨しています。これはQUEのWebサイトNon-MS link を通じて入手することができます。

Page view tracker