.NET Framework入門

6.ASP.NET(1)

― ASP.NETで何が変わるのか? まずは既存のASPと比較してみよう


デジタルアドバンテージ 遠藤孝信
2000/12/14

p.1 p.2 p.3 p.4 p.5 p.6 p.7 p.8 p.9

本記事は改訂されました。改訂版の「.NETとは何か? ― 基礎解説:.NET初心者のための.NET入門【2011年版】」をご覧ください。

 名前から分かるとおり、ASP.NETは、ASP(Active Server Pages)の後継となるものだが、その中身はまったく別物として生まれ変わったといってもよい。これまでのASPは、ダイナミックなページを生成可能にするサーバ・サイドの単なるスクリプト・エンジンであったが、ASP.NETは、.NET Frameworkの主要機能の1つとして、WebアプリケーションとWeb Serviceの実行環境を提供する。ASP.NETのほとんどの機能はクラス・ライブラリとして実装されている。このクラス・ライブラリにHTTP処理のための実行エンジンを加えたものがASP.NETの実体である。

 まずは、現在のASPについて簡単に説明しておこう。現在のASPは、HTMLデータ内にVBScriptやJScriptでのスクリプトを記述しておき、これをサーバ・サイドで実行することでダイナミックな(動的な)Webページをブラウザに提供できるようにするしくみである。つまりASPを活用することで、クライアントとしてWebブラウザを利用するWebアプリケーションを構築できるわけだ。しかしASPでは、その生産性の低さが問題になっていた。

 この大きな要因は、ユーザー・インターフェイス(画面表示)の設計に必要なHTMLのタグやスクリプトと、プログラム・ロジックを記述するためのコードを渾然一体として記述してしまっているためだ。このため、HTMLデータをざっと見ただけでは、どの部分がプログラム・ロジックで、どの部分が画面設計なのかが分かりにくく、ロジックを手早く理解するという意味でも、画面設計の成り立ちを理解するという意味でも、取り扱いにくいものとなってしまっていた。さらに、コードのロジックが1個所まとまっていないため、コードの再利用も簡単ではない。

 典型的な例は、一連のHTMLのタグが、If文の分岐によって何通りもあったり、For文によりHTMLのタグを繰り返し出力したりしている場合などだ。あるいはResponse.Write文(ブラウザに対してパラメータとして与えた文字列を出力するコマンド)で、HTMLのタグを文字列としてブラウザに出力するようなスクリプトも広く一般に使用されている。さらに、本来のユーザー・インターフェイスやプログラム・ロジックのほかにも、Webブラウザの種別を判別するロジックや、入力項目の整合性チェックなどのコードも同じスクリプト内に埋め込まれている場合が少なくない。残念ながら、現行のASPは、とりあえず動くものを作るには役に立つが、コードの可読性向上やコードの再利用性向上など、開発効率のことを考え出すと、力不足と言わざるをえない。

 これに対し新しいASP.NETでは、ユーザー・インターフェイスにかかわるスクリプト部分と、処理を記述するプログラム・コードを完全に分離して記述できるようになった。これがASP.NETの最大の特徴といってよい。このような記述を可能にする仕組みの1つは、ブラウザ上で表示されるテキスト・ボックスやボタンなどのコントロールを、サーバ側で実行されるコードと関連付けられるところにある。次に具体例を見てみよう。 なお、本稿に示したプログラム・コード等は2000年11月に公開された「.NET Framework SDK Beta1(英語版)」での仕様に基づくもので、将来的には変更される可能性がある。

ASP vs. ASP.NET

 ASP.NETのコードを見る前に、比較の意味でこれまでのASPでのコード例をおさらいしておこう。次のコードは、これまでのASPで記述したスクリプト例である(同じコードはASP.NET環境でも動作可能)。これは、プッシュ・ボタンが押されると、テキスト・ボックスに入力されている文字列とともにメッセージを画面に表示する簡単なサンプル・プログラムである(ファイル名は「controls.asp」)。実際にはいくつかの記述方法が考えられるが、最も一般的と考えられる記述方法なら次のようになるだろう。

 このサンプル・リストでは、解説のために各行の先頭には行番号をふってあるが、実際のコードでは行番号とコロンはつかない。このASPファイルをブラウザで実行すると次のような画面になる。

ASPでのサンプルコードをIEで実行したところ

