.NET 7 の新機能
- [アーティクル]
-
-
.NET 7 は .NET 6 の後継であり、統一性、モダン、シンプル、"高速" に重点を置いています。 .NET 7 は Standard Term Support (STS) リリース (旧称 Current リリース) として 18 か月間サポートされる予定です。
この記事では、.NET 7 の新機能を一覧で説明し、各項目のより詳細な情報へのリンクを示します。
.NET 7 用に更新されたすべての .NET 記事を確認するには、「.NET ドキュメント: .NET 7 リリースの新機能」を参照してください。
パフォーマンスは .NET 7 の重要な焦点であり、そのすべての機能はパフォーマンスを念頭において設計されています。 さらに、.NET 7 には、純粋にパフォーマンスを目的とした次のような機能強化が含まれています。
- オンスタック置換 (OSR) は階層型コンパイルを補完するものです。 ランタイムでこれを使うと、現在実行中のメソッドによって実行されているコードを、その実行の途中で (つまり、"スタック上" にある間に) 変更できます。 実行時間が長いメソッドの場合、実行の途中で、より最適化されたバージョンに切り替えることができます。
- ガイド付き最適化のプロファイル (PGO) が OSR と連携するようになり、(プロジェクト ファイルに
<TieredPGO>true</TieredPGO>
を追加することで) より簡単に有効にできるようになりました。 PGO を使うと、デリゲートなどの追加の処理をインストルメント化し、最適化することもできます。
- Arm64 用のコード生成が機能強化されました。
- ネイティブ AOT を使うと、外部に依存関係のないスタンドアロンの実行可能ファイルをターゲット プラットフォームのファイル形式で生成できます。 これは完全にネイティブであり、IL や JIT を使わないので、高速な起動時間、小さい自己完結型のデプロイという特徴があります。 .NET 7 のネイティブ AOT はコンソール アプリに重点を置いており、アプリをトリミングする必要があります。
- Blazor WebAssembly、Android、iOS アプリに利用される Mono ランタイムのパフォーマンスが向上しました。
.NET 7 を高速にする多数のパフォーマンス重視の機能について詳しくは、.NET 7 のパフォーマンス向上に関するブログ記事を参照してください。
.NET 7 には、次の領域で System.Text.Json のシリアル化が機能強化されました。
- コントラクトのカスタマイズにより、型のシリアル化と逆シリアル化の方法をより詳細に制御できます。 詳細については、「JSON コントラクトをカスタマイズする」を参照してください。
- ユーザー定義型の階層に対するポリモーフィック シリアル化。 詳細については、「派生クラスのプロパティをシリアル化する」を参照してください。
- 必要なメンバーのサポート。これは、逆シリアル化が成功するには JSON ペイロードに存在する必要があるプロパティです。 詳細については、「必須プロパティ」を参照してください。
これらとその他の更新の詳細については、.NET 7 の System.Text.Json の新機能に関するブログ記事を参照してください。
.NET 7 と C# 11 には数値演算を汎用的に実行できるイノベーションが含まれています。つまり、使っている正確な型を知る必要がありません。 たとえば、2 つの数値を加算するメソッドを記述する場合、以前は各型に対してメソッドのオーバーロードを追加する必要がありました。 今回、型パラメーターが数値に似た型に制限される単一のジェネリック メソッドを記述できるようになりました。 詳細については、「ジェネリック型数値演算」の記事とジェネリック型数学演算に関するブログ記事を参照してください。
.NET の正規表現ライブラリは、.NET 7 で機能とパフォーマンスが大幅に向上しました。
RegexOptions.NonBacktracking の新しいオプションを使うと、バックトラッキングを回避し、入力の長さの線形時間処理を保証するアプローチを使う照合が可能になります。 非バックトラッキング エンジンは右から左方向の検索では使用できず、他にもいくつかの制限がありますが、どのような正規表現と入力でも高速です。 詳細については、「非バックトラッキング モード」を参照してください。
正規表現ソース ジェネレーターは新機能です。 ソース ジェネレーターを使うと、コンパイル時に "実際の" パターンに合わせて最適化されたエンジンをビルドし、スループットのパフォーマンスを向上させることができます。 生成されたソースはプロジェクトの一部になるため、表示してデバッグすることができます。 さらに、新しいソース ジェネレーター診断 SYSLIB1045
を使うと、ソース ジェネレーターに変換される可能性のある Regex を使っている場所のアラートを受け取ることができます。 詳細については、「.NET 正規表現ソース ジェネレーター」を参照してください。
大文字と小文字を区別しない検索の場合、.NET 7 ではパフォーマンスが大幅に向上しました。 このように向上した理由は、RegexOptions.IgnoreCase を指定しても、パターン内の各文字と入力内の各文字に対して ToLower が呼び出されなくなったためです。 その代わり、大文字と小文字に関するすべての作業は Regex の構築時に行われます。
Regex は、一部の API でスパンをサポートするようになりました。 このサポートの一環として、次の新しいメソッドが追加されました。
これらとその他の機能強化の詳細については、.NET 7 の正規表現の機能強化に関するブログ記事を参照してください。
.NET ライブラリ API に多くの機能強化が加えられました。 一部については、この記事の他の専用セクションで触れています。 その他の一部は次の表にまとめました。
.NET 7 では、"監視" が機能強化されました。 監視は、スケーリングしたときや、技術的な複雑さが増したときのアプリの状態を理解するのに役立ちます。 .NET の監視の実装は、主に OpenTelemetry を中心に構築されています。 機能強化は次のとおりです。
詳細については、.NET 7 Preview 4 に関するブログ記事を参照してください。
.NET 7 SDK では、CLI テンプレートのエクスペリエンスが向上しました。 また、コンテナーへの発行や、NuGet を使った中央パッケージ管理も可能になります。
dotnet new
コマンドとテンプレートの作成にいくつかの歓迎すべき機能強化が加えられました。
dotnet new
CLI コマンド。テンプレートに基づいて新しいプロジェクト、構成ファイル、またはソリューションを作成できます。以下を探索できるタブ補完をサポートするようになりました。
- 使用できるテンプレート名
- テンプレート オプション
- 許容オプション値
また、適合性を高めるために、install
、uninstall
、search
、list
、update
サブコマンドには --
プレフィックスがなくなりました。
.NET 7 の新しい概念であるテンプレートの "制約" を使うと、テンプレートが許可されるコンテキストを定義できます。 制約は、dotnet new list
のようなコマンドでどのテンプレートを表示すべきかをテンプレート エンジンが決定するために役立ちます。 1 つのオペレーティング システム、テンプレート エンジン ホスト (たとえば、Visual Studio の .NET CLI や [新しいプロジェクト] ダイアログ)、インストールされているワークロードにテンプレートを制約できます。 制約はテンプレートの構成ファイルで定義します。
また、テンプレート構成ファイルでは、テンプレート パラメーターに複数の値を許可するように注釈を付けることができるようになりました。 たとえば、web
テンプレートを使うと、複数の認証形式を許可できます。
詳細については、.NET 7 Preview 6 に関するブログ記事を参照してください。
コンテナーは、クラウド内でさまざまなアプリケーションやサービスを配布し、実行するための最も簡単な方法の 1 つです。 コンテナー イメージは .NET SDK のサポートされる出力形式になりました。また、dotnet publish
を使ってアプリケーションのコンテナー化バージョンを作成できます。 この機能の詳細については、.NET SDK の組み込みのコンテナーに関するサポートのお知らせに関する記事を参照してください。 チュートリアルについては、「dotnet publish を使用して .NET アプリをコンテナー化する」を参照してください。
NuGet の中央パッケージ管理 (CPM) 機能を使って、プロジェクト内の共通の依存関係を 1 か所で管理できるようになりました。 これを有効にするには、リポジトリのルートに Directory.Packages.props ファイルを追加します。 このファイルの MSBuild プロパティ ManagePackageVersionsCentrally
を true
に設定し、PackageVersion
項目を使って共通のパッケージの依存関係にバージョンを追加します。 こうすると、個々のプロジェクト ファイルでは、一元管理されているパッケージを参照する PackageReference 項目から Version
属性を省略できるようになります。
詳細については、中央パッケージ管理に関する記事を参照してください。
.NET 7 では、C# のプラットフォーム呼び出し (P/Invokes) 用のソース ジェネレーターが導入されました。 ソース ジェネレーターは、static
、partial
メソッド上の LibraryImportAttribute を検索し、マーシャリング コードのコンパイル時ソース生成をトリガーします。 コンパイル時にマーシャリング コードを生成するので、DllImportAttribute を使う場合のように実行時に IL スタブを生成する必要がありません。 ソース ジェネレーターを使うと、アプリケーションのパフォーマンスが向上します。また、アプリを事前に (AOT) コンパイルすることもできます。 詳細については、「プラットフォーム呼び出し用のソース生成」と「ソースによって生成された P/Invoke でカスタム マーシャラーを使用する」を参照してください。
このセクションでは、.NET 7 のリリースと同じ時期にリリースされた関連製品についての情報を提供します。
Visual Studio 2022 バージョン 17.4
詳細については、「Visual Studio 2022 の新機能」を参照してください。
C# 11 には、ジェネリック型数値演算、生の文字列リテラル、ファイルスコープ型、その他の新機能のサポートが含まれています。 詳細については、「C# 11 の新機能」を参照してください。
F# 7 では、言語をよりシンプルにし、C# の新機能を使ってパフォーマンスと相互運用性を高める取り組みを続けています。 詳細については、「F# 7 に関するお知らせ」を参照してください。
.NET Multi-Platform App UI (.NET MAUI) は、C# と XAML を使用して、ネイティブのモバイル アプリやデスクトップ アプリを作成するためのクロスプラットフォーム フレームワークです。 Android、iOS、macOS、Windows 用の API が 1 つの API に統合されています。 最新の更新内容については、「.NET MAUI for .NET 7 の新機能」を参照してください。
ASP.NET Core 7.0 には、レート制限ミドルウェア、最小限の API の機能強化、gRPC JSON トランスコーディングが含まれています。 すべての更新内容については、「ASP.NET Core 7 の新機能」を参照してください。
Entity Framework Core 7.0 には、プロバイダーに依存しない JSON 列のサポート、変更保存のパフォーマンス向上、カスタム リバース エンジニアリング テンプレートが含まれています。 すべての更新内容については、「EF Core 7.0 の新機能」を参照してください。
.NET 7 用 Windows フォームに対して多くの作業が行われました。 次の領域で機能強化が行われました。
- ユーザー補助
- 高い DPI とスケーリング
- データ バインド
詳細については、「.NET 7 の Windows フォームの新機能」を参照してください。
.NET 7 の WPF には、多数のバグ修正と、パフォーマンスとアクセシビリティの機能強化が含まれています。 詳細については、「.NET 7 の WPF の新機能」のブログ記事を参照してください。
Orleans は、堅牢でスケーラブルな分散アプリケーションを構築するためのクロスプラットフォーム フレームワークです。 Orleans の最新の更新内容については、「Orleans 3.x から 7.0 に移行する」を参照してください。
.NET Upgrade Assistant と CoreWCF
.NET Upgrade Assistant は、サーバー側の WCF アプリを CoreWCF にアップグレードする機能をサポートするようになりました。これは、コミュニティによって作成された WCF から .NET (コア) への移植です。 詳細については、CoreWCF を使うように WCF サーバー側プロジェクトをアップグレードする方法に関する記事を参照してください。
ML.NET にテキスト分類 API が追加され、最新のディープ ラーニング手法を使ってカスタム テキスト分類モデルを簡単にトレーニングできるようになりました。 詳細については、「AutoML とツールの新機能」と「ML.NET テキスト分類 API の紹介」のブログ記事を参照してください。