銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

.NET 7についてまとめてみた

自分の勉強がてらまとめています。公式ブログを日本語で、すぐ目を通せることを目的にしています。この記事では.NET 7のテーマについてまとめています。

devblogs.microsoft.com

.NET 7の新機能

フレームワークごとの新機能はそれぞれ公式ブログより提供されています。

devblogs.microsoft.com

devblogs.microsoft.com

devblogs.microsoft.com

devblogs.microsoft.com

devblogs.microsoft.com

devblogs.microsoft.com

シナリオ

.NET でできることになったことの一例が公式ブログやドキュメントで紹介されています。

ユニファイド

1つの基本ライブラリ

.NET 7 を使用すると、1 つの SDK、1 つのランタイム、1 つの基本ライブラリ セットを使用してさまざまな種類のアプリ (クラウド、Web、デスクトップ、モバイル、ゲーム、IoT、AI) を構築できます。

.NET 7をターゲットにする

プロジェクトで次のように指定すると.NET 7で利用可能なすべてのAPIが利用できます。

<TargetFramework>net7.0</TargetFramework>

これに加えて、以下のターゲットフレームワークモニカー(TFM)を指定すると、OS固有のAPIが利用可能になります。

  • net7.0-android
  • net7.0-ios
  • net7.0-maccatalyst
  • net7.0-macos
  • net7.0-tvos
  • net7.0-windows

ARM64

L3キャッシュサイズの読み取りの改善や、LSEアトミック命令の導入によりランタイムのパフォーマンスを改善した。組み込み関数を利用するライブラリを最適化するため、Vector64, Vector128, Vector256などのクロスプラットフォーム ヘルパーを導入した。これらによるパフォーマンスの改善の詳細については以下のブログを参照。

devblogs.microsoft.com

Linux での .NET サポートの強化

.NET 6 は Ubuntu 22.04 (Jammy) に含まれており、apt install dotnet6 コマンドでインストールできます。さらに、すぐに使用できる最適化されたビルド済みの超小型コンテナーイメージも提供しています。

64 ビット IBM Power のサポート

RHEL8.7およびRHEL9.1をターゲットとするppc64le (64-bit IBM Power) アーキテクチャをサポートしました。

モダン

.NET MAUIが.NET 7に含まれ、Blazorも改善を進めました。

Announcing .NET MAUI for .NET 7 General Availability - .NET Blog

Blazor - .NET Blog

また、.NET Upgrade Assistantにより.NET FrameworkやUWPなアプリを、.NET 6および.NET 7に移行する手助けをしてくれます。

.NET 6への移行

LTSである .NET 6がリリースされてから、Microsoftのサービスを中心に多数のサービスが.NET 6への移行を行い、その記事が公開されています。

クラウドネイティブ

dotnet publishコマンドにより直接コンテナイメージを生成できるなどのコンテナのネイティブサポートの強化、オブザーバビリティ獲得のためOpenTelemetry対応の強化など、クラウドネイティブへの投資を続けています。

devblogs.microsoft.com

シンプル

C# 11

C#11、F# 7が追加されました。

devblogs.microsoft.com

devblogs.microsoft.com

特にC#11では、新機能の静的仮想インターフェイス メンバーも活用したGeneric Mathが導入され、数値演算をもつクラスを定義するのが簡単になります。

learn.microsoft.com

また、エスケープ シーケンスを必要とせずに、空白、改行、埋め込み引用符、およびその他の特殊文字を含む任意のテキストを含めることができる生の文字列リテラル(raw string literal)が導入されています。

.NET ライブラリ

.NET ライブラリにも以下のものを初めてとする機能追加が行われています。

  • Microsoft.Extensions の Null 許容注釈
  • System.Composition.Hostingでコンテナに単一のオブジェクトインスタンスを許可
  • TimeStamp、DateTime、DateTimeOffset、TimeOnly へのマイクロ秒とナノ秒の追加
  • Microsoft.Extensions.Cachingにメトリクスサポートを追加
  • tar.gzを扱うSystem.Formats.Tar API
  • DateOnlyなど新しく追加された型に対応した型コンバーター
  • System.Text.Json コントラクトのカスタマイズ
  • System.Text.Json 型がユーザー定義型階層のポリモーフィック シリアル化と逆シリアル化をサポート

.NET SDK

.NET CLIにパーサーとタブ補完が追加されました。また、.NET テンプレートに制約の概念が追加され、どのテンプレートが表示されるかをユーザー環境に応じて制御することができます。

NuGet

NuGet6.4がリリースされました。

devblogs.microsoft.com

その中の新機能として、多数のプロジェクトがあるソリューションにおいて利用するパッケージのバージョンをソリューションで制御できる、NuGet の中央パッケージ管理機能が追加されました。

devblogs.microsoft.com

パフォーマンス

.NET 7でもパフォーマンス改善が引き続き行わています。

TL;DR: .NET 7 is fast. Really fast. A thousand performance-impacting PRs went into runtime and core libraries this release, never mind all the improvements in ASP.NET Core and Windows Forms and Entity Framework and beyond. It’s the fastest .NET ever. If your manager asks you why your project should upgrade to .NET 7, you can say “in addition to all the new functionality in the release, .NET 7 is super fast.” Stephen Toub - MSFT

一言で言うと: .NET 7は速いです。本当に速いです。今回のリリースでは、ASP.NET CoreやWindows Forms、Entity Frameworkなどの改良を差し置いて、ランタイムとコアライブラリに1000ものパフォーマンスに影響を与えるPRが投入されました。これは史上最速の.NETです。もしあなたの上司が、あなたのプロジェクトが.NET 7にアップグレードすべき理由を尋ねたら、「リリースに含まれるすべての新機能に加えて、.NET 7は超高速です」と言えばよいのです。

詳細はこのブログにまとめらています。

devblogs.microsoft.com