実際に使っているいまだからいえるASP.NETの良い点と不満点

株式会社ピーデー
川俣 晶
2002/12/19


.NETは1つのテクノロジの名前ではない

 .NET FrameworkやVisual Studio .NETが正式リリースされて数カ月が経過した。リリース前後には、チャレンジすることの価値を重く考えて、前向きに取り組むことを筆者は勧めていた。どんなものでも、本当のところはやってみないと分からないからだ。しかし、この時期になれば実際にやってみた結果から、本音を語ることも意味があるだろう。

 一口に.NETといっても、別々のアーキテクチャを持つ複数のテクノロジの集合体であるといえる。それらのテクノロジはすべて必須というわけではない。例えば、Windowsアプリケーションを開発しているプログラマーにとって、ASP.NETは使う必要のない技術である。このように本来は、個々の技術に関して、それを使うかどうか、良いと思うかどうか、という個別の議論をすべきである。ただ単に.NETを使うか、.NETは良いか、といったあまりに大ざっぱな総論はもう意味がないだろう。

 今回は、一通り使ってみたところで、ASP.NETについての筆者の率直な感想を書いてみたいと思う。もちろん、これはあくまで筆者の感想であって、絶対の評価ではない。もし何か筆者の勘違いがあればご教示いただければ幸いである。

ASP.NETの良いところ

 Webアプリケーションの記述言語では、1つのファイルにHTMLの記述と、プログラム言語の記述を混在させるものが多い。このような、異言語混在のソースファイルは書きにくく、分かりにくく、メンテナンスしにくいといった意見がしばしば聞かれていた。例えば以下は従来のASPで記述した一例である。

    <h1>
    <%
        Response.Write "<a name='sample'>サンプルタイトル</a>"
    %>
    </h1>

 これは、HTMLのテキストの中にVBS(Visual Basic Script)で記述されたプログラムが含まれ、さらにそのプログラム内にHTMLのテキストが出現するというややこしい構成である。

 ASP.NETではHTMLとプログラム言語のソースを分離して記述できるようになったため、こういうややこしさからは解放された。さらに、出力されるHTML文書が、HTMLコントロールやWebコントロールのオブジェクトのツリーとして表現されるため、プログラム中で要素などを追加する場合にも、タグを記述するのではなく、オブジェクトを生成してツリーに追加するというスタイルになった。その結果、HTMLのタグを一切プログラムのソース中に入れることなく記述することも容易である。また、オブジェクトのツリーであるため、ちょっと属性値や内容のテキストを変更する場合などは、プロパティへの代入だけで簡単に書き換えることができる。

 また、ソース・コードの形式が普通のプログラム言語を使った、普通のプログラミングに極めて近い形になったことも長所といえるだろう。例えばASPのときは「<%」のような特別な記号の意味を知る必要があったが、ASP.NETではこのような記号は使わなくても記述できる。Visual Studio .NETのサポートのおかげで、ボタン・クリック時などのイベント・ハンドラも簡単に追加できるが、この際でもプログラム・コードがブラックボックスの中に隠されず、コード中に明示的に追加されるのもありがたい特徴だと思う。

 これらが、ざっと軽く試用した段階での感想であった。しかし、使っているうちに、不満も感じるようになってきた。

ASP.NETの不満点

 実際に実用システムのプログラムをASP.NETで書いてみると、幾つかの不満点を感じるようになってきた。

 まず、用意された機能にムラがあるという点が気になる。HTMLのすべての要素に対応するHTMLコントロールが用意されているわけではなく、逆にデータベースと連携するようなWebコントロールは豊富に用意されている。ASP.NETが主に想定している使い方は、データベースと連携するWebアプリケーションなのかもしれないが、データベースを使うまでもないWebアプリケーションを書いていると、かなり貧弱なクラス群を使って書いているような気になることもある。

 また、いくらASP.NETがタグを直接記述しなくても済むといっても、HTML文書の構造まで忘れることはできない。もし、動的にページの一部をプログラムから生成する場合に、確かにタグを記述する必要はなくなったが、どんな要素をどう並べるかは示さなければならない。条件次第でページの体裁が大幅に変わるようなコンテンツを作成している場合、フォーム・デザイナーでコントロールを並べるだけでは足りず、どうしてもプログラムの中でコントロールを作成して追加したい状況が発生するのである。ASP.NETで主に想定された使い方ではないかもしれないが、筆者が直面しているプログラムはそういうものであった。例えば以下は、いま筆者が記述している、とあるプログラムの一部を切り出したものである。

    HtmlGenericControl h2 = new HtmlGenericControl("h2");
    HtmlAnchor a = new HtmlAnchor();
    a.InnerText = item.Name;
    a.Name = Server.UrlEncode(item.ID);
    h2.Controls.Add(a);
    PlaceHolderMain.Controls.Add(h2);

 果たして、これを見て、どんな構造のHTML文書が生成されるか、瞬間的に分かるだろうか? 「a要素」が「h2要素」の子要素として追加されていて、「a要素」の名前が「Server.UrlEncode(item.ID)」で、内容は「item.Name」だということが、即座に分かるだろうか? もしかしたら、直接的に、

    Response.Write "<h2><a name='"
        + Server.UrlEncode(item.ID) + "'>" + item.Name + "</a></h2>"

などと書いた方がかえって分かりやすかったのではないか? 上記の例程度なら即座に分かるという人がいるかもしれないが、これなど短く単純な例にすぎない。もちろん、だからといって以前の方式が良かったと主張するわけではないが、ASP.NETが完全な終着駅であるとも思えない。もっと別のプログラム・コードの記述方法があっても良いのではないだろうか?

 ほかにも気になる点は幾つかあるが、長くなりすぎるので割愛する。

 ともかく、ASP.NETには進歩した点もあるのは事実だが、これで終わりという気はしない。ページ構成が動的に変化することが少なく、データベースと連携するフォームを手軽に作成したい場合は現状でも良いかもしれない。しかし、もっと別の方向性への進化も期待したい、とASP.NETを使い込んでみて感じた。End of Article


川俣 晶(かわまた あきら)
 株式会社ピーデー代表取締役、日本XMLユーザー・グループ代表、日本規格協会 次世代コンテンツの標準化に関する調査研究委員会 委員、日本規格協会XML関連標準化調査研究委員会 委員。1964年東京生まれ。東京農工大化学工学科卒。学生時代はENIXと契約して、ドラゴンクエスト2のMSXへの移植などの仕事を行う。卒業後はマイクロソフト株式会社に入社、Microsoft Windows 2.1〜3.0の日本語化に従事。退職後に株式会社ピーデーの代表取締役に就任し、ソフトウェア開発業を始めるとともに、パソコン雑誌などに技術解説などを執筆。Windows NT、Linux、FreeBSD、Java、XML、C#などの先進性をいち早く見抜き、率先して取り組んできている。代表的な著書は『パソコンにおける日本語処理/文字コードハンドブック』(技術評論社)。最近の代表作ソフトは、携帯用ゲーム機WonderSwanの一般向け開発キットであるWonderWitch用のプログラム言語『ワンべぇ』(小型BASICインタプリタ)。

 「Insider.NET - Opinion」


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 記事ランキング

本日 月間