Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C# 14 / .NET 10 の新機能 (RC 1 時点)
Search
neno
September 27, 2025
Technology
3.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C# 14 / .NET 10 の新機能 (RC 1 時点)
.NET ラボ 2025/09/27 での発表資料
ブログ:
C# 14 / .NET 10 の新機能 (RC 1 時点)
neno
September 27, 2025
More Decks by neno
See All by neno
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.7k
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
1.1k
.NET 10 のパフォーマンス改善
nenonaninu
3
7.8k
Aspire をカスタマイズしよう & Aspire 9.2
nenonaninu
0
1.1k
分解して理解する Aspire
nenonaninu
2
3.3k
Unsafe.BitCast のすゝめ。
nenonaninu
0
440
.NET 9 のパフォーマンス改善
nenonaninu
0
4k
C# 13 / .NET 9 の新機能 (RC 1 時点)
nenonaninu
1
2.9k
Re:ゼロから始める Observability
nenonaninu
4
1.6k
Other Decks in Technology
See All in Technology
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
1
180
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
120
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
110
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
390
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
290
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
2
580
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
1
490
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
730
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
100
品質と信頼性を地続きにする
grimoh
3
1.3k
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
130
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
320
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
770
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Balancing Empowerment & Direction
lara
6
1.3k
How to make the Groovebox
asonas
2
2.5k
The Invisible Side of Design
smashingmag
301
52k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
The agentic SEO stack - context over prompts
schlessera
0
940
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
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