.NET 6、C# 10、Visual Studio 2022 が正式リリースされたので変更点を確認する

投稿: 2021年11月09日
タグ: 
  Developer(Java等)  Windows  ニュースネタ

.NET 6 の 正式リリースopen_in_new が発表され、同時に C#10 の リリースopen_in_new 、Visual Studio 2022 も リリースopen_in_new が発表された。 色々変更点があるので中身を確認する。

.NET 6 の変更点

まずは .NET 6 から。公式のアナウンスでハイライトされている改善点を抜き出して独断でカテゴリ分けすると以下の通り。

全体的な話
  • マイクロソフト自社内のサービス、NamelyHR という人事系Webサービスと Jellyfin という OSS での本番環境での負荷テスト実施
  • ブラウザ、クラウド、デスクトップ、IoT、モバイルで同一の .NET ライブラリが使用できる統合プラットフォーム

  • 実装/言語の追加・改善
  • C# 10、F# 6
  • JSON API (System.Text.Json)
  • より簡単に Web API(HTTPサービス) を作ってみられるようになる Web API の簡素化
  • Blazor コンポーネントを JavaScript から呼び出してレンダリング可能に
  • HTTP/3 サポート

  • パフォーマンス改善
  • ファイルI/O の大幅なパフォーマンス改善とシンボリックリンクのサポート

  • 開発支援ツール類の追加・改善
  • Visual Basic と Visual Studio 2022 使用時のデバッグ表示などの改善
  • ホットリロードの利用
  • OpenTelemetry と dotnet monitor でのクラウド診断の改善。Azure App Service でのサポート。
  • ソースジェネレーター、アナライザーの改善
  • ソースコードからビルド可能な .NET Source-Build ツールの提供。

  • その他、セキュリティやクロスプラットフォーム
  • Blazor WabAssembly(Wasm) による .NET ⇒ Wasm へのコンパイル
  • Single-File アプリを Windows、macOS でも展開可能に
  • OpenSSL 3、ChaCha20Poly1305 のサポート
  • W^X、CET 等によるランタイム多重防御によるセキュリティ向上
  • ILトリミング
  • この1年ぐらい、プレビューで段階的に新機能が出てきたので幾つか既知のものもあるが、列挙すると結構な数だ。 (上記の中には、Visual Studio の機能だったり、言語やランタイムではないツールの話も含まれている)

    .NET 6 のアナウンスを読む範囲では「サポート(LTSサポート)」を最初に謳い、「C# と F# のバージョンアップ」、 そして『パフォーマンス改善』を強く押し出しているように見える。

    パフォーマンス改善に関しては、今年の8月に投稿された以下の超長文の記事にまとめられている。 (いまだに最後まで読みきれてない・・が、どこかで別途整理したい)

    Performance Improvements in .NET 6
    https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/open_in_new

    あと、.NET 6 でもマルチプラットフォームについて言及されている。 アナウンスにも書いてあるが、実体として「Web/ブラウザ(ASP.NET Core)」「クラウド(ASP.NET Core 等)」「デスクトップ(Windows Forms 等)」、 「IoT (.NET IoTライブラリ)」「モバイル(MAUI)」とそれぞれ別物で、MAUI についてはまだ開発中。 MAUI のリリースが遅れたこともあってか、.NET 5 でクロスプラットフォームを大々的にアピールしてたのと比較するとちょっとトーンダウンしたように感じる。

    あと、どうでもいいけど、Windows デスクトップアプリの説明として Windows Forms と WPF が挙げられているのが悲しい。 WinUI 3 を含む Windows Apps SDK(旧 Project Union) は現状 実装がかなりしんどい(コンポーネントのサポートがまだまだ・・) ので正式リリースしてデスクトップアプリの次の選択肢が出てくるのを期待したい。

    C# 10 の変更点

    次は C# 10。新機能として以下が紹介されている。

    using ディレクティブ
  • グローバルな using ディレクティブ
  • 暗黙の using
  • using ディレクティブの組み合わせ利用

  • ファイルスコープ名前空間
  • ファイルスコープ 名前空間 (namespace を括弧で括らなくてよい)

  • ラムダ式とメソッドグループの改善
  • ラムダ式の natural 型
  • メソッドグループの natural 型
  • ラムダ式の戻り値が型定義可能
  • ラムダ式で属性の設定が可能

  • 構造体の改善
  • パラメータの存在しない構造体作成が可能
  • レコード構造体
  • ToString メソッド内で sealed修飾子を利用可能
  • 構造体と匿名型で with式が利用可能

  • 文字列補間(Interpolated) の改善
  • 文字列補間構文の新しいパターン

  • その他の改善
  • 1つのタプルの分解内で宣言済/未宣言の変数を組合せて定義可能
  • 変数の割り当て、null値確認の誤検知による警告出力の抑制
  • 拡張プロパティパターン
  • メソッド呼び出しコンテキストの情報取得 API (CallerArgumentExpressionAttribute)
  • C# 10 の大きな変更点の1つとしては「レコード構造体」の追加とかかな、と思うが、 個人的には「ファイルスコープ名前空間」の改善がうれしい。 namespace を括弧で括らなくてよくなった。

    C#
    namespace Company.Project1 { class Class1 { } }

    と書く必要があったものが、C# 10 から

    C#
    namespace Company.Project1; class Class1 { }

    と書けるようになった。クラス定義をトップレベルに持ってこれるのでネストが1つ減る。地味だが良い改善。

    Visual Studio 2022 の変更点

    最後に Visual Studio 2022。

  • IntelliCode の利用
  • デバッガ―の改善
  • ホットリロードの利用
  • クロスプラットフォーム(Windows/Linux) リモートテスティング (プレビュー)
  • Web Forms に対する Webライブプレビュー機能
  • 64ビット版のリリース
  • IntelliCode やホットリロードなど幾つかは Visual Studio 2019 でも使える機能で、Visual Studio 2022 独自みたいなものが相対的に少なくなっている。

    ホットリロードについては、.NET SDK のリポジトリから機能削除され Visual Studio 2019 で利用できなくしたら大炎上して最終的に 復活したopen_in_new 、という事件もあり VS2022 のリリースは水が差された感じは否めない。

    ※ちなみに、Hot Reload の削除・復活の話は かなりバズってたが、日本語の記事は ZdNet の 翻訳記事open_in_new 1件しか見当たらない。