ASP.NET Core 1.0の概要を整理する

2016/5/19に ASP.NET Core もRC2になりましてGo-live licenseも付きました。と、いうことでASP.NET Core 1.0について整理しておこうかな、と。

個人的にはK runtimeと言われたあたりからちょろちょろっと注目し始めて、RC1から本格的に見始めた感じです。

 

まず、本記事ではASP.NET Core 1.0とは何なのか?について概要を整理しようかと思います。なので具体的なプログラムは登場しません。

 

ASP.NET Core 1.0の歴史

まず、ASP.NET Core(というか、.NET Coreというもの)は2015年あたり(?)から新しい.NETランタイムとして「Kランタイム」なんて言われていていましたね。で関連コマンドについても、その後、BETA4かBETA5あたりで「K」→「DNX」との名称変更があり、RC2からは「DNX」→「dotnet」と名称変更が繰り返されました。

 

コマンドというのは、.NET Coreモジュールをビルドしたり実行したりするコマンドラインツールのことです。

ASP.NET 4.6 / 5 / Core 1.0 / MVC 5 / MVC 6の関係

ASP.NET4.xやMVC、Coreの名称は、紆余曲折名称変更が行われ分かりにくい状況になっているのでここで整理します。

ASP.NET 4.6

従来のASP.NET 1.0系から継続進化した最新(Core除く)のASP.NET

ASP.NET Core 1.0 / ASP.NET 5(旧名称)

Microsoftによって新しく開発されたASP.NETASP.NET 4.6の後継ではなく、新しく作り直した最新のASP.NET。内部のアーキテクチャはかなりドラスティックに変更がなされている。
少し前まで「ASP.NET 5」が正式名称であった(まだVS上及び多くのWeb資料上ASP.NET 5と表記されている)。ただし、ASP.NET 5という名称では、ASP.NET 4.6の後継と誤解されるために「ASP.NET Core 1.0」という名称に変更する方針が打ち出されている(※1)。
「Core」という名称は、ASP.NET Coreの基盤にある新しい.NET実行環境「.NET Core」に由来する。
※1 Scott Hanselmanの2016/1/19のblog
http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx

ASP.NET MVC 5

ASP.NET 4.x系に対応した最新のASP.NET MVCフレームワーク

ASP.NET MVC 6

ASP.NET Core 1.0に対応した最新のASP.NET MVCフレームワーク
 

ASP.NET Core 1.0の目指すもの

そもそも.NET Core / ASP.NET Coreっていうのは何かというと、新しい.NETランタイムです。特徴・目指すものは・・・

マルチプラットフォーム対応(WindowsLinuxMacOS等)・オープンソース

この辺りはMonoなんかが従来の.NET FrameworkについてLinuxでのランタイムを開発していました。が、今回の.NET Coreの特徴としては、MSは従来、CTSCLI等の仕様のみ公開し「各プラットフォームのランタイム実装は勝手に(自由に)作っておk」の思想だったのが、.NET Core自体をオープンソースとして各プラットフォームの実装もオープンソースで用意して公開するよ、とした点。

 

 モジュール化

ASP.NETは登場から15年の月日を経る中で、時代の潮流に合わせて新しい機能を次々に追加していきました。それは以下のようなものが思い起こされます。
「革新的なWebフォームの仕組み⇒Ajaxの流行⇒MS独自のAjax対応⇒WebサービスからWebAPI対応へ⇒Web標準MVC(&Table Module)になった事に合わせてASP.NET MVCの追加」
上記の結果、当然のことながら「スマートでない実装」「冗長な実装」等の歪みが発生してきていました。
ASP.NETの最大の貢献者でありながら、今となっては批判対象の代表格となっているものとして「ファットなSystem.Web.dll」があげられると思います。System.Web.dllはなんでも入っているので、何をするにもこいつを参照しないといけない、しかも、なんでも入っているから使わない実装まで入っている。しかも5MBもあるファットなアセンブリである(でかいしメモリも食う)。
また、従来のASP.NETパイプライン処理の仕組みが冗長でファットである、とも言われていました。これについては、ASP.NET 4リリース時にOWINによる解決が図られそうになりましたが、Scott Hanselman曰く「ASP.NETの基盤をOWINにしようとしたが、OWIN側の仕様策定・実装が遅く、ASP.NETチームは待つことができなかった。そのため、ASP.NET基盤がOWINという仕様に対応する仕組みを取り入れる形とした」ということでした。
で、長々話てきましたが。
ASP.NET Core 1.0は、いろいろな機能が小さなモジュールとして実装・提供されています。

  • ASP.NET MVCを使いたかったら「Microsoft.AspNetCore.Mvc」を参照
  • セッション機能を使いたければ「Microsoft.AspNetCore.Session」を参照
  • セッションの保存先をRedisとするのなら「Microsoft.Extensions.Caching.Redis」を参照

といった具合に、アプリケーションが必要とするモジュールのみを参照しようというスタンスです。
上記によるメリットとしては「メモリのフットプリントの最小化」「スケーラビリティの向上」「デプロイのポータビリティの向上」があります。

 

スケーラブル

モジュール化の項目の内容に関連してきますが、小さなフットプリント、パイプライン処理の仕組みに変更等により、ASP.NET Core 1.0はスケーラビリティが向上しています。これはクラウドを意識する現代の運用環境では重要な項目です。
以下の記事ではASP.NET Core 1.0はASP.NET 4.6の2300%のリクエストをさばいた事が紹介されています。
http://web.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/

 

全面的な見直し

ASP.NET Coreは、従来の.csprojが.xprojになったり、 project.jsonの導入(無くなる噂もあるけど)やらWeb.configの見直しやらエントリーポイントの見直しやら・・・ASP.NETの名前は継承しているけれど、大きな見直しが図られています。

 

マイクロソフトは「ASP.NET Web Form」という偉大であり、時代の流れの中で良い意味でも悪い意味でも独自路線の開発プラットフォームを築きました。

しかし、やはり時代の潮流は異なる方向に流れASP.NET Web Form→ASP.NET MVC / Web APIという方向性の調整が行われましたました。ASP.NET Coreは、またもう一つの大きな変革です。

 

ASP.NET開発者はASP.NET Core開発者になるべきか?

ASP.NET Coreの開発は進められていますが、従来のフルセット.NET FrameworkベースのASP.NET 4.6は継続して開発されていくことがアナウンスされています。

 また・・・非公式情報ですが・・・MSの某エヴァンジェリストにお話を伺ったところ・・・

「基本的には従来からASP.NET開発を行っているエンジニアに対してクロスプラットフォームを望まないのであれば、あえてASP.NEt Coreはお勧めしない」

クロスプラットフォームを実現したい場合・新規にWeb開発を学習する学生などに利用は良いかも」

ということでした。

先日のde:code 2016でASP.NET Coreのセッションを行った井上 章さんにも見解を伺いたいところでしたが、残念ながらお話しする機会は得られませんでした;;

 

ということですが、個人的には必要なものをプラガブルに適用するシンプルな仕組みのASP.NET Coreの思想は好きです。

「確かにピュアな.NET Coreはフルセット.NETの機能に及ばない」というのは事実です。

「.NET Coreはフルセットの.NET Framework機能を使うこともできるけど、この場合はパフォーマンスの優位性はなくなるのかな?(従来のファットなパイプラインは無くなるわけだから、パフォーマンスの向上は見込めるかな)」という疑問を持っています。

 

 

ということで、今後の投稿では具体的なASP.NET Coreでの実装に触れながら学んでいきたいと思います。