Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C# 14 / .NET 10 の新機能 (RC 1 時点)
Search
neno
September 27, 2025
Technology
0
180
C# 14 / .NET 10 の新機能 (RC 1 時点)
.NET ラボ 2025/09/27 での発表資料
neno
September 27, 2025
Tweet
Share
More Decks by neno
See All by neno
Aspire をカスタマイズしよう & Aspire 9.2
nenonaninu
0
710
分解して理解する Aspire
nenonaninu
2
2.5k
Unsafe.BitCast のすゝめ。
nenonaninu
0
310
.NET 9 のパフォーマンス改善
nenonaninu
0
3.3k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.5k
Re:ゼロから始める Observability
nenonaninu
3
1.2k
Node-AI のリッチな WEB フロントエンドを支える技術
nenonaninu
3
1.7k
C# ではじめる OpenTelemetry
nenonaninu
0
5.5k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
11k
Other Decks in Technology
See All in Technology
そろそろ FormatStyle
treastrain
1
460
中間管理職をなくしたら何が起きたか 〜AI時代の組織変革と3つの失敗〜
staka121
PRO
2
280
意外と難しいGraphQLのスカラー型
uhyo
4
240
日経が挑戦するデータ民主化 ~ セルフサービス基盤がもたらす利点と苦悩~/nikkei-tech-talk-37
nikkei_engineer_recruiting
0
120
施策が均質化する採用市場で何を捨て 何を大事にしていくかを考える
akyun
0
180
低リスクで小学生男児を鍵っ子にする 俺の勉強会#4
inakaphper
0
190
kaigi_on_rails_2025_設計.pdf
nay3
3
880
CTFのためのKubernetes入門
kyohmizu
2
680
AIフレンドリーなコードベースを目指して/登壇資料(高橋 悟生)
hacobu
PRO
3
600
空間再現力の鍵、APMPを読み解く
ridwy
1
110
Optuna MCPサーバ開発 - AI Engineering Decoded #10
pfn
PRO
4
230
爆速でプロダクトをリリースしようと思ったらマイクロフロントエンドを選んでいた
kakehashi
PRO
4
980
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The World Runs on Bad Software
bkeepers
PRO
71
11k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
What's in a price? How to price your products and services
michaelherold
246
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Context Engineering - Making Every Token Count
addyosmani
3
110
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Transcript
C# 14 / .NET 10 の新機能 (RC 1 時点) .NET
ラボ 2025/09/27 何縫ねの。
自己紹介 1 • 所属: NTTドコモビジネス株式会社 イノベーションセンター • Microsoft MVP for
Developer Technologies (2024~) • .NET / Web Development • 趣味: C#, OSS, ドール, 一眼(α7 IV), シーシャ • 執心領域 • C# ⇔ TypeScript • SignalR • Observability / OpenTelemetry 何縫ねの。 nenoNaninu nenoMake ブログ https://blog.neno.dev その他 https://neno.dev
OSS 紹介 2 属性を付与するだけ Tapper • C# の型定義から TypeScript の型定義を生成する
.NET Tool/ library • JSON / MessagePack 対応! https://github.com/nenoNaninu/Tapper
OSS 紹介 3 • C# の SignalR Client を強く型付けするための Source
Generator TypedSignalR.Client Before After (using TypedSignalR.Client) こんな SignalR の Hub と Receiver の interface が あったとして… 脱文字列! 全てが強く型付け! https://github.com/nenoNaninu/TypedSignalR.Client
4 • TypeScript の SignalR Client を強く型付けするための .NET Tool /
library TypedSignalR.Client.TypeScript Before After (using TypedSignalR.Client.TypeScript) 脱文字列! 全てが強く型付け! TypeScript 用の型を C# から自動生成 MessagePack Hub Protocol 対応! https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript 属性を付与するだけ! OSS 紹介
5 • SignalR 使ったアプリを快適に開発するための GUI を自動生成する library • 2 step
で利用可能! • http pipeline に middleware の追加 • Hub と Receiver を定義してる interface に属性を付与 • JWT 認証 サポート • パラメータのユーザ定義型サポート • JSON で入力! SignalR 版 SwaggerUI TypedSignalR.Client.DevTools https://github.com/nenoNaninu/TypedSignalR.Client.DevTools OSS 紹介
AspNetCore.SignalR.OpenTelemetry OSS 紹介 6 https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry • トレースのための計装 • 最低限のログ •
接続時 • Transport 層の情報も出力(WebSocket 等) • メソッド呼び出し時 • HubName.MethodName の素朴なログ • メソッド呼び出し毎にログのスコープを追加 • HubName, MethodName, InvocationId を 振っているのでログの検索性が向上 • Duration • 切断時 • 切断時に例外が発生していれば例外もログに出力 Inspired by HttpLogging SignalR のメソッド呼び出し毎に スパンが切られるように https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry
OSS 紹介 7 https://github.com/nenoNaninu/AspireExtensions • Aspire の便利な hosting integration •
gRPC UI • Minio AspireExtensions
お品書き 8 • C# 14 の新機能 • .NET 10 の新しい
BCL • .NET 10 の新機能
• 以降 ROS は ReadOnlySpan を意味します 注意書き 9
C# 14 の新機能 10
C# 14 の新機能 11 Extension members
C# 14 の新機能 12 field keyword の追加 • ついにプロパティの中で field
keyword が使えるように 今まで private field を別途用意せざるを 得なかったものが不要に
C# 14 の新機能 13 field keyword の追加 • get/set accessor
のどちらか片方のみで使う事も可能
C# 14 の新機能 14 First-class Span Types • C# 7.2
で Span / ReadOnlySpan が導入された • 広く使われている • 特にパフォーマンスが重要な場合は必須 • C# 13 まで Span / ReadOnlySpan は BCL に存在する型でしかなかった • C# 14 から Span / ReadOnlySpan は C# が特別扱いする型 (first-class) に
C# 14 の新機能 15 First-class Span Types: 暗黙的型変換 • ①
T[] → Span<T> • T1 が T2 に対して covariance-convertible である場合 (共変変換可能) • ② T1[] → ROS<T2> • ③ Span<T1> → ROS<T2> • ④ ROS<T1> → ROS<T2> • ⑤ string → ROS<char> 厳密には extension の receiver に 暗黙的に変換される仕様も追加されている
C# 14 の新機能 16 First-class Span Types: 暗黙的型変換 • ちなみに。C#
13 でも T1[] → IEnumerable<T2> は問題なかった • 何故なら C# の配列は IList<T>, IReadOnlyList<T> が実装されているため C# 13 までは適切に intellisense を提示したい場合 大量のオバーロードを用意する必要があった C# 14 からは ROS 用だけ用意しておけば大体 OK
C# 14 の新機能 17 First-class Span Types: オーバーロード解決時における Span /
ReadOnlySpan の優先 • 優先順位的には ReadOnlySpan > Span > IEnumerable
C# 14 の新機能 18 nameof が unbound generic type をサポート
• C# 13 まで nameof は bound generic type のみサポート • C# 14 から nameof は unbound generic type もサポート
C# 14 の新機能 19 ラムダ式においてパラメータ修飾子を用いる際の記述の簡略化 • C# 13 までは ref,
ref readonly, scoped, out, in など パラメータ修飾子が用いられている場合、型を省略できなかった • C# 14 からは型を省略できるように
C# 14 の新機能 20 Partial events
C# 14 の新機能 21 Null-conditional assignment
C# 14 の新機能 22 複合代入演算子のオーバーロード • +=, -=, *=, /=,
%=, &=, |=, ^=, <<=, >>=, >>>= をオーバーロード可能に • 今まで + オペレータをオーバーロードした場合 += も使えたが (y += xは y = x + y と展開された) パフォーマンスの観点から 複合代入演算子も直接オーバーロード可能に
.NET 10 の新しい BCL 23
.NET 10 の新しい BCL 24 Guid.Parse/TryParse が ROS<byte> 対応
.NET 10 の新しい BCL 25 Console.Write/WriteLine が ROS<char> 対応
.NET 10 の新しい BCL 26 LINQ: LeftJoin / RightJoin
.NET 10 の新しい BCL 27 LINQ: Shuffle
.NET 10 の新しい BCL 28 LINQ: Sequence • INumber<T> が実装されていればなんでもイケる
• ちなみに Enumerable.Range は int 限定
.NET 10 の新しい BCL 29 LINQ: InfiniteSequence • こちらも Sequence
同様 INumber<T> が実装されていればなんでもOK
.NET 10 の新しい BCL 30 Async LINQ: IAsyncEnumerable に対する LINQ
実装 • 今まで IAsyncEnumerable で LINQ 使いたい場合は dotnet/reactive 配下にあった System.Linq.Async パッケージを nuget からとってくる必要があった • .NET 10 からはめでたく BCL 入り • パッケージ依存無しで Async LINQ を利用可能に!
.NET 10 の新しい BCL 31 MemoryExtensions の各種拡張メソッドに IEqualityComparer 受け取るオーバーロードが追加 •
Contains, ContainsAny, ContainsAnyExcept, SequenceCompareTo, IndexOf, IndexOfAny, IndexOfAnyExcept, LastIndexOf, LastIndexOfAnyExcept, StartsWith, EndsWith, Count, Replace IEqualityComparer を渡せる!
.NET 10 の新しい BCL 32 MemoryExtensions に CountAny/ReplaceAny/ReplaceAnyExcept が追加
.NET 10 の新しい BCL 33 System.Runtime.CompilerServices に InlineArray2~InlineArray16 が追加 •
実質的には collection expression が内部的に使うもの .NET 9 時点では上記は以下のように展開される 将来的にはこの手の コンパイラ生成の struct が減って アセンブリサイズが減る…ハズ? .NET 10 で追加
.NET 10 の新しい BCL 34 System.Threading に Volatile.ReadBarrier/WriteBarrier が追加 そもそも
ReadBarrier / WriteBarrier とは何ぞ? というのは以下の記事で。 【C#】マルチスレッド関連操作の詳説。 https://blog.neno.dev/entry/2021/12/23/124215
.NET 10 の新しい BCL 35 System.Net.ServerSentEvents が BCL 入り •
.NET 9 時点では BCL 入りせず package としてのみ提供されていた • https://speakerdeck.com/nenonaninu/net-9-noxin-ji-neng-rc-1-shi-dian?slide=46 • .NET 10 でついに BCL 入り。
.NET 10 の新しい BCL 36 System.Net.ServerSentEvents が BCL 入り •
ASP.NET Core も .NET 10 から SSE をサポート • https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore- 10.0?view=aspnetcore-10.0#support-for-server-sent-events-sse • AI 需要ですねぇ…
.NET 10 の新しい BCL 37 WebSocketStream.Create • WebSocket のメッセージの単位を気にせず ただ単に垂れ流す場合は
WebSocketStream.Create がお手軽
.NET 10 の新しい BCL 38 WebSocketStream.CreateReadableMessageStream WebSocketStream.CreateWritableMessageStream • WebSocket のメッセージ毎に
stream を確保するスタイル
.NET 10 の新しい BCL 39 HttpMethod.Query の追加 • なおまだ Query
method は標準化されていない • https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-safe-method-w-body-11
.NET 10 の新しい BCL 40 Numeric Ordering for String Comparison
.NET 10 の新しい BCL 41 TimeSpan.FromMilliseconds のちょっとしたオーバーロードの追加
.NET 10 の新しい BCL 42 OrderedDictionary.TryAdd / TryGetValue のオーバーロード追加 •
Index が取れるように
.NET 10 の新しい BCL 43 System.Text.Json: プロパティの重複の禁止
.NET 10 の新しい BCL 44 System.Text.Json: JsonSerializerOptions.Strict の追加
.NET 10 の新しい BCL 45 JsonMarshal.GetRawUtf8PropertyName
.NET 10 の新しい BCL 46 JsonSerializer.DeserializeAsync に PipeReader を受け取るオーバーロード追加
.NET 10 の新しい BCL 47 ActivitySource / Meter に Schema
URL を設定できるように • OpenTelemetry 側にトレース・メトリクスの attribute にスキーマを 指定可能な仕様があり、それに合わせた形。 • https://github.com/open-telemetry/opentelemetry-specification/tree/v1.49.0/specification/schemas Activity については以下の記事で。 【C#】ASP.NET Core と W3C Trace Context とお手軽ロギング。 https://blog.neno.dev/entry/2023/07/04/181843
.NET 10 の新しい BCL 48 FrozenDictionary.Create ImmutableDictionary.CreateRangeWithOverwrite • Span からダイレクトに
FrozenDictionary / ImmutableDictionary を 作成可能な API • 実質的には dictionary expressions のための API 追加 IEqualityComparer を渡す
.NET 10 の新しい BCL 49 Convert.FromHexString / TryToHexString の ROS<byte>
対応
.NET 10 の新機能 50
.NET 10 の新しい BCL 51 File based apps • 1
つの C# ファイルをスクリプトの如く実行できる • csproj 不要! https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/file-based-programs 従来の csproj に対する dotnet run 等と同じく コマンドライン引数渡すのに 「--」が必要
.NET 10 の新しい BCL 52 File based apps https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/file-based-programs shebang
が有効な環境なら
.NET 10 の新しい BCL 53 File based apps https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/file-based-programs パッケージの参照も可能
.NET 10 の新しい BCL 54 slnx 爆誕!さらば sln! • 全く人間に優しくなかった
sln だが、ついに新形式 slnx が登場 • slnx は大変人間に優しい • csproj が SDK スタイルになったのと同じで革命的に便利 • GA のアナウンスがまだ • しかし .NET 10 RC1 から slnx がデフォルトになった • .NET 10 の GA と同時に slnx も GA か…? sln (旧形式) slnx (新形式) ConsoleApp が 1 つだけ含まれている sln/slnx の比較 https://devblogs.microsoft.com/dotnet/introducing-slnx-support-dotnet-cli/ https://learn.microsoft.com/ja-jp/dotnet/core/compatibility/sdk/10.0/dotnet-new-sln-slnx-default
おわり
References 56 • https://github.com/dotnet/core • https://github.com/dotnet/roslyn • https://github.com/dotnet/runtime • https://github.com/dotnet/csharplang
• https://devblogs.microsoft.com/dotnet/introducing-slnx-support-dotnet-cli/ • https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-10.0 • https://learn.microsoft.com/ja-jp/dotnet/core/compatibility/sdk/10.0/dotnet-new- sln-slnx-default • https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-safe-method-w-body-11