.NET7 期待の新機能
株式会社SAKURUG
エンジニアリングユニット
草場 友光
.NET ラボ 2022年8月
自己紹介
• 普段は主にWebFormsアプリの保守の
お仕事をしてます。
• 古めのシステムが多いので時代に取り
残されぬよう新しい技術を一つでも入
れるよう日々努力しています。
• 2022/08-2023 Microsoft MVP
(Developer Technologies)
• tomo_kusaba
宣伝
【VISION】ひとの可能性を開花させる企業であり続ける
VISIONに共感できる仲間募集中。
注意
• 個人の見解・解釈が多分に入っています。
• 見解の相違・事実誤認などありましたらご指摘ください。
• #dotnetlabでtweetすると右側に表示されます
今日の目的
• .NET7のGAも近づいてきました。
• .NET7ではどんな機能が実装されつつあるのか便利だと思われ
る機能を確認していきましょう
• なお、リリース前の段階ですので今回紹介した機能が.NET7に
盛り込まれるとは限りません
.NET7 新機能概略
• STSサポート (サポート期間はリリースから18ヶ月)
• .NETのレート制限
• gRPC-JSONトランスコーディング
• C#11
• ASP.NET Core 7
.NET 7リリースまでタイムライン予定
• .NET 6と同じ手順でリリースする
• 7/12 Preview 7 のmainを分岐。機能開発からバグ修正へ
• 8/15 RC1のmainを分岐予定。これ以降、mainは.NET 8ブラ
ンチになります。
• 9/13 RC2のリリースをブランチ予定
• 10月リリース
https://github.com/dotnet/runtime/issues/72297
STSサポート
• 従来Currentサポートと言われていたものを名称変更
• LTS(Long Term Support)に対してSTS(Short Term
Support)
• サポート期間はリリース日から18ヶ月間
STS
新しいBlazorのローディングページ
• ロードの進捗が見えるようになった
ホットリロードの改善
• Blazor WebAssemblyのデバッグ時にホットリロードできるよ
うになった
• .NET 6でもホットリロードできる
.NETのレート制限
• リソースにアクセスできる量を制
限する機能
• 一般的にシステムにおいて最も重
要なリソースはデータである
• この機能を利用することによって
てデータベースが不正な障害が発
生することなく安全に処理ができ
る
.NETのレート制限
• 4つのレート制限アルゴリズムが提供されている。
• 詳細はここでは解説しません
• 同時実行の制限
• トークンバケット制限
• 固定ウィンドウ制限
• スライディングウィンドウ制限
gRPC-JSONトランスコーディング
• gRPCはアプリ間の通信において高パフォーマンスのリアルタ
イムサービスを提供します。
• また、開発の生産性も強みです。
• JSONはテキストベースで人間が読めるのでデバッグが容易で
す。
• これらの解決のためにgRPCのサービスを作成しこれをREST
サービスに変換する機能が実装されました。
• gRPCでもRESTでも両方のサービスを呼び出すことができます。
公式HTTP3サポート
• .NET6ではプレビュー機能であった
• .NET7ではHTTP3が正式にサポート
EF Core7のパフォーマンス向上
• 1つの行を挿入する場合
var blog = new Blog { Name = "MyBlog" };
ctx.Blogs.Add(blog);
await ctx.SaveChangesAsync();
• このようなケースはトランザクションは不要
• このようなケース実際かなり多いのでは??
EF Core7のパフォーマンス向上
EF バージョン サーバー 時間
6.0 遠隔 8.418ms
7.0 遠隔 4.593ms
https://devblogs.microsoft.com/dotnet/announcing-ef-core-7-preview6-performance-
optimizations/
ms単位のパフォーマンス向上は大きい!
C#11
• 生文字列リテラル
• 3つ以上の連続した「“」を使うことで一切エスケープの必要のない
文字列リテラルをかけるようになった。
• エスケープ不要の文字列として逐語的文字列リテラル「@””」があ
たるが微妙に使い勝手が悪かった
生文字列リテラル1
• 3つ以上の連続した「“」を使うことで一切エスケープのいら
ない文字列リテラルが書ける
var moji = “””
“も書けるし”という文字として
¥とかももちろん書ける
¥¥とかいったら¥が2こ
{}も特別な解釈もされず
“””;
生文字列リテラル2
• 文字列中に連続した「“」を並べたいとき
• 3つ並べたければ4つの「“」でくくる!
生文字列リテラルで文字列補間
• $の個数と同じ数の{と}を書いた時だけ補間扱い。
• それ以下の個数の{と}を書いた時は普通の文字列として扱う
UTF-8リテラル
• 文字列リテラルの後ろにu8接尾辞をつけることでUTF-8な
byte列を文字列リテラルの形で書けるようになった。
• C#ではstringはUTF-16の形で持っているが今となっては、
UTF-8でやりとりすることが多くなった
• byte[]でUTF-8を扱うというのが.NETで一般的になった。
• 「true」などの文字列からbyte[]を生成できたら便利→UTF-8
リテラル
ReadOnlySpan<byte> s = “utf-8"u8;
新しいLINQ API
• Order()・OrderDescending()
var data = new[] { 2, 1, 3 };
// Instead of
// var sorted = data.OrderBy(e => e);
var sorted = data.Order();
// Instead of
// var sortedDescending = data.OrderByDescending(e => e);
var sortedDescending = data.OrderDescending();
まとめ
• Webアプリケーション目線で便利な機能が入った印象
参考文献
• Announcing .NET 7 Preview 6
• ASP.NET Core updates in .NET 7 Preview 6
• Announcing Entity Framework Core 7 Preview 6:
Performance Edition
• C#11の新機能
おしまい
おしまい

.NET 7期待の新機能