11月の.NET Conf 2020でMicrosoftが.NET 5プラットフォームをリリースした。今回のリリースにおける多大な投資は、おもにプラットフォーム全体のパフォーマンス改善に向けたものだが、それに次ぐのがBlazor、SignalR、Web API関連を中心とした、ASP.NET Coreの広範な新機能セットである。さらに、ASP.NET MVCのモデルバインディングタイプが拡張され、Azure Active Directory認証インテグレーションを容易にする新ライブラリであるMicrosoft.Web.Identifyのサポートが追加された。
.NET 5で大幅に改善されたASP.NET Coreは、TechEmpowerベンチマークにおいて最もパフォーマンスに優れたフレームワークであり、開発者コミュニティの評価も高い。まず最初に挙げられる拡張点はガベージコレクションだ。オブジェクトのコレクション中にもスレッドの動作拡大が可能になると同時に、静的オブジェクトをスキャンする際のロック競合が低減されている。次の実例はjust-in-timeコンパイラが生成するマシンコードの品質向上である。これは冗長なゼロ初期化の削除や配列、文字列、spanの境界チェックなどの新機能によるものだ。GCとJITのパフォーマンスが向上した結果、Kestrelサーバ内のアロケーションや.NETのgRPC実装など他の領域も改善されている。
出典: gRPC performance improvements in .NET 5 | ASP.NET Blog
その他の有用な改善としては次のものがある。
- ARM64ハードウェア固有機能のサポート
char.IsWhiteSpace
の追加と、それを利用するテキスト処理メソッドすべてComparison<T>
ベースのソートルーチン。LINQのOrderByメソッド、およびコレクションのオーダリング一般に影響する。- リンクプロセスにおける、アプリケーションの未使用部分のトリミング機能
- JsonSerializerクラスのリファクタリングによる、JSONシリアライゼーションおよびデシリアライゼーションの高速化
Blazorフレームワークでは、通常操作の処理時間が2分の1になったWebAssemblyランタイムと、UIコンポーネントのレンダリングフェーズの両面からパフォーマンスが向上している。New controls such as InputFile, InputRadio, and InputRadioGroup are available, and the component virtualization enhances the rendering process.
出典: ASP.NET Core updates in .NET 5 Release Candidate 1 | ASP.NET Blog
SignalRに関しては、複数のハブメソッドの並列呼び出しの同時管理や、ハブメソッドの前後に実行されるコードを記述して、ログやエラー処理、引数の検証などに使用することが可能になった。フィルタはハブ単位およびグローバルに設定することができる。
ASP.NET Core MVCフレームワークでは、C# 9で導入されたレコード型がモデルバインディングでサポートされるようになった。UTC時間文字列を含むリクエストをUTC DateTimeフィールドにバインドすることも可能だ。
public record Person([Required] string Name, [Range(0, 150)] int Age);
public class PersonController
{
public IActionResult Index() => View();
[HttpPost]
public IActionResult Index(Person person)
{
// ...
}
}
出典: What's new in ASP.NET Core 5.0 | Microsoft Docs
OpenAPIサポートも革新されて、デフォルトで有効になった。Swashbuckle.AspNetCoreプロジェクトのメンテナとのパートナシップにより、Web APIプロジェクトテンプレートにSwashbuckle用のNuGETパッケージが含まれる。OpenAPI設定はStartup
クラスのConfigureServices
メソッド内にある。Swagger UIページと同じく、開発モードの場合のみデフォルトで有効になる。
最後の改善点は、ASP.NET Coreアプリケーションの認証に関するものだ。プロジェクトテンプレートにMicrosoft.Identity.Web NuGetライブラリの参照が含まれており、Azure Active Directoryを通じた認証プロセスが簡単になると同時に、特定したユーザとしてAzureリソースにアクセスすることが可能になる。
dotnet watch
コマンドを使えば、デバッガとブラウザを一度に起動することが可能だ。デバッグ中にコードを変更すれば、自動的にページがリフレッシュされる。
これらすべての機能と改善とともに、Scott Hunter氏(.NETのプログラムマネジメントディレクタ)が折に触れて述べているように、Microsoftは、フレームワークへの強力なコミットメントとコミュニティのコントリビューションによって、2021年11月に予定されている、一般にはOne.NETと呼ばれる.NETの次期バージョンへの基盤を築いているのだ。