【ASP.NET】 ASP.NETとASP.NET Core  (.NET) 2021年の新規開発に使うべきは?

【ASP.NET】 ASP.NETとASP.NET Core  (.NET) 2021年の新規開発に使うべきは?

まえがき

 ASP.NETASP.NET.Core (.NET)Microsoft社が提供するWebサービス構築用のフレームワークです。VisualStudioC#Htmlで開発を行う場合、殆どのケースでこのどちらかを選ぶことになるでしょう。
 では、どちらを選べばよいのか?Webを見ると、これからの新規開発では「ASP.NET.Core (.NET) を使うべき」という意見が大半です。こうした意見の背景には、Microsoft社がASP.NET Core (.NET) の開発にかなり力を入れているとみられることや、マルチOS対応というこれからの時代に必須の機能を備えていることなどが挙げられます。
 しかし、実務では安易に新しいものを取り入れると思わぬ落とし穴にはまる事があります。お役所仕事というなかれ、前例というものは偉大です。そういう訳で、今回は ASP.NETASP.NET Core (.NET) を徹底比較し、業務目線でどんな状況でどちらを選ぶべきなのか吟味したいと思います。
 以下、参考にさせて頂いたページ一覧です。

ASP.NET 概要

ASP.NET Core と ASP.NET の比較

https://noxi515.hateblo.jp/entry/2018/03/04/014049

ASP.NET Core について

Razor Pages

Blazor

フレームワーク

   ASP.NET   ASP.NET Core (.NET)
.NETFramework
.NetStandard
.NET
.NET Core
.NETStandard
フレームワーク比較

 フレームワークは上記のとおりです。 .NetStandard .NETで使う基本的なクラスなどを定義したフレームワークで、これはどちらでも使用可能です。ASP.NETでのみ使用可能な .NETFrameworkMicrosoft社が長年に割り開発してきたフレームワークで、長い蓄積により、高い利便性と安定性を実現しています。ただし、Windows環境でしか動作しないという弱点があります。一方、.NETや.NET Core (.NET) .NETFramework に存在するいくつかの機能が使えないなどのデメリットがありますが、Windows以外の環境でも動作可能というメリットがあります。

対応OS

   ASP.NET   ASP.NET Core (.NET)
WindowsのみWindows
Linax
MacOS
実行環境比較

 実行環境は上記のとおりです。先に書いたフレームワークに依存する形で対応OSが決まります。要件にWindows以外のOSで動作するという項目がある場合、ASP.NET Core一択となります。ただし、後述しますが、 ASP.NET Core (.NET) を採用する場合にはいくつかの懸念事項があります。それをきちんと顧客と合意する、もしくは契約書・仕様書に書き込むなどの対策を取る必要があります。

パフォーマンス

 Microsoft社の公式ページによれば、ASP.NET.Core (.NET) の方がパフォーマンスは上とのことです。Web上の有志による検証を見てみても、概ね正しいようです。ただし、負荷の大きい環境ではASP.NETの方が高いパフォーマンスが出るとの意見もあります。
 私見ですが、この差は ASP.NETASP.NET Core (.NET) の起動形態の差によると思っています。ASP.NETは各ページが独立したaspxファイルとして存在しており、ユーザは使っているページごとに個別にアクセスします。対して、ASP.NET.Core (.NET) はコンソールアプリケーションと同様の単一のexeファイルとしてビルドされ、ユーザは一律にそれを利用します。この差が、高負荷環境でのパフォーマンスの差に繋がっているのではないかと考えています。

セキュリティ

 セキュリティに関して、 Microsoft社の公式ページに比較するような記述は見つかりませんでしたが、フレームワークのサポート期間内ではどちらでも大きな差はないと思われます。セキュリティ対策は言語仕様よりもプログラムの作りこみの影響がはるかに大きいため、使用する言語に応じたセキュアコーディングをきちんと学んでからシステム構築に取り掛かるべきでしょう。

使いやすさ

 使いやすさに関しては人によって感覚が異なると思いますが、C#でアプリ開発を行った経験のある開発者なら、 ASP.NET Core (.NET) の方が使いやすいと思います。(私はそうでした。)理由は以下の二点です。

  • RazorPages,Blazorを用いたコーディングが可能
    上記の二つは、いずれもHtmlJavascriptといったブラウザ用の言語をC#ベースでコーディング可能にする言語です。C#の記述をベースに対応するHtmlを作成するような動作をしているとのことですが、他の言語と比べても極めて高速です。Core2.1等の時代には対応機能が少なく使いにくいと言われていましたが、.NET5になってからは、対応機能が増え、C#ユーザに歓迎される機能となっています。
  • テストがコンソールアプリケーション同じ感覚で行える。
    先にも書きましたが、ASP.NETのアプリケーションをビルドすると、apsxファイルという、html相当のファイル(=ページ)が生成され、実行可能ファイル(exe)は生成されません。そのため、ASP.NETのテストを行う際は、表示したいaspxファイルを選択してから行う必要があり、ただデバッグボタンを押すだけのコンソールアプリケーションとは若干異なります。

