マイクロソフト「.NET 7」正式リリース。パフォーマンス改善、Linux対応向上、コンテナ生成、ネイティブコンパイラ搭載など新機能

マイクロソフトは同社の包括的なアプリケーションフレームワーク「.NET 7」の正式リリースを発表しました

.NETは、マイクロソフトがWindows用のアプリケーションフレームワークとして開発してきた「.NET Framework」と、オープンソースとして開発を開始した「.NET Core」フレームワーク、モバイル向けの「Xamarin」を統合し、デスクトップアプリケーションからモバイルアプリケーション、クラウドネイティブ、ゲーム、IoTなど、あらゆるアプリケーションを包括的にカバーするフレームワークです。

fig

昨年、初の長期サポート版(LTS:Long Term Support)となる.NET 6がリリースされました。今回の.NET 7は非LTS版で、来年リリース予定の.NET 8が次のLTS版になる予定です。

マイクロソフトが11月9日未明(日本時間)から開催中のオンラインイベント「.NET Conf 2022」の基調講演では、.NET 7のハイライトとしていくつかの新機能が紹介されました。

fig

1000以上のパフォーマンス改善。ARM64の性能がx64並に

.NET 7では1000以上のパフォーマンス改善が行われたとのこと。

fig

例えばgRPCに関してはJavaやRustなどよりも高速に扱えるとしています。

fig

.NET 7におけるARM64の性能改善にも注力した結果、x64とほぼ遜色ない結果になったとしています。

fig

Linuxでの.NETのサポートが充実

Ubuntuが.NETのネイティブサポート開始を発表したことで、aptコマンドによる簡単なインストールやアップデートが可能になっています。また、パッケージマネージャやシェルなどを省いて徹底的にスリム化し、.NETに最適化したUbuntu 22.04 LTSのコンテナイメージの配布も行います。

これらによりLinuxにおいても.NETのサポートが充実されています。

fig

参考:Ubuntuが.NET 6/ASP.NETをネイティブサポートすると発表。最適化されたコンテナイメージをCanonicalが配布開始

また、.NET 7にはコンテナビルド機能が組み込まれたため、外部ツールに依存せずにDockerコンテナを生成可能になりました。

fig

参考:マイクロソフト、「.NET 7」にDockerコンテナイメージ生成機能を搭載、Dockerファイル不要に

ネイティブバイナリを生成する事前コンパイラ搭載

.NET 7ではコンパイルによってスタンドアロンで実行可能なネイティブバイナリを生成する事前コンパイラも搭載されました。WindowsにはCOFF形式、LinuxにはELF形式、macOSにはMach-O形式のバイナリを生成します。現時点ではコンソール用アプリの生成にのみ対応しているとのことです。

参考:マイクロソフト、次の.NET 7にネイティブコンパイラを搭載する見通しを明らかに

WebAssembly .NETランタイム

これまでBlazor WebAssemblyでのみ使われていたWebAssembly版.NETランタイムが、「WebAssembly .NETランタイム」として単独でJavaScriptから呼び出せるようになりました

参考:.NET 7ではWebAssembly製.NETランタイムを単独で利用可能にし、WebブラウザやNode.jsなどでJavaScriptから.NETを簡単に呼び出せるように

.NET MAUI for .NET 7

.NET 7と同時に、単一コードでクロスプラットフォーム対応のユーザーインターフェイスを構成できる「.NET MAUI for .NET 7」(.NET MAUI 7)もリリースされました。

.NET MAUIは5月にバージョン1.0に到達し正式リリースされたばかり。短期間でのバージョンアップとなりました。

fig

.NET MAUI 7では、地図を表示するMap Controlの追加、モバイルデバイスでのレンダリング速度の向上、デスクトップアプリでのウィンドウサイズや位置、コンテキストメニュー、ツールチップ、ホバーポインタ、右クリックなどの機能向上が含まれています。

安定利用はLTS版の.NET 6を、新機能は.NET 7を

.NETは1年ごとにメジャーバージョンアップが行われ、2年ごとに登場する偶数バージョンがLTS版となります。

前述の通り現時点でのLTS版は昨年リリースされた.NET 6であるため、安定した利用を想定するのであれば.NET 6を利用し、最新機能を試すのであれば.NET 7を利用するのが適切でしょう。