clock-up-blog

go-mi-tech

ASP.NET MVC と ASP.NET Core MVC の名前と機能と採用判断の話など

主に「ASP.NET Core」の名前や歴史に関する話です。

誰も彼もが解説をさぼった結果、世間的な認識がとても曖昧になっているように見えるところを少し整理しようと思います。

少しめんどくさい話になりますがお付き合いください。

ASP.NET の派生。Core という名前について。

ASP.NET 上に構成されるフレームワークにはいくつか派生があり、名称としては「ASP.NET Web Forms」「ASP.NET MVC」「ASP.NET Core」「ASP.NET Core MVC」等の表記を見ることがしばしばあるかと思います。

これは少し名前を分解して考える必要があります。

まず、ASP.NET というウェブアプリケーション用のエンジンがあり、このエンジンは名前通り .NET Framework 上で動きます。この ASP.NET エンジンの上に「Web Forms」「MVC」のテンプレートを乗せる形で構成されたフレームワークが、それぞれ「ASP.NET Web Forms」「ASP.NET MVC」と呼ばれます。


 
エンジンである ASP.NET のバージョンは 1, 2, 3, 4, 5 と上がってきましたが、ASP.NET 6 については少し毛並みが違い、2015年に RC 版で登場した .NET Core 上で動作するような構成となりました。

「.NET Core 上で動作する」とはつまり、「Windows 以外の環境下でも動く」ことを意味します。これは画期的であり、しかし互換性等を考える上で大きく気に留めるべき性質です。

ASP.NET 6 における変更はそのように影響の大きなものであったため、バージョン番号を単純に「6」とはせず、「ASP.NET vNext」という仮称が一時期付けられました。これは後に正式名として「ASP.NET Core」という正式名に改名されます。


 
そのような経緯があり、ASP.NET 系のエンジンには「ASP.NET」「ASP.NET Core」の2系統があることを知っておいてください。旧「ASP.NET」のメジャーバージョンは 1~5 までであり、6 以降が登場することはありません。(ASP.NET 6 は ASP.NET Core そのものなのです)

 
新しい「ASP.NET Core」上で構成された MVC フレームワークが「ASP.NET Core MVC」となります。

なお、ASP.NET Core 上では Web Forms は動かないことに注意してください。Web Forms を使いたい場合は旧 ASP.NET (~5) を使う必要があります。

 
現状、「ASP.NET Core」上で動く Web フレームワークがこの「ASP.NET Core MVC」のひとつしかないため、しばしば「ASP.NET Core MVC」を指す意味で「ASP.NET Core」という表記が使わます。

Microsoft 公式のサイトを見る限りでも割とそのような表記のブレはあり、それほど意識的な区別をするポリシーは無いのかもしれません。

ASP.NET Core が動作するプラットフォーム

前述のとおり、ASP.NET Core は .NET Core 上で動作させることができますが、加えて、従来の .NET Framework 上で動作させることも実はできます。

「.NET Core」「.NET Framework」どちらのプラットフォームを用いるべきかは要件に依ります。

.NET Core は多くの OS で動作させられるメリットがありますが、
.NET Framework は OS が Windows に制限される代わりに Windows 固有の機能を広く扱えるメリットがあります。

 
実際、Visual Studio で新規に ASP.NET Core プロジェクトを作る際、新規プロジェクトのダイアログ内で「.NET Core」「.NET Framework」どちらのプラットフォームを利用するかを選択することができます。

目的に合わせて適切なプラットフォームを選択してください。

整理と補足:混乱をしないために

少し整理と補足をします。混乱を誘うややこしい話がいくつか出てきました。

  • ASP.NET Core はエンジン名を指すこともあるしフレームワーク名を指すこともある。文脈で判断すること。
  • ASP.NET Core に Core が付いているからといって、それがいつも .NET Core 上で動いているとは断言できない。.NET Framework 上で動かすこともできるし、そのような動かし方にも価値がある。
  • ASP.NET MVC という名称が出てきたら ASP.NET MVC 1~5 を指すものと判断して良いことが多い
    • …が、ASP.NET Core が ASP.NET 6 の延長であることから、そういう意味で ASP.NET Core MVC のことを指して ASP.NET MVC と表記されることもある(特に Visual Studio 内の表記にはそういう記載がまだ割と残っている)。
  • ASP.NET vNext という名前が出てきたら確実に ASP.NET 6-beta から ASP.NET Core への移行期の名前を指していると判断して良い。
  • Visual Studio 2017 で ASP.NET Core MVC プロジェクトを作る際、ウィザード内に「ASP.NET Core MVC」という単語は実は登場しない(2017年7月時点。VS2017で確認。)。(「ASP.NET Core」「ASP.NET MVC」の単語は登場する)


なお、Overview of ASP.NET Core MVC | Microsoft Docs によると

The ASP.NET Core MVC framework is a lightweight, open source, highly testable presentation framework optimized for use with ASP.NET Core.

とあります。

ASP.NET MVC 5」「ASP.NET Core MVC」どちらを使うべきか

昔ながらの Web Forms はさておき(しかしこれにも価値はあるのですよ)、今から ASP.NET を触るとしたら「ASP.NET MVC 5」「ASP.NET Core MVC」の2択で迷うことが多いかと思います。

ひとつの判断基準としてフレームワークの更新日をあげておきます。

  • この記事を書いている日付が2017年7月。
  • ASP.NET MVC 5 の最終更新が2015年2月。
  • ASP.NET Core MVC は日々変更が加えられており 2.0.0-preview2 版が2017年6月にリリース。


ASP.NET Core MVC (以降「ASP.NET Core」と記す) には今後も日々変更が加えられることが想像されます。その中には破壊的変更もあるでしょう。2017年3月あたりに .NET Core プロジェクトの project.json が廃止され、従来の MSBuild/csproj 形式に戻されたことが記憶に新しいです。

フレームワークの変更に追従していくコストを嫌うのであれば ASP.NET MVC 5 を選択するのが良いでしょう。導入実績も数多くあり、安定するはずです。(ちなみに2016年2月時点での Stack Overflow の裏側は ASP.NET MVC 5.2.3 で支えられています。


安定志向で考えると ASP.NET MVC 5 は悪くない選択ですが、ASP.NET MVC 5 は2015年2月で更新は止まっており、おそらく今後の更新も行われないでしょう。それは時間とともに「古いテクノロジ」になっていくことを意味します。

常にモダンな思想に追従していきたいのであれば ASP.NET Core を選ぶのもまた良いです。

ASP.NET に限らずどのようなテクノロジにおいても「新しい版に日々追従し小さなコストを払い続けるか」「同じ版を使い続け、いつか来る転換期で大きなコストを払うか」という選択肢が存在し、それらはトレードオフの関係です。どちらが良いかの判断はもう感覚とか勘とかの世界になるんじゃないかな、というのが僕の考えでして、今のところ僕の勘ではそろそろ ASP.NET Core の追従に乗り始めても良い時期かな、という感じです。


根拠はうまく言えないけど、もうそろそろ良いと思う。ASP.NET Core 使おう。

後記

モダンに追従していくことの大きなメリットは「他のモダンな外部テクノロジとの連携において足並みが合わせやすい」ことだと考えています。このあたりについてはまた別の機会にでも掘り下げたい。


ところで本文に書いた「勘」には実のところ繊細な意味がつまっていて、さすがに「勘」の説明を「勘」で済ませるのは雑すぎるとは思いつつ、文章が膨れても良くないので今回はこれで収めました。これについてもいつか折を見てちゃんと説明します。


});