.NET 7 プレビュー1 リリース

.NET 7 プレビュー1 リリース

.NET 7 は .NET 6 が築いた基盤の上に構築されており、統一された基本ライブラリ、ランタイム、SDK を含み、開発体験を簡素化し、開発者の生産性を向上させます。

最終更新 2022/02/19 1:01
WeihanLi amazingdotnet
読了目安 7 分
カテゴリ
.NET
タグ
.NET C#

今日、私たちは .NET の歴史における次のマイルストーンを発表できることを大変嬉しく思います。コミュニティと20年にわたるイノベーションを祝いながら、.NET 7 Preview 1 は .NET の次の20年への第一歩を示します。

ASP.NET Core Preview 1EF7 Preview 1 も本日公開されました。

.NET 7 は、.NET 6 が築いた基盤(統一された基本ライブラリ、ランタイム、SDK のセット)の上に構築され、開発エクスペリエンスを簡素化し、開発者の生産性を向上させます。.NET 7 の主な重点分野は、クラウドネイティブシナリオのサポート改善、レガシープロジェクトのアップグレードを容易にするツール、およびコンテナの利用をより簡単にすることで開発者エクスペリエンスを簡素化することです。

.NET 7 Preview 1 には、API の null 許容注釈のサポート、JIT コンパイラの継続的な最適化、新しい API、およびより多くのホットリロードシナリオのサポートが含まれています。

.NET のバージョンには、製品、クラスライブラリ、ランタイム、ツールが含まれており、マイクロソフト内外の多数のチーム間のコラボレーションを表しています。このブログ記事で取り上げている広範なトピックは、.NET 7 のすべての主要なシナリオと投資を網羅しているわけではありません。これらは大きな分野を表していますが、.NET 7 におけるすべての重要な作業の一部に過ぎません。ASP.NET Core、Blazor、EF Core、WinForms、WPF、およびその他のプラットフォームへの広範な投資を計画しており、製品ロードマップを読むことでこれらの分野について詳しく知ることができます:

Windows、macOS、Linux 用の .NET 7 Preview 1 をダウンロードできます。

.NET 7 は Visual Studio 17.2 Preview 1 でテスト済みです。Visual Studio ファミリー製品で .NET 7 を試す場合は、プレビューチャンネルリリースを使用することをお勧めします。Visual Studio for Mac の .NET 7 プレビューサポートはまだ利用できませんが、間もなく提供される予定です。

モダンクライアント:.NET MAUI (マルチプラットフォームアプリケーション UI)

.NET MAUI は .NET のクロスプラットフォームネイティブ UI の未来であり、.NET 7 の一部となります。火曜日に、.NET MAUI Preview 13 をリリースしました。現在、.NET 6 向けの .NET MAUI サポートの提供に注力しており、リリース候補 (RC) が間もなく提供される見込みです。RC が利用可能になり次第、一般提供 (GA) に必要な安定性に達するまで追加の RC をリリースすることに注力します。.NET MAUI GA が .NET 6 向けにリリースされた後、これを .NET 7 に含め、内部開発ループエクスペリエンスの改善、最新の .NET SDK ツールのサポート、より高速なアプリケーションパフォーマンス、より多くのコード共有、相互運用性の強化などのトピックに焦点を当てます。詳細については、.NET MAUI のステータスプロジェクトロードマップをご覧ください。

モダンクラウド:コンテナとクラウドネイティブ

クラウドネイティブアプリケーションをゼロから構築し、データベースサービスマネージドコンテナなどの最新の Web ベースリソースを活用します。クラウドネイティブアーキテクチャは、アプリケーションの他の領域とは独立してデプロイおよびスケーリングできる自律的なサブシステム(一般にマイクロサービスと呼ばれます)を作成することで、大規模アプリケーションのスケーラビリティを向上させると同時に、長期的なコストを削減できます。マイクロサービスアーキテクチャは、柔軟性があり、モノリスアーキテクチャでは実現が難しい限界を超えて進化・拡張できるように設計されているため、一般的なアプローチです。

.NET 7 では、開発者エクスペリエンスの向上を探求することで、クラウドネイティブアプリケーションの構築を容易にします。例えば:

  • 安全な認証と承認を実装するために必要な設定と構成の簡素化
  • アプリケーションの起動とランタイム実行のパフォーマンス向上

Orleans への投資を継続します。これは「分散 .NET」と呼ばれる分散アプリケーションを構築するための .NET クロスプラットフォームフレームワークです。Orleans の包括的なドキュメントの強化を継続し、Orleans と Azure App ServicesAzure Container Apps などの既存のクラウドサービスの統合を改善することで、より使いやすく実装しやすくします。

コンテナは、今日多くの企業がクラウドネイティブアプリケーションやマイクロサービスをデプロイする際の第一選択です。コンテナへの依存は、互換性の管理、イメージのビルドと公開、イメージのセキュリティ向上、イメージのサイズとパフォーマンスの簡素化など、いくつかの課題をもたらします。.NET コンテナを使用してより良いエクスペリエンスを生み出す機会があると信じています。

