This article has been localized into Japanese by the community.
ASP.NET MVC 対 Web Forms
ASP.NETの最初のバージョンは2002年にリリースされましたが、ビューエンジンとしてはWeb Formsが唯一の選択肢でした。その後、MVCなどをサポートするためMicrosoftはASP.NET を拡張し、複数のビューエンジンをサポートしました。しかし長い間、ASP.NETを使用する場合は自動的にWeb Formsが用いられるようになっていました。
MicrosoftはWeb Formsを開発したとき素晴らしい目標を持っていました。HTTPプロトコルのごちゃごちゃした細部の仕組みやステートレスな性質を抽象化してしまい、あたかもWindowsアプリケーションを開発しているかのようにWeb開発を行えるようにすることです。当時すでに、Windowsアプリケーションの開発はかなり快適なものになっていました。
Microsoftはそのために、ViewStateという仕組みを導入しました。ViewStateは、すべてのフォームの現在のステートがサーバーへのポストバック中も保持されるように保証する仕組みです。これにはサーバーコントロールを用います。サーバーコントロールはHTMLとCSSのレンダリングを任意のコントロールにカプセル化します。論理プロパティを用いてコントロールをカスタマイズするため、HTMLとCSSが直接混在させられることはありません。
さらに、Microsoftは、Windows開発者には当時すでによく知られていたイベント駆動型モデルを導入しました。これによって、開発者は、ページがロードされるたびにいちいち手動でチェックをすることなく、実際に発生したイベント、例えばボタンがクリックされたり、チェックボックスが変更されたりといった事象に対応することができるようになりました。これは同時に、マークアップとコードが分離されたということでもあり、理論的には素晴らしいことでした。
Web Formsがうまく機能しない場面
Web Formsは多くの開発者にとって新鮮なものであったし、多くの新たに開発者となった人やWindowsアプリケーションの開発しか知らない開発者がWebアプリケーションの構築を学習するのに役立ったはずです。しかし、残念なことにMicrosoftは完璧な抽象化を実現することはできませんでした。なぜなら、ほどなくして多くの問題が発生したからです。問題のいくつかは後のリリースで修正されましたが、Web Formsの動作の仕組みに深く関係している問題については修正が困難でした。以来、Web Formsの技術は主に以下の点で批判されています。
ViewStateのためにページが重くなる
ページに存在するすべてのサーバーコントロールをViewState文字列に保存し、その文字列がリクエストのたびにサーバーを行ったり来たりするため、Web Formsによるページは相当重くなります。もしそれなりに複雑なページを作れば、ViewState文字列は最終的に数百キロバイトのデータ増加を引き起こすこともあります。これにより、特にモバイル環境からの接続時には読み込み時間が増加し、世界中でスマートフォンからのトラフィックが増えるにつれ、非常に現実的に問題になったのです。
サーバーコントロールのせいでHTMLの出力を制御できない
サーバーコントロールのおかげで便利なモノをさくっと作ることは容易になりましたが、出力されるHTMLを完全に制御することはできなくなりました。これが問題になることがあるのは、ウェブサイトを精密にチューニングする必要があるときや、ブラウザーの互換性の問題が発生しているときです。
Web Formsはテストの自動化が難しい
Web Formsモデルはテストの自動化やユニットテストが重要になる以前に開発されたため、ひとたびそれらが重要になってくると、Web Formsでは、不可能ではないにしても効率的にユニットテストを行うのが難しいと考えられるようになりました。
ASP.NET MVCがWeb Formsに対して優れている点
ASP.NET MVCはWeb Formsによって実装された多くの抽象化を取り除きました。例えば、サーバーコントロールに頼ることなくすべてのHTMLは自分で生成する必要があります。また、ViewStateは廃止され、それによって発生していた問題も無くなりました(ただしそれにより、GridViewやRepeaterといったいくつかのサーバーコントロールは使い物にならなくなりましたが。)
MVCモデルは疎結合しているため、自動化テストやユニットテストとの相性は抜群です。
どちらの技術を選ぶべきか
ここまでの解説を読んだ方は、Web Formsが時代遅れの技術に見えてしまうかもしれませんが、実はまったくそんなことはありません。Microsoftは今でも活発にWeb Formsを開発し続けていますし、ASP.NETで新たにWeb開発を行うときには選択肢の一つになります。Web Formsが特に適しているのは、とにかく急ぎで何かを作らなければならないときです。マークアップを思いどおりに書けるという柔軟性は諦めないといけませんが、大量の高度なサーバーコントロール群を用いることで、使えるモノが手っ取り早く構築できます。
もしすでにWeb Formsに慣れているのであれば、ASP.NET MVCに挑戦してみるべきです。特に上記で述べたような問題に悩んでいるのであればなおさらです。一方、もしWeb開発が初めてでどちらを使うか選択しなければいけない方にも、やはりASP.NET MVCをおすすめします。一見するとMVCモデルは制限が多そうで、パターンに従って開発するのは難しく思えるかもしれませんが、いったん慣れてしまえば非常に快適に使うことができます。また、MVCモデルが大きな注目を集めていることから考えても、早晩消えて無くなってしまうことはないでしょう。
まとめ
Web開発の世界が初めてなら、ASP.NET Web Formsの方が取り組みやすいかもしれませんが、最初はやはりASP.NET MVCに挑戦するべきです。このチュートリアルがASP.NET MVCアプリケーションの開発プロセスを基礎からご案内しますので、ご安心ください。