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
1
2k
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
760
分解して理解する Aspire
nenonaninu
2
2.6k
Unsafe.BitCast のすゝめ。
nenonaninu
0
320
.NET 9 のパフォーマンス改善
nenonaninu
0
3.4k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.6k
Re:ゼロから始める Observability
nenonaninu
3
1.3k
Node-AI のリッチな WEB フロントエンドを支える技術
nenonaninu
3
1.7k
C# ではじめる OpenTelemetry
nenonaninu
0
5.7k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
11k
Other Decks in Technology
See All in Technology
激動の時代を爆速リチーミングで乗り越えろ
sansantech
PRO
1
250
Open Table Format (OTF) が必要になった背景とその機能 (2025.10.28)
simosako
3
640
GTC 2025 : 가속되고 있는 미래
inureyes
PRO
0
150
AI時代の発信活動 ~技術者として認知してもらうための発信法~ / 20251028 Masaki Okuda
shift_evolve
PRO
1
140
AIがコードを書いてくれるなら、新米エンジニアは何をする? / komekaigi2025
nkzn
25
17k
今のコンピュータ、AI にも Web にも 向いていないので 作り直そう!!
piacerex
0
600
触れるけど壊れないWordPressの作り方
masakawai
0
650
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
390
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
0
190
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
0
140
Playwrightで始めるUI自動テスト入門
devops_vtj
0
130
ストレージエンジニアの仕事と、近年の計算機について / 第58回 情報科学若手の会
pfn
PRO
4
960
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Balancing Empowerment & Direction
lara
5
710
Leading Effective Engineering Teams in the AI Era
addyosmani
8
720
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
The World Runs on Bad Software
bkeepers
PRO
72
11k
4 Signs Your Business is Dying
shpigford
186
22k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
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