これらの課題に対処するため、.NET 7 のコンテナを使用した .NET 開発に大幅な改善を計画しています。例えば、MSBuild を介して直接コンテナをビルドすることを SDK の新機能として検討します。コンテナの可観測性を高めるためにテレメトリを強化する予定です。また、権限のないコンテナやディストロールスなどの要求の厳しいアプリケーションモデルを探求しながら、コンテナイメージをより小さく、より速く、より安全にすることに注力します。

モダナイゼーション:.NET アプリケーションのアップグレード

.NET 6 のリリース以来、開発者は新しいパフォーマンスの向上、最小限の API、ホットリロードなどの生産性向上機能、新しいランタイムと C# 言語の革新、そして成熟したライブラリとツールのエコシステムの可用性を活用するためにアプリケーションをアップグレードしてきました。.NET 7 では、既存の .NET アプリケーションを最新の .NET プラットフォームとテクノロジにアップグレードできるようにし続けます。.NET アップグレードアシスタントの追加のアナライザー、コード修正、および他のアプリケーションタイプのサポートは、より多くのアプリケーションポートフォリオを自信を持ってアップグレードし、アップグレードに伴う反復作業の時間を削減するのに役立ちます。

また、各 .NET アプリケーションモデル(ASP.NET、WinForms、WPF など)には、モダナイゼーションに関して独自の課題があり、開発者が必要とする機能やプラットフォーム自体のサポートが不足している可能性があることも認識しています。WCF など、明確な方向性がないものもあります。これらの .NET アプリケーションモデルをアップグレードしやすくするために、適切なガイダンス、ドキュメント、およびツールを提供することに注力します。

サポート

.NET 7 は Current リリースであり、リリース日から 18 ヶ月間、無料のサポートとパッチが提供されます。すべてのリリースの品質は同じであることに注意してください。LTS と Current リリースの唯一の違いは、サポート期間の長さです。.NET サポートポリシーの詳細については、.NET および .NET Core 公式サポートポリシーを参照してください。

互換性を破る変更

最新の .NET 7 互換性を破る変更のリストは、.NET 7 の互換性を破る変更ドキュメントで確認できます。これらは領域とバージョンごとにリストされ、詳細な説明へのリンクが付いています。

提案されたがまだ審査中の互換性を破る変更を確認するには、Proposed .NET Breaking Changes GitHub Issue をフォローしてください。

プレビュー 1

Preview 1 リリースでは、以下の機能が利用可能です。

Microsoft.Extensions の null 許容注釈

Microsoft.Extensions.* ライブラリに null 許容注釈を追加する作業が進んでいます。.NET 7 Preview 1 では、以下のライブラリが null 許容性について注釈されました:

  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.Primitives
  • Microsoft.Extensions.FileSystemGlobbing
  • Microsoft.Extensions.DependencyModel
  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.FileProviders.Abstractions
  • Microsoft.Extensions.FileProviders.Physical
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Binder
  • Microsoft.Extensions.Configuration.CommandLine
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Ini
  • Microsoft.Extensions.Configuration.Json

.NET 7 のリリースまでに、すべての Microsoft.Extensions.* ライブラリに null 許容注釈を追加する予定です。残りのライブラリを確認し、dotnet/runtime#43605 で進捗を追跡できます。

この作業に多大な貢献をしてくださった @maxkoshevoi に心から感謝します。@maxkoshevoi の助けがなければ、ここまで進むことはできませんでした。

可観測性

トレース API の継続的な改善:

  • ActivityContext.TryParse オーバーロードを追加し、ActivityContext オブジェクトの解析と作成を可能にしました。リモートの親からのアクティビティコンテキストの伝播を含むかどうかを指定できます(関連 Issue)。
  • Activity.IsStopped() メソッドを追加し、Activity オブジェクトが停止しているかどうかを示すようにしました(関連 Issue)。

コード生成

コミュニティからの PR(JIT コミュニティコントリビューターに多大なる感謝!!)

@am11 より

一部の旧式組み込み関数を NamedIntrinsic に変換 runtime#62271

@anthonycanino より

追加のバイナリ操作を RangeCheck 分析に追加。runtime#61662

@SeanWoo より

[JIT] [Issue: 61620] ARM64 での *x = dblCns の最適化;runtime#61847

@SingleAccretion より

呼び出し時の浮動小数点 CSE のより良い調整 runtime#63903 サイズ変更時に新しい CSE のハッシュを更新 runtime#61984 フィールド選択を書き換え、VN で SIMD 型を常に正規化 runtime#61370 VN がメモリをどのように番号付けするかに関するドキュメントを追加 runtime#60476 キャスト値の改善 runtime#59841 ブロックモーフィング中の複雑なローカルアドレスでアドレス公開ローカル変数 runtime#63100 埋め込み割り当て時のコピー伝播の処理 runtime#63447 例外セット:デバッガチェックと修正 runtime#63539 emitOutputAM で "moffset" エンコードサイズ最適化の実装 runtime#62896 オペランド種類配列の圧縮と OperIsLocal の最適化 runtime#63253 gtHasRef を LCL_FLD ノードに関心を持つようにする runtime#62568 GT_LCL_FLD のグローバル定数伝播を有効化 runtime#61209 小さな型のグローバル定数伝播を有効化 runtime#57726 fgMemoryVNForLoopSideEffects プロパティ型メインセレクタ runtime#60505

