はじめに
ASP.NET 1.0の最初のプレビューリリースはおよそ15年位前になります。それ以来、数百万もの開発者がこれを使用し、すばらしいWebアプリケーションを構築してきており、長年にわたって、非常に多くの機能を追加し進化させてきました。
今回、ASP.NET 5という現在作業中であるASP.NETの新しいリリースについてご報告できうれしく思います。この新しいリリースは、ASP.NETに行った最大級の構造的更新になります。今回のリリースで、ASP.NETをよりスリムでよりモジュール化されたクロスプラットフォームでクラウドに最適化されたものにしています。ASP.NET 5は、現在プレビューリリースとして利用可能です。Visual Studio 2015の最新CTPをダウンロードして頂ければすぐにお使い頂けます。
ASP.NET 5は、最新のWebアプリケーションを構築するためのオープンソースWebフレームワークで、Windows、Linux、Mac上で開発および実行できます。MVC 6フレームワークが含まれており、これは1つのWebプログラミングフレームワークにMVCとWeb APIの機能を組み合わせたものになります。ASP.NET 5はSignalR 3の基礎にもなっており、クラウド接続されたアプリケーションに対してリアルタイム機能を追加できます。ASP.NET 5は、.NET Coreランタイム上に構築されていますが、最大の互換性のためにすべての.NET Framework上でも実行できます。
ASP.NET 5では、数多くの構造上の変更を行っており、それによりコアのWebフレームワークはよりスリムに(System.Web.dllが不要)、よりモジュール化されます(ほぼすべての機能がNuGetモジュールとして実装され、アプリは必要なものだけ持つように最適化できます)。ASP.NET 5には、以下の基礎的改善が行われています。
- Windows、Mac、Linux上でクロスプラットフォームなASP.NETアプリをビルドおよび実行
- 真のサイドバイサイドアプリをサポートする.NET Core上に構築
- 最新Web開発を簡素化する新しいツール
- Web UIとWeb APIに対するシングル配列Webスタック
- クラウド対応環境ベースの構成
- NuGetパッケージの作成および使用に対する統合サポート
- 依存性注入に対するビルトインサポート
- IIS上でのホスト機能または独自プロセスでの自己ホスト機能
つまり最終的に、ASP.NETが非常に馴染みがあり、かつさらに最新のWeb開発のために調整されたものになります。
柔軟でクロスプラットフォームのランタイム
ASP.NET 5は2つのランタイム環境で動作するため、アプリをホストする際により大きな柔軟性が得られます。2つのランタイムは、以下の通りです。
.NET Core-より小さいフットプリントを持つ新しいモジュール式クロスプラットフォームのランタイムです。.NET Coreを対象にすると、以下のような新しい利点が利用できます。
1)アプリに.NET Coreランタイムを展開することができます。つまり、ホストのオペレーティングシステム上にインストールされたランタイムのバージョンではなく、この展開バージョンのランタイムでアプリを実行できます。ランタイムのバージョンは、他のアプリのバージョンとサイドバイサイドで実行します。必要なら、他のアプリに影響を与えることなくランタイムを更新することもできますし、またシステム上の他のアプリが更新されてもそのまま同じバージョンで実行し続けることもできます。これにより、より簡単に、かつシステムで実行中の他のアプリによりインパクトを少なくアプリの展開やフレームワークの更新が行えます。
2)アプリは、本当に必要な機能にのみ依存します。そのため、アプリに無関係な機能に対するランタイム更新を促すメッセージが表示されなくなります。アプリの機能におそらく無関係な更新プログラムのテストや展開に費やす時間が減少します。
3)アプリは、クロスプラットフォームで実行できます。Windows、Linux、Mac OS Xシステム用.NET Coreのクロスプラットフォームバージョンを提供します。開発に使用するオペレーティングシステムや展開の対象にするオペレーティングシステムに関わらず.NETを使用できます。ランタイムのクロスプラットフォーム版はまだリリースされていませんが、現在GitHub上で作業中で、公式プレビューは間もなく公開する予定にしています。
.NET Framework-.NET CoreのAPIは、現在完全な.NET Frameworkより制限があるため、.NET Coreを対象にする場合既存のアプリを変更する必要があります。アプリを更新したくない場合、代わりに完全な.NETフレームワーク(バージョン4.5.2以上)上でASP.NET 5アプリケーションを実行できます。これを実行すれば、完全な.NET Framework API一式にアクセスできます。既存のアプリケーションとライブラリは、このランタイム上で変更することなく動作します。
MVC 6-統一化されたプログラミングモデル
MVC、Web API、Webページは相補的な機能を提供しており、ソリューション開発時によく一緒に使用されます。しかし、過去のASP.NETリリースでは、これらのプログラミングフレームワークが別々に実装されていたため、重複や矛盾が発生していました。MVC 6では、1つのプログラミングモデルにこれらのモデルをマージしています。これからは、プログラミングフレームワークの違いを調整することなく、Web UIとデータサービスを処理する1つのWebアプリケーションが作成できます。また、まずより堅牢なMVCアプリケーションにWebページで開発されたシンプルなサイトをシームレスに移行することも可能です。
これで、同じコントローラからRazorビューとコンテントネゴシエーションされたデータを返すことができ、同じMVCフィルタパイプラインが使用できます。
既存フレームワークの統一以外に、新しいタグヘルパー機能など、サーバー側のWeb開発が簡単になる新機能も追加しています。タグヘルパーにより、マークアップでタグの文法を拡張するだけで、ビューでHTMLヘルパーが使用できるようになります。
つまり以下を書く代わりに、
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) </div> </div>
以下が書けます。
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="UserName" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="UserName" class="form-control" /> <span asp-validation-for="UserName" class="text-danger"></span> </div> </div>
タグヘルパーは、ビューがより自然で読みやすくなるように編集してくれます。HTMLエディタをフルに活用しつつ、追加されたマークアップでHTMLヘルパーの出力のカスタマイズを簡素化することもできます。
MVC 6アプリの作成例については、これらのチュートリアルをご確認ください。