6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.NET 7 Preview 1 がリリースされました

Last updated at Posted at 2022-03-07

みなさんごきげんよう。本日はちょっと時間を空けちゃったんですが、.NET 7 の Preview 1 がリリースされたので、そこの記事を紹介させていただければと思います。

つい少し前に .NET 6 が出たばかりじゃない…と思いましたが、よく考えたらあれは 11 月だったので、それなりに時間がたっていたのかもしれません。...にしても早い。アジャイル開発恐るべし。

(2022/3/8 Update) ASP.NET Core のほうも訳してみたので記載します。

はじめに

米国時間 2 月 17 日、.NET の歴史における次のマイルストーンとして、.NET 7 Preview 1 が発表されました。なお、.NET 7 の ASP.NET Core Preview 1Entity Framework 7 Preview 1 も併せてリリースされています。

※日本語(2022/03/08 Update)

.NET 7 は、.NET 6 で確立した基盤上に構成されており、統一ベース ライブラリ、ランタイム、SDK セットや、よりシンプルになった開発環境、開発生産性の向上などを実現しています。さらに、クラウド ネイティブ シナリオのサポートの強化だけでなく、レガシー プロジェクトのアップグレードを支援するツールや、コンテナ上での作業をよりやりやすくしてくれるような、開発者のエクスペリエンスの簡素化などにフォーカスしています。

.NET 7 Preview 1 では、API へのアノテーションによる Null 許容性(nullability) のサポート、JIT コンパイラの最適化、新たな API、そして、より多くのホット リロードのシナリオ サポートなどが含まれています。

.NET は、製品、ライブラリ、ランタイム、ツールが含まれており、マイクロソフトだけでなく、社外を含めた複数のチームの共同作業によってリリースが行われています。今回の記事で取り上げようと思うテーマは広いですが、それでも .NET 7の主要なシナリオと投資のすべてを網羅しているわけではなくて、.NET 7 リリースに向けた重要な作業の一部に過ぎません。
私たちは、ASP.NET Core、Blazor、Entity Framework (EF) Core、WinForms、Windows Presentation Foundation (WPF)、およびその他のプラットフォームに幅広い投資を行う予定です。
今後の投資分野については、製品ロードマップに詳細がありますので、ごらんいただくことで今後の展望をお分かりいただけるのではないかと思います。

※注 : Orleans
Orleans は、Microsoft Research によって開発された、.NET によってクロス プラットフォームで分散型アプリケーションを構築するためのフレームワーク。単一のオンプレミス サーバーから、グローバル分散されているクラウド上の高可用性アプリケーションまで拡張可能。最大の特徴は、高度に並列化された分散システム特有の複雑さを、機能制限なしかつ開発者に負担を強いることなく両立させたプログラミング モデル。次項以降で触れます。

img

.NET 7 Preview 1 のダウンロード

Windows 版、Mac OS 版、Linux 版がダウンロード可能です。

.NET 7 は Visual Studio 17.2 Preview 1 上でテストされています。Visual Studio ファミリー製品で .NET 7 を試したい場合は、Preview Channel のビルドを使用することをお勧めします。Visual Studio for Mac の .NET 7プレビューのサポートはまだありませんが、近日中に提供される予定です。

モダン クライアント:.NET Multi-Platform App UI(.NET MAUI)

.NET MAUI は、.NET によるクロス プラットフォームのネイティブ UI のめざす形であり、.NET 7 の一部となる予定です。米国時間 2 月 1 日に、私たちは .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 では、次のような開発者のエクスペリエンスの改善を模索することで、クラウド ネイティブ アプリケーションの構築を容易にします。

  • セキュアな認証と認可の実装に必要なセットアップと設定の簡素化
  • アプリケーションの起動と実行時のパフォーマンス向上

また、"分散型 .NET "と呼ばれる分散アプリケーション構築のための .NET クロスプラットフォームフレームワークである Orleans への投資を継続する予定です。包括的に Orleans のドキュメントを引き続き増強し、Azure App ServicesAzure Container Apps といった既存のクラウド サービスとの連携を強化することで、Orleansをより使いやすく、実装しやすくしていきます。

今日では、多くの企業でクラウド ネイティブ アプリケーションやマイクロ サービスを展開する方法として、コンテナが推奨されています。一方で、コンテナに依存することで、コンプライアンスの管理、イメージの構築と公開、イメージの保護、イメージ サイズとパフォーマンスの合理化など、いくつかの課題が生じます。私たちは、.NET コンテナでより良いエクスペリエンスを実現する機会があると確信しています。