@RalfKornmannEnvision より

CoreRT の ARM64&Unix サポート runtime#41023

@weilinwa より

オーバーライドに基づく FMA コード生成の最適化 runtime#58196

動的 PGO Arm64 の OSR サポート JIT:同期メソッドの OSR サポート JIT:OSR、PGO、および末尾呼び出しの相互作用の処理 2009 Jit アーキテクチャ計画(抜粋)の追加 JIT:いくつかの relops の限定的なバージョンの前方置換 JIT:遅延脱仮想化のためのジェネリックコンテキストの保存 Arm64 Arm64:メモリバリアの改善 画像

InitBlkUnroll/CopyBlkUnroll での SIMD 操作の使用と展開制限の128バイトへの引き上げ [Arm64] InitBlock と CopyBlock の展開を最大128バイトに継続 'cmeq' および 'fcmeq' Vector64.Zero/Vector128.Zero ARM64 包含最適化 [arm64] JIT: X % 2 == 0 -> X & 1 == 0 [arm64] JIT: 符号/ゼロ拡張の追加 [arm64] JIT: "arrayBase + elementOffset" の CSE/プロモーション有効化 [arm64] JIT: "A * B + C" を MADD/MSUB に折りたたみ ループ最適化 ループ事前ヘッダー作成とループプロモーションの一般化 ループリファクタリングと注釈改善 汎用最適化 他のクロスプラットフォームハードウェア組み込み関数の高速化 SIMDAsHWIntrinsic を使用した Narrow と Widen の実装 IsKnownConstant JIT ヘルパーの追加と str.StartsWith('c') による 'str == ""' の最適化 JIT が HFA/HVA を引数/戻り値として渡す際にレジスタに保持できるようにする Vector64/128/256 での nint/nuint のサポート有効化 X86Base.Pause() と ArmBase.Yield() のサポート追加 PAL の優先領域を JIT reloc ヒントに使用 R2R での高速末尾呼び出しのサポート x64 での末尾呼び出しで間接アドレス指定を許可 間接ユニット呼び出しシーケンスのより一般的な最適化 デリゲート呼び出しのための追加ローカル変数の回避 相互運用:p/Invoke コード生成 .NET 6 でプロトタイプ化した p/invoke ソースジェネレータを dotnet/runtime に統合し、ランタイムライブラリをこれを使用するように変換してきました。これは、変換された p/invoke が AOT 互換になり、実行時に IL スタブを生成する必要がなくなることを意味します。

今後、p/invoke ソースジェネレータをランタイム外でも利用可能にする予定です。残りの作業は dotnet/runtime#60595 で追跡できます。

System.Text.Json の新しい API System.Text.Json には、いくつかの小さなライフサイクル強化が含まれています:

  • 開発者は現在、System.Text.Json が内部的に使用するデフォルトのシングルトン JsonSerializerOptions にアクセスできます(関連 Issue)。
  • JsonWriterOptions.MaxDepth プロパティを追加し、この値がシリアル化の JsonSerializerOptions.MaxDepth 相当プロパティから確実に取得されるようにしました(関連 Issue)。
  • System.Net.Http.Json に Patch メソッドを追加(関連 Issue)。

ホットリロードの改善 C# ホットリロードで、Blazor WebAssembly および iOS と Android 向け .NET で以下の編集が許可されるようになりました(関連 Issue):

  • 既存メソッドへの静的ラムダの追加
  • 少なくとも1つの this をキャプチャするラムダが既にある既存メソッドに this をキャプチャするラムダを追加
  • 既存クラスへの新しい静的または非仮想インスタンスメソッドの追加
  • 既存クラスへの新しい静的フィールドの追加
  • 新しいクラスの追加 既知の問題:
  • 新しいクラス内のインスタンスフィールドはサポートされていません
  • 既存または新しいクラスに新しく追加されたメソッドとフィールドは、リフレクションで見えません 進捗状況は dotnet/runtime#57365 で追跡できます。

.NET 7 の指定 .NET 7 を使用するには、プロジェクトファイルで .NET 7 Target Framework Moniker (TFM) を使用する必要があります。例:

net7.0

完全な .NET 7 TFM セット(OS 固有の TFM を含む):

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

.NET 6 から .NET 7 へのアップグレードは簡単であることを期待しています。既存のアプリケーションを .NET 7 でテストする際に発見した互換性を破る変更は、報告してください。

まとめ マイクロソフトの多様なグローバルエンジニアチームは、熱心に参加する開発者コミュニティと協力して .NET 7 を構築しています。学生や愛好家からオープンソースコントリビューターや企業顧客に至るまで、広範な .NET コミュニティは .NET の中核であり、新しいアイデアを提案し、定期的にコードを提供し、.NET エコシステムを前進させています。皆様のサポート、貢献、洞察に感謝しています。

.NET 7 へようこそ。

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む