ASPファイルがIISで解釈され、このような画面になる。
  上のテキスト・ボックスで“Taka”と入力し、[Enter]ボタンをクリックしたところ(ボタンをクリックすると、入力した文字は消えてしまう)。するとテキスト・ボックスで指定した文字を含むメッセージが表示される

 スクリプト中で「<%」と「%>」で囲まれた部分がASP独自の記述で、VBScriptを用いて記述されたプログラム・コード部分である。スクリプトから分かるとおり、この例では、ファイル内の4個所にこのVBScriptコードが散らばっている。11〜13行目のif文は3行目の部分に含めることもできるが、現実に存在するコード例でも、このようにメッセージを表示する部分にその処理コードを記述したケースをよく見かける。

 このスクリプトでは、6行目の「action=”controls.asp”」により、ボタンが押されてフォームがサブミットされた場合に自分自身を再び呼び出す。ASPでは、フォームのサブミットによりPOSTされたデータは3行目の「Request.Form(“要素名”)」により取得することができ(ここではこれを変数name_textに保存している)、HTMLスクリプト内では、12行目の「<%= 変数名 %>」のようにして変数の内容を展開(使用)することができる。

 先に問題として指摘したユーザー・インターフェイスとロジックの混在部分が11〜13行目の部分である。このスクリプトは非常に短く単純なので、その重大さはあまり表現できていないが、それでもメッセージの表示部分は一瞥しただけではその表示イメージをつかみにくい。さらに変数name_textの変数名を変更するには、この部分だけでなく、3行目も修正する必要がある。処理の流れにまかせて、その場その場で必要なスクリプトを記述していった結果として出来上がったものだと考えられるだろう。つまり、まず前ページで入力されてPOSTされた情報をスクリプトの先頭部分で保存し(3行目)、それが必要となる(表示される)部分で加工のためのプログラム・コードを記述するという設計方法だ。

 次のスクリプトは、上とほぼ同じ処理をASP.NETで記述したものである(ファイル名は「controls.aspx」)。ASP.NETのスクリプトには拡張子として「.aspx」を付ける。

 これをブラウザで実行すると画面は次のようになる。

ASP.NETでのサンプル・コードをIEで実行したところ

表示結果自体は、前出のASPでの例と同じである。
  プログラムの実行によって表示されたメッセージ。

 最初にスクリプトの8行目から始まっているbodyタグの内部に注目されたい。「<asp:」で始まるタグはすぐ後で説明するWebコントロールである。ここではテキスト・ボックス(textbox)とプッシュ・ボタン(button)、そしてメッセージを表示するためのラベル(label)をWebコントロールとして使用している。ラベルというコントロールはHTML仕様にはないが、実際にブラウザにページ・イメージが表示されるときには、各Webコントロールは適切なHTMLのコントロールに置き換えられる。ご覧のとおり、画面イメージを定義するこれらの部分には、プログラム・コードはいっさいない。

 各Webコントロールの属性として設定されている“runat=server”は、そのコントロールがサーバ上で実行されるコードから操作できるようにするためのものである。このキーワードによって、各コントロールとロジックを記述したコード部分とが関連付けられる。

 3〜5行目が、このプログラムのロジックを記述した部分である。前出のASPの例と対比するという目的から、ここではVB.NETで記述したが、ASP.NETでは、CLR上で動作する言語ならばどれでも使用することができる。11行目の「Onclick=”EnterBtn_Click”」の指定により、ブラウザ上でボタンが押されるとこのSubプロシージャ(C#ならばメソッド)が呼び出される。そしてポイントは次の4行目、ここでテキスト・ボックスに入力された文字列を「Name.Text」で取り出し、前後に文字列をくっつけてから、「Message.Text」に代入している。これによって、ラベル・コントロールの位置にメッセージが表示されるのである。ここで「Name」や「Message」は、テキスト・ボックスとラベルに「id="…"」で設定したWebコントロールの名前である。

 このようにASP.NETでは、プログラムからコントロールのが持つ値を読み書きできるようになったため、ロジック部分のコードを1カ所にまとめることが可能になった。さらにこのコード部分は「@Pageディレクティブ」という属性を持つタグを使用することによって、完全に別ファイルにすることもできる。

 このASP.NETのプログラミングは、コントロールが操作されることによってコードが呼び出され、コードからコントロールのプロパティを操作するといったVisual Basicのプログラミングとまったく同等であることが分かる。またユーザー・インターフェイスとコードを完全に分離して記述できるようになったことにより、新しい統合開発環境であるVisual Studio.NETでは、VBでアプリケーションを開発するようにして、フォームであるWebページ上にマウスでコントロールをドラッグ&ドロップで配置しながら、プログラム・ロジックを伴うWebページの開発が可能になった。


 INDEX
  [特集].NET Framework入門
    1.Microsoft.NETプラットフォームとWeb Service
    2..NETプラットフォームと.NET Framework
    3.Common Language Runtime(1)
   CLRの内部構造とプログラム実行の流れ
    4.Common Language Runtime(2)
   CLRによる複数言語サポート:
    VS.NETで標準サポートされる言語処理系
    5.Common Language Runtime(3)
   CLRによる複数言語サポート:
   サードパーティによってサポートが予定されている言語処理系
  6.ASP.NET(1)
    ASP.NETで何が変わるのか? まずは既存のASPと比較してみよう
    7.ASP.NET(2)
    VBライクなWebアプリケーション開発を可能にするASP.NETのサーバ・コントロール群
    8.ASP.NET(3)
    Web Service開発始めの一歩。サービス公開に必要なのはキーワード指定1つ 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間