お客様がこれらの課題に直面された際の支援として、.NET 7 では、コンテナを使用した .NET 開発を大幅に改善する予定です。たとえば、SDK の新しい機能として、MSBuild を介してコンテナを直接ビルドすることを検討しています。また、テレメトリを強化し、コンテナの可観測性を向上させていく予定です。コンテナ イメージについてもより小さく、より速く、より安全にすることに注力しつつ、Rootless や Distroless といった要望の高いモデルについても検討してまいります。

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

.NET 6 リリース以来、開発者は新しいパフォーマンスの向上、最小 API やホット リロードなどの生産性に関連する機能、および新しいランタイムと C# 言語の革新、ライブラリとツールの成熟したエコ システムを利用するために、アプリケーションをアップグレードしてきました。.NET 7 では、既存の .NET アプリケーションを最新の .NET プラットフォームとテクノロジに対応させることができます。
より多くのアナライザ、コード フィクサ、および .NET Upgrade Assistant の追加アプリケーション型のサポートにより、より多くのアプリケーション ポートフォリオを自信を持ってアップグレードできるようにして、アップグレードに伴う反復作業に費やす時間を短縮することができます。

また、.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 許容性 (nullability) アノテーション

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.* ライブラリの nullability のためのアノテーションを作成する予定です。残りのライブラリは dotnet/runtime#43605で見ることができ、進捗を追うことができます。

この作業の大部分に貢献してくれている @maxkoshevoi さんに、心より感謝を捧げます。maxkoshevoi さんの協力がなければ、私たちはここまでこれなかったでしょう。ありがとうございます!

オブザーバビリティ

トレース API の改善を継続して行っています。

  • ActivityContext.TryParse にオーバーロードを追加することで、アクティビティ コンテキストが remote parent から伝搬された場合を含む
    ActivityContext オブジェクトの解析と作成が可能になりました(Related Issue
  • Activity オブジェクトが停止しているかどうかを示す Activity.IsStopped()メソッドを追加しました(Related Issue

CodeGen

コミュニティの皆さんからの Pull request はこちら。(JIT コミュニティの Contributer の皆様に感謝です!)

From @am11

From @anthonycanino

From @SeanWoo

From @SingleAccretion

From @RalfKornmannEnvision

From @weilinwa

ガイド付き最適化のプロファイル : 動的 PGO (Profile-guided optimization)

参考 : 動的 PGO は .NET 6 から導入された JIT コンパイラのオプション。パフォーマンス向上が見込める。

Arm64

img

ループ最適化

一般的な最適化

相互運用: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 シングルトンにアクセスできるようになりました (Related Issue)
  • JsonWriterOptions.MaxDepth プロパティを追加し、この値がシリアライズ時に同等の JsonSerializerOptions.MaxDepth プロパティから流せるようにしました(Related Issue
  • System.Net.Http.JsonPatch メソッドを追加しました(Related Issue)

ホット リロードの改善

Blazor WebAssembly および .NET for iOS/Android の C# ホット リロードで、以下の編集が可能になりました(Related Issue)。

  • 既存メソッドへの static lambda の追加
  • キャプチャする lambda がすでに 1 つ以上ある既存のメソッドに、さらにキャプチャする lambda を追加する。
  • 既存クラスへの新しい静的または非仮想インスタンスメソッドの追加
  • 既存のクラスに新しい静的フィールドを追加する
  • 新規クラスの追加

既知の問題 :

  • 新しく追加されたクラスのインスタンスフィールドはサポートされません
  • 既存または新規のクラスで新規に追加されたメソッドとフィールドは、リフレクションでは表示されません

これらの問題の対応状況は dotnet/runtime#57365 で確認いただけます。

.NET7 をターゲット設定にする

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

例)

<TargetFramework>net7.0</TargetFramework>

.NET 7の TFM のフルセットは、OS 固有のものを含め以下の通りになります。

  • 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 を開発しています。学生の方から、プログラミングを趣味とされる方たち、オープンソースの Contributor の方々、そして企業の顧客の皆様まで、幅広く .NET を中心とした集まりが .NET 開発の中心となっています。皆さんが、新しいアイデアを提案くださり、定期的にコードを提供してくださることで、.NET のエコシステムが進んでいきます。私たちは、皆さまのサポート、貢献、そしていただたインサイトに感謝しています。

.NET 7 へようこそ!


以上、Jeremy Likness さん (Senior Program Manager - .NET Data, .NET) でした。

それではみなさん、ごきげんよう。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?