Microsoftは今週始め、.NET Core 3.0のリリースを、.NET Conf 2019と同社の開発ブログで同時に発表した。この新リリースには、Windows FormsとWindows Presentation Framework(WPF)を使ったWindows Desktopアプリのサポート、新たなJSON API、Linux ARM64のサポートが含まれる他、全般的にパフォーマンスの向上が図られている。F# 4.7とC# 8.0も含まれている。
今回の新バージョンで、.NET Coreは、Windows FormsとWPF、UWP XAMLを使ったWindows Desktopアプリケーションの開発を完全にサポートするようになった。これは今回のリリースで最も重要な機能のひとつだ — Microsoftは今年始め、Microsoft Build Liveのハイライトとして、この発表を行っていた。Windows FormsとWPFは、Windows UI XAML Library(WinUI)とともに昨年、オープンソースとして公開されている。それ以後の開発作業では、.NET Framework互換性の維持に重点が置かれてきた — その中には、.NET Frameworkから.NET Coreへの移植を容易にすることも含まれている。
デスクトップアプリケーションの.NET Coreへの移植は重要な機能だが、新たなテンプレートとツールも新機能として含まれている。Visual StudioのXAMLデザイナがアップデートされて、XAML Hot Reloadと呼ばれる機能が追加された。この新機能により、アプリケーションの実行中でもXAMLを変更することが可能になった。Windows Formsデザイナもアップデートされたが、こちらはまだプレビュー版だ(Visual Studioとは別のダウンロードとして提供されている)。なお、Windows FormsとWPFが動作するのはWindows上のみであることに注意が必要だ。
その他のWindows Desktop開発に関連する機能としては、異なるバージョンの.NET Coreの使用やデプロイがあげられる。Windows Desktopアプリを、自己完結型(self-contained)アプリケーションとして配布できるようになったのだ。自己完結型アプリは、デプロイ先の環境から独立していて、独自の.NET Coreバージョンを使用する。単一の実行ファイルとして配布することも可能だ。これまでのデスクトップアプリケーションでは、dotnetコマンド経由で起動する必要があったことを考えれば、これは重要な機能だ。単一実行ファイルに関連する、もうひとつの興味深い機能は、依存性のトリミングだ。アプリケーションが使用しないアセンブリをすべて削除して、生成ファイルを小さくすることができる。ただしこの機能は、現時点では"実験的(experimental)"と記されている。.NET Conf 2019で紹介され、単一の実行ファイルを生成したが、サンプルアプリケーションからのアセンブリの削除に数分間を要していた。
.NET Core 3.0にはさらに、読み込み/書き込みシナリオ、ドキュメントオブジェクトモデル(DOM)によるランダムアクセス、シリアライザなどを目的とした、新たなJSON APIも含まれている。この新APIは、ASP.NET CoreからJson.NETフレームワークへの依存性を排除するという、Microsoftの計画に沿ったものだ。この計画には、ハイパフォーマンスなJSON APIの開発も含まれている。これは最終的に、Kestrel(ASP.NET Coreテンプレートに含まれるデフォルトWebサーバ)のパフォーマンスを向上させることになる。Microsoft .NETチームのプログラムマネージャであるImmo Landwerth氏によると、
.NET Coreが登場したことで、.NETスタックの要件は少し変わってきています。.NETではこれまで、ユーザビリティと便利性を重視してきました。.NET Coreでは、パフォーマンスにも目を向けて、ハイパフォーマンスのニーズに応えるために多くの投資をしています。[...] JSONの構文解析をサポートするためには、ハイパフォーマンスのシナリオに特化した新たなJSON APIセットを公開する必要がある、と考えています。
SqlClient(.NET FrameworkのSystem.Data.dllアセンブリに含まれていた)の新バージョンも、今回のリリースで導入されている。NuGetパッケージでプレビュー版が利用可能な新バージョンでは、Always Encrypted、Data Classification、UTF-8もサポートされている。
Linux ARM64のサポートは、IoTに関連の開発の一部として提供されるものだ。Microsoftで.NETチームのプログラムマネージャを務めるRichard Lander氏が説明している。
.Net Core 2.1と2.2では、LinuxとWindows用のARM32サポートをそれぞれ追加しましたが、今回のリリースではLinux ARM64のサポートが追加されています。IoTワークロードの一部ではすでにx64機能を利用していますが、多くのユーザからARMサポートを求められていました。今回これが導入されたことで、大規模なデプロイメントを計画中のユーザとも協力しています。
最後に、パフォーマンス改善に関しては、すべてこちらに記されている。改善には、ガベージコレクション(GC)のメモリ使用量が(ヒープサイズを小さくすることによって)デフォルトで少なく設定されていることや、.NET Core SDKのサイズがオリジナルの20~30パーセントに縮小されている(ディスク上のサイズであり、オペレーティング・システムに依存する)ことも含まれる。その他の機能としては、Dockerのリソースリミットのサポートや、LinuxでのTLS 1.3とOpenSSL 1.1.1のサポートなどがある。C# 8.0とF# 4.7も、その重要性から、.NET Core 3.0の一部として取り込まれた。F# Core Libraryでは、.NET Standard 2.0が動作対象となった。またC# 8.0には、非同期ストリームとnull許容参照型が追加されている。
興味深いのは、今回のリリースの開発プロセスに関する部分だ。dot.netとBing.comで何ヶ月もホストされてきたことから、Microsoftでは、.NET Core 3.0を"実戦テスト済"である、と発表している。.NET Coreが機能フリーズに到達して以降、すべての新機能が2018年12月から今年7月末まで、一般テスト用として提供され続けてきた。HackerNewsでユーザのいManigandhamが指摘しているように、これはコミュニティにとっても注目すべき点だ。
.NET 3.0では10回程度のプレビューリリースが実施されていて、最後の4回については実運用ライセンスも提供されています。モノリス型でリリースされた従来の.NET Frameworkに比べると、はるかに充実したテストが行われていると言えます。
公式ロードマップによると、.NET Core 3.1長期サポート版(TLS)が今年遅く、11月にリリースされる予定である。.NET Core 3.0はWindows 7以降、Windows Server 2012 R2 SP1以降、macOS 10.13以降、さまざまなLinuxディストリビューションをサポートしている。使用のためには、Visual Studio 2019の最新バージョン(Wiindows版は16.3、macOS版は8.3)が必要である。またVisual Studio App Centerも、.NET Coreの新バージョンで開発されたアプリケーションをサポートするように、すでにアップデートされている。