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
1.7k
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
740
分解して理解する Aspire
nenonaninu
2
2.6k
Unsafe.BitCast のすゝめ。
nenonaninu
0
320
.NET 9 のパフォーマンス改善
nenonaninu
0
3.3k
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.6k
.NET 8 で既定で有効になった Dynamic PGO について
nenonaninu
3
11k
Other Decks in Technology
See All in Technology
BI ツールはもういらない?Amazon RedShift & MCP Server で試みる新しいデータ分析アプローチ
cdataj
0
160
小学4年生夏休みの自由研究「ぼくと Copilot エージェント」
taichinakamura
0
700
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
Geospatialの世界最前線を探る [2025年版]
dayjournal
1
220
オープンソースでどこまでできる?フォーマル検証チャレンジ
msyksphinz
0
140
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
750
技育祭2025【秋】 企業ピッチ/登壇資料(高橋 悟生)
hacobu
PRO
0
100
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
コンテキストエンジニアリング入門〜AI Coding Agent作りで学ぶ文脈設計〜
kworkdev
PRO
1
1k
AWS Top Engineer、浮いてませんか? / As an AWS Top Engineer, Are You Out of Place?
yuj1osm
2
210
JAZUG 15周年記念 × JAT「AI Agent開発者必見:"今"のOracle技術で拡張するAzure × OCIの共存アーキテクチャ」
shisyu_gaku
1
160
ガバメントクラウド(AWS)へのデータ移行戦略の立て方【虎の巻】 / 20251011 Mitsutosi Matsuo
shift_evolve
PRO
2
200
Featured
See All Featured
How GitHub (no longer) Works
holman
315
140k
Embracing the Ebb and Flow
colly
88
4.8k
It's Worth the Effort
3n
187
28k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
The Pragmatic Product Professional
lauravandoore
36
6.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
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