安定性

 こちらも、セキュリティ同様、フレームワークのサポート期間内であれば大差はないでしょう。ただ、私見を述べると、ASP.NETは、IISさえ起動していれば、aspxファイルが存在するだけで良いのに対し、  使いやすさに関しては人によって感覚が異なると思いますが、C#でアプリ開発を行った経験のある開発者なら、 ASP.NET Core (.NET) ではexeが起動している必要があります。単一プログラムである以上、エラーハンドリングに漏れがあり、プログラムが強制終了した場合、全体の停止に繋がるため、安定性としてはASP.NETに軍配が上がるように思われます。

サポート

 これまでも述べましたが、ASP.NETASP.NET Core (.NET) は使用しているフレームワークが違います。ASP.NETのフレームワークである、.NETFrameworkのサポート期限は以下のページに書かれています。

https://docs.microsoft.com/ja-jp/lifecycle/products/microsoft-net-framework

ASP.NET Core (.NET) のフレームワークである.NET Core (.NET) に関してはこちらです。

https://docs.microsoft.com/ja-jp/lifecycle/products/microsoft-net-and-net-core

 さて、上記のページを見て気になるのは、.NET Core (.NET) のサポート期限が1年、LTS(Long Time Support)対象のバージョンでも3年しかない点です。これはMicrosoft社が .NET Core (.NET) の開発をアジャイル形式で高速に推進すると宣言していることによります。つまり、ユーザの要望を受けて、短い期間にどんどん更新してゆくということです。勿論、後方互換性を損なわないように配慮はされるでしょうが、Core3.1→.NET5への更新では一部の機能が廃止されて混乱を招いたりもしています。
 即ち、 .NET Core (.NET) を開発言語として採用する場合、開発したアプリは、使用言語のサポートが1年で切れることと、その後、セキュリティリスクなどが潜在したままになる恐れがあるのを承知でサポート切れ言語で開発したバージョンを使い続けるか、1年ごとにシステム更新をするかのどちらかを顧客に合意してもらう必要があります。 システム更新といってもリコンパイルするだけで終わるケースもありうるので、毎年その都度契約するよりも、初回納品時に年間保守契約を結ぶべきでしょう。

人気

 いろいろ述べてきましたが、実際にはどちらが良く使われるのか?指標として、StackOverFlowのフレームワークに対する人気調査結果を確認してみたところ、以下のような結果でした。

項目   ASP.NET   ASP.NET Core (.NET)
Loved 13 / 16 位 1 / 16 位
Dereaded 4 / 16 位 16 / 16 位
Wanted 14 / 16 位 6 / 16 位
フレームワーク人気調査比較

Lovedは回答者が好きな言語、Dereadedは嫌いな言語、Wantedはこれから使いたい言語ということのようです。これを見ると、ASP.NETを苦手としている人が多いようですね。また、ASP.NET Coreは好きな言語で1位、嫌いな言語で16位と、多くの回答者に好かれており、嫌っている人が少ない言語であることが分かります。つまり、それだけ使いやすい言語ということでしょう。私の感覚としても、ASP.NET Coreの方が、構造がシンプルでコーディング量が少なくて済むので使いやすいと感じます。
 ただし、一つ気を付けなければならないのは、StackOverFlowの調査はあくまで同サイトの利用者を対象としたもので、殆どが英語圏の人であり、趣味で開発を行っている人も多く含まれるという点です。また、技術系のコミュニティサイトの利用者というくくりから、新しい技術に興味を持つタイプの人が多いと思われます。つまり、ややASP.NET贔屓な私見になってしまいますが、平均よりもASP.NET Coreの評価が高くなりやすい母集団になっていると考えています。

まとめ

 いろいろ調べてみましたが、まとめると以下のような選定基準で ASP.NETASP.NET.Core (.NET) のどちらを使うか決めることができそうです。

  • OS
    Windows以外ならにASP.NET Core(.NET) 確定
  • サポート
    → サポート切れの言語の継続利用を承諾してもらう、または、1年おきのシステム更新を含む保守契約を結んでもらう、このどちらかが満たせなければ、ASP.NETに確定(あくまでサポート期間が長いだけで、更新不要にはならない)
  • その他
    上記に点で確定しなければ、お好みで選定して良い。どちらかと言えば、ASP.NET Core(.NET) がおすすめ

こんな感じになると思います。多分、国内ではサポートの部分を受け入れてくれる顧客は少ないと思うので、結構ASP.NETを使うことの方が多いのではないかと思います。私も、仕事の中でASP.NET Coreで開発されたシステムを見たことはありません。海外では、サブスクリプションの浸透により、年間契約が受け入れられやすい環境にありますが、日本はまだまだその辺遅れていますので、先進的な技術に手を付ける前に、きちんと顧客に合っているかを吟味し、必要な合意を形成することが大切だと思います。