C# 14 の機能
C# 14 で実際にリリースされたもの、コード付きで。
このまとめは C# 14 の言語機能について私が書いたすべてを集めたものです: union 型、partial コンストラクターとイベント、extension 型、そして公式のリリースノートでは見落としやすい細かなエルゴノミクスの改善。
まず読むべき記事
C# 12 から移行する場合は、union 型と partial メンバーに関する記事から始めてください。この 2 つが最大の動作変更です。その他はすべて使い勝手の改善です。
このページについて
下のリストは、c# 14、csharp 14、c#、csharp、c# language のいずれかのタグが付いた記事を自動的に集めたものです。新しい順に並びます。
インデックス (138 件)
2026 / 05
- .NET 11 がデッドロックなしのプロセス出力キャプチャを追加
.NET 11 Preview 4 では、stdout と stderr を並行して読み取る新しい System.Diagnostics.Process API、起動とキャプチャを 1 行で行うヘルパー、そして KillOnParentExit が登場します。
- Fix: A possible object cycle was detected
System.Text.Json は逆参照を持つグラフのシリアライズを拒否します。ReferenceHandler.IgnoreCycles を設定するか、DTO に射影するか、逆向きポインタに [JsonIgnore] を付けてください。Preserve は最終手段です。
- 修正: EF Core マイグレーション中の SqlException: Timeout expired
マイグレーションはランタイムの CommandTimeout ではなくデザインタイムの DbContext を使用します。UseSqlServer(o => o.CommandTimeout(...))、接続文字列の Command Timeout、または Migrate() の前の Database.SetCommandTimeout でタイムアウトを設定してください。
- 修正: System.Text.Json.JsonException: The JSON value could not be converted
System.Text.Json は、受信した JSON トークンが対象の CLR 型と一致しない場合にこの例外をスローします。JSON を型に合わせるか、両者を橋渡しする JsonConverter または JsonSerializerOption を登録してください。
- 修正: System.Security.Cryptography.CryptographicException: Keyset does not exist
証明書の秘密鍵は、現在のプロセス ID が読めない別の Windows 鍵ファイルにあります。ACL を設定するか、MachineKeySet で PFX を読み込むか、EphemeralKeySet を使用してください。
- 修正: System.IO.FileNotFoundException: Could not load file or assembly が発行済みアプリで発生する
dotnet run では動くのに dotnet publish 後に失敗するケースです。原因はランタイムではなく発行フォルダーに DLL がないことです。deps.json、ProjectReference の Private、トリミングを確認してください。
- 修正: InvalidOperationException: Synchronous operations are disallowed
Stream.Read または Write の呼び出しを ReadAsync/WriteAsync に置き換えます。最終手段として、Kestrel、IIS、または IHttpBodyControlFeature 経由でリクエスト単位に AllowSynchronousIO を設定します。
- Fix: Blazor の RZ10012: Found markup element with unexpected name
Blazor の Razor コンパイラーは、PascalCase のタグに対応するコンポーネント型がスコープ内に見つからないと RZ10012 を出力します。_Imports.razor にコンポーネントの名前空間の @using を追加するか、コンポーネントに @namespace を追加してから再ビルドしてください。
- Fix: dotnet ef migrations add が 'Unable to create an object of type DbContext' で失敗する
EF Core の設計時ツールが DbContext のインスタンスを作成できませんでした。WebApplication.CreateBuilder で host を公開するか、正しい startup project を指定するか、IDesignTimeDbContextFactory を実装してください。
- Fix: MSB3027 Could not copy X to Y. Exceeded retry count of 10. Failed
MSB3027 は、MSBuild がファイルを 10 回コピーしようとしたが、別のプロセスが宛先を保持し続けていたことを意味します。ロック中のプロセスを終了するか、bin/obj をウイルス対策ソフトの除外に追加するか、CopyRetryCount を引き上げてください。
- Fix: The type or namespace name 'X' could not be found (プロジェクト参照を追加した直後)
新しい ProjectReference 直後の CS0246 は、ほぼ TargetFramework の不一致、古い obj/ フォルダ、または using ディレクティブの欠落のいずれかです。可能性の高い順に 5 つの対処を示します。
- 解決方法: Cannot consume scoped service 'X' from singleton 'Y'
ASP.NET Core のスコープ検証は、シングルトンが scoped 依存をプロセス全体にわたってキャプチャしてしまう場合にこの例外を投げます。コンシューマーを scoped にするか、IServiceScopeFactory を注入して必要に応じてスコープを作成してください。
- Fix: PlatformNotSupportedException: Operation is not supported on this platform (Native AOT)
Native AOT は JIT とインタープリターを取り除くため、reflection emit、式ツリーのコンパイル、未知の MakeGenericType は実行時に例外を投げます。IL3050 で呼び出しを特定し、ソースジェネレーターまたは事前生成された経路に置き換えます。
- 解決方法: Unable to resolve service for type 'X' while attempting to activate 'Y'
ASP.NET Core は、コンストラクターが登録されていない型、別のコンテナーに登録された型、またはホストのビルド後に追加された型を要求した場合にこの例外をスローします。3 つの具体的な修正でほぼすべてのケースをカバーします。
- 修正: TaskCanceledException: A task was canceled in HttpClient
HttpClient は 3 つの異なる理由で TaskCanceledException をスローします。タイムアウト、呼び出し元のキャンセル、または接続レベルの中断です。InnerException と CancellationToken.IsCancellationRequested で区別したうえで、正しい原因を修正してください。
- Fix: The JSON value could not be converted to System.DateTime
System.Text.Json は DateTime に ISO 8601 文字列のみ受け付けます。2026-05-08T14:00:00Z を送るか、JsonConverter を登録してフォーマットをパースしてください。空文字や Unix タイムスタンプも例外を投げます。
- Microsoft Agent Framework のワークフローが Durable Task スタックでプロセス再起動を生き延びるようになりました
Agent Framework のワークフローを Microsoft.Agents.AI.DurableTask で包むと、各エグゼキュータステップにチェックポイントが入ります。クラッシュ、再デプロイ、再起動でも、停止した場所から続行されます。
- 修正: The instance of entity type cannot be tracked because another instance with the same key value is already being tracked
EF Core 11 は、1 つの DbContext 内で 2 つのオブジェクトが主キーを共有するとこの例外をスローします。古い方をデタッチするか、その場で更新してください。読み取り側の AsNoTracking で衝突を防げます。
- 修正: A second operation was started on this context instance before a previous operation completed
EF Core は同じ DbContext 上で 2 つの await が並行に実行されるとこの例外をスローします。各呼び出しを順次 await するか、IDbContextFactory で並行する作業単位ごとに新しい DbContext を取得してください。
- Microsoft Agent Framework は FunctionApprovalRequestContent でリスクの高いツール呼び出しをゲートします
AIFunction を ApprovalRequiredAIFunction でラップすると、エージェントは実行の途中で停止して許可を求めます。C# でのリクエストとレスポンスのフローを解説します。
- 修正: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
.NET 11 で GetConnectionString が null を返す場合、appsettings.json にキーがない、ビルド出力にコピーされていない、または間違った環境ファイルが選ばれているかのいずれかです。3 つのチェックで 95% のケースが解決します。
- C# で T[] を ReadOnlyMemory<T> に変換する方法 (暗黙の演算子と明示的なコンストラクター)
.NET 11 で T[] を ReadOnlyMemory<T> にラップする 3 つの方法。暗黙の変換、明示的なコンストラクター、AsMemory()。それぞれが正解となる場面を解説します。
- .NET MAUI 11 でドラッグアンドドロップを実装する方法
.NET MAUI 11 でのエンドツーエンドのドラッグアンドドロップ:DragGestureRecognizer、DropGestureRecognizer、カスタム DataPackage ペイロード、AcceptedOperation、ジェスチャー位置、Android、iOS、Mac Catalyst、Windows のプラットフォーム別 PlatformArgs の落とし穴。
- .NET MAUI アプリでダークモードを正しくサポートする方法
.NET MAUI 11 におけるダークモードのエンドツーエンド: AppThemeBinding、SetAppThemeColor、RequestedTheme、UserAppTheme による上書きと永続化、RequestedThemeChanged イベント、そしてドキュメントが触れていない Info.plist と MainActivity のプラットフォーム固有の設定です。
- .NET 11 の Blazor WebAssembly で Tailwind CSS を使う方法
.NET 11 の Blazor WebAssembly アプリ向けに Tailwind CSS v4 を完全セットアップ。スタンドアロン CLI(Node 不要)、MSBuild ターゲット、Razor と CSS 分離ファイル向けの @source ディレクティブ、Native AOT でも壊れない publish パイプラインを解説します。
- EF Core 11 で N+1 クエリを検出する方法
EF Core 11 で N+1 クエリを見つけるための実践ガイドです。実際のコードで N+1 がどのように現れるか、ログ、診断インターセプター、OpenTelemetry を使ってどのように可視化するか、そしてホットパスがリグレッションしたときにビルドを壊すテストの書き方を解説します。
- ホットパス向けに EF Core でコンパイル済みクエリを使う方法
EF Core 11 のコンパイル済みクエリを実践的に解説します。EF.CompileAsyncQuery が本当に効くのはどんなときか、static フィールドのパターン、Include とトラッキングの落とし穴、追加の手間を払う価値があったと証明するためのビフォー/アフターのベンチマーク方法までを取り上げます。
- Windows と macOS だけで動く MAUI アプリの書き方 (モバイルなし)
.NET MAUI 11 プロジェクトから Android と iOS を取り除き、Windows と Mac Catalyst のみを出荷するための csproj 編集、workload コマンド、コードをきれいに保つマルチターゲティング。
- .NET 11 で Serilog と Seq による構造化ログを設定する方法
.NET 11 の ASP.NET Core アプリに Serilog 4.x と Seq 2025.2 を組み込むための完全ガイド。AddSerilog と UseSerilog の違い、二段階ブートストラップロギング、JSON 設定、エンリッチャー、リクエストロギング、OpenTelemetry トレース相関、API キー、そしてバッファリング、保持期間、シグナルレベルにまつわる本番環境での落とし穴を解説します。
- .NET 11と無料バックエンドでOpenTelemetryを使う方法
OTLPエクスポーターを使って.NET 11 ASP.NET CoreアプリケーションにOpenTelemetryのトレース、メトリクス、ログを組み込み、無料のセルフホストバックエンドへ送信します。ローカル開発にはstandalone Aspire Dashboard、セルフホストの本番環境にはJaegerとSigNoz、両方が必要なときはOpenTelemetry Collectorを使います。
- Testcontainers で本物の SQL Server に対する統合テストを書く方法
Testcontainers 4.11 と EF Core 11 を使い、ASP.NET Core の統合テストを本物の SQL Server 2022 に対して実行するための完全ガイドです。WebApplicationFactory の組み立て、IAsyncLifetime、DbContext 登録の差し替え、マイグレーションの適用、並列実行、Ryuk によるクリーンアップ、CI のはまりどころを解説します。
2026 / 04
- ASP.NET Core 11 でエンドポイントごとのレート制限を追加する方法
ASP.NET Core 11 におけるエンドポイントごとのレート制限の完全ガイド: fixed window と sliding window、token bucket、concurrency のいずれを選ぶか、RequireRateLimiting と [EnableRateLimiting] の違い、ユーザーや IP によるパーティショニング、OnRejected コールバック、そして誰もが踏む分散デプロイの落とし穴。
- .NET 11 で新しい System.Threading.Lock 型を使う方法
System.Threading.Lock は .NET 9 で登場し、.NET 11 と C# 14 では既定の同期プリミティブです。本ガイドでは lock(object) からの移行、EnterScope の動作、await・dynamic・ダウンレベル ターゲットにまつわる落とし穴を解説します。
- INotifyPropertyChanged 用のソースジェネレーターを書く方法
C# 14 と .NET 11 で INotifyPropertyChanged 用の独自のインクリメンタルなソースジェネレーターを構築する完全ガイドです。IIncrementalGenerator パイプライン、マーカー属性、partial class 出力、SetProperty パターン、AOT 対応を保つ方法を扱います。
- .NET でファイルの書き込みが完了したことを検知する方法
FileSystemWatcher は書き込み側が終わる前に Changed を発火します。.NET 11 でファイルが完全に書き込まれたことを知るための信頼できる 3 つのパターン: FileShare.None でオープンする、サイズの安定化でデバウンスする、そして問題そのものを回避するプロデューサー側の rename トリックです。
- サーバーと Blazor WebAssembly でバリデーションロジックを共有する方法
Blazor WebAssembly + ASP.NET Core アプリでバリデーションがずれていく最大の原因は、ルールを二度書きたくなる衝動です。本記事では .NET 11 で唯一スケールするレイアウトを示します。DTO とそのバリデーターを所有する Shared クラスライブラリを WASM クライアント (EditForm + DataAnnotationsValidator または Blazored.FluentValidation) とサーバー (minimal API のエンドポイントフィルターまたは MVC のモデルバインディング) の両方から参照し、サーバーから返ってきた ValidationProblemDetails を同じ EditContext に書き戻すラウンドトリップまでテスト済みで構築します。
- .NET 11 で SearchValues<T> を正しく使う方法
SearchValues<T> は IndexOfAny の 5 倍から 250 倍速いですが、ランタイムが期待する使い方をした場合に限ります。static としてキャッシュするルール、StringComparison の落とし穴、使うべきでない場面、そして誰も書いていない IndexOfAnyExcept による反転トリックを解説します。
- ASP.NET Core minimal API で Native AOT を使う方法
ASP.NET Core minimal API を Native AOT で出荷するための完全な .NET 11 ウォークスルー。PublishAot、CreateSlimBuilder、ソースジェネレーター製の JSON、AddControllers の制約、IL2026 / IL3050 警告、ライブラリプロジェクト向けの EnableRequestDelegateGenerator までを扱います。
- EF Core のモデルを最初のクエリの前にウォームアップする方法
EF Core は最初の DbContext アクセスで概念モデルを遅延構築するため、新しいプロセスでの最初のクエリは以後のどのクエリよりも数百ミリ秒遅くなります。本ガイドでは EF Core 11 で実用に足る三つの対策を扱います: Model に触れて接続を開く起動時の IHostedService、事前コンパイル済みモデルを出荷する dotnet ef dbcontext optimize、そして二つの対策を静かに無効化するキャッシュキーの落とし穴です。
- ASP.NET Core 11 でグローバル例外フィルターを追加する方法
ASP.NET Core 11 におけるグローバル例外処理の完全ガイド: なぜ IExceptionFilter は適切なツールではないのか、IExceptionHandler と UseExceptionHandler の連携、ProblemDetails レスポンス、複数ハンドラーチェーン、そして .NET 10 の診断抑制に関する破壊的変更について解説します。
- C# と .NET 11 でカスタム MCP サーバーを構築する方法
.NET 11 / C# 14 と公式 ModelContextProtocol 1.2 SDK を使って動作する Model Context Protocol サーバーを構築します。stdio トランスポート、[McpServerTool] 属性、依存性注入、stderr ログ出力の落とし穴、そして Claude Code、Claude Desktop、VS Code への登録までカバーします。
- 変更追跡を壊さずに DbContext をモックする方法
DbContext を直接モックすると ChangeTracker が静かに壊れます。だからこそ Microsoft はそれを推奨していません。本ガイドは EF Core 11 で実際に機能する 2 つのパターンを示します。接続を開いたまま保持して本物の ChangeTracker を動かす SQLite インメモリと、テストから EF Core を完全に追い出すリポジトリパターンです。
- HttpClient を使用するコードのユニットテストを書く方法
.NET 11 における HttpClient のテスト完全ガイド: HttpClient を直接モックすべきでない理由、スタブ HttpMessageHandler の書き方、IHttpClientFactory での primary handler の差し替え、Polly のリトライ検証、WireMock.Net という選択肢。
- C# で BlockingCollection の代わりに Channels を使う方法
System.Threading.Channels は .NET 11 における BlockingCollection の async ファーストの代替です。本ガイドでは、移行方法、bounded と unbounded の選び方、そしてデッドロックなしでバックプレッシャー、キャンセル、グレースフルシャットダウンを扱う方法を示します。
- System.Text.Json でカスタム JsonConverter を書く方法
.NET 11 における System.Text.Json 用のカスタム JsonConverter<T> の完全ガイドです。本当に必要となる場面、Utf8JsonReader を正しく進める方法、JsonConverterFactory によるジェネリクスの扱い、そして AOT に優しい実装方法までを解説します。
- .NET 11 で OpenAPI 仕様から強く型付けされたクライアントコードを生成する方法
Microsoft 公式の OpenAPI コードジェネレーターである Kiota を使って、任意の OpenAPI 仕様から fluent で強く型付けされた C# クライアントを生成します。インストール、生成、ASP.NET Core DI への組み込み、認証設定まで順を追って解説します。
- デッドロックせずに C# の長時間 Task をキャンセルする方法
.NET 11 における CancellationToken、CancelAsync、Task.WaitAsync、リンクトークンを使った協調的キャンセル。そしてクリーンなキャンセルをデッドロックに変えてしまうブロッキングパターン。
- EF Core 11 で IAsyncEnumerable<T> を使う方法
EF Core 11 のクエリは IAsyncEnumerable<T> を直接実装しています。await foreach で行をストリーミングする方法、ToListAsync より好むべきタイミング、接続・トラッキング・キャンセルまわりの落とし穴。
- EF Core 11 で record を正しく使う方法
C# の record と EF Core 11 を組み合わせる実践的なガイド。record がどこに収まり、どこで change tracking を壊すのか、そしてフレームワークと戦わずに value object、エンティティ、プロジェクションをモデリングする方法。
- C# で書く Node.js Addons: .NET Native AOT が C++ と node-gyp を置き換える
C# Dev Kit チームは C++ の Node.js addon を .NET 10 Native AOT ライブラリに入れ替え、N-API、UnmanagedCallersOnly、LibraryImport を使って Python や node-gyp なしで単一の .node ファイルを生成しました。
- C# 14 のメソッドから複数の値を返す方法
C# 14 のメソッドから複数の値を返す 7 つの方法: 名前付きタプル、out パラメーター、records、structs、デコンストラクション、そして自分が所有していない型に対する extension member のトリック。実測ベンチマークと意思決定マトリクスを最後に掲載しています。
- RyuJIT が .NET 11 Preview 3 でさらに bounds check を刈り込む: index-from-end と i + 定数
.NET 11 Preview 3 は RyuJIT に連続した index-from-end アクセスと i + 定数 < length パターンで冗長な bounds check を除去することを教え、タイトなループでの分岐圧力を削減します。
- RegexOptions.AnyNewLine が .NET 11 Preview 3 に着陸: \r? ハックなしの Unicode 対応アンカー
.NET 11 Preview 3 が RegexOptions.AnyNewLine を追加し、^、$、\Z、そして . が \r\n、NEL、LS、PS を含むあらゆる Unicode newline シーケンスを認識するようになり、\r\n は 1 つのアトミックなブレークとして扱われます。
- EF Core 11 が split query で不要な reference join を刈り込む
EF Core 11 Preview 3 は split query から冗長な to-one join を除去し、不要な ORDER BY キーを落とします。報告された一つのシナリオは 29% 速くなり、別のは 22% でした。今の SQL はこう見えます。
- .NET 11 Preview 3 の System.Text.Json が PascalCase とメンバー単位のネーミングポリシーを追加
.NET 11 Preview 3 は System.Text.Json のネーミングポリシーの話を完成させます: JsonNamingPolicy.PascalCase、メンバーレベルの [JsonNamingPolicy] 属性、そしてクリーンな DTO のための型レベルの [JsonIgnore] デフォルト。
- EF Core 11 が DetectChanges をスキップする GetEntriesForState を追加
EF Core 11 Preview 3 は ChangeTracker.GetEntriesForState を導入します。state フィルターされた enumerator で、SaveChanges interceptor や audit hook のようなホットパスで余分な DetectChanges パスを避けます。
- C# でマイクロ秒レイテンシのデータベースエンジンを構築する
Loic Baumann の Typhon プロジェクトは、ref struct、ハードウェア組み込み関数、ピン留めメモリを使って 1-2 マイクロ秒の ACID コミットを目指し、C# がシステムプログラミングレベルで競争できることを証明しています。
- C# 14 のユーザー定義複合代入演算子: 余分なアロケーションなしの in-place +=
C# 14 では +=、-=、*= などをレシーバーを in-place で変更する void インスタンスメソッドとしてオーバーロードでき、BigInteger 風バッファやテンソルのような大きな値ホルダーのアロケーションを削減します。
- Dapper のデフォルト nvarchar パラメータが SQL Server のインデックスを静かに殺すしくみ
Dapper を通じて送られる C# 文字列はデフォルトで nvarchar(4000) になり、SQL Server に暗黙変換と完全なインデックススキャンを強制します。DbType.AnsiString でこれを修正する方法を紹介します。
- .NET 11 が System.IO.Compression にネイティブな Zstandard 圧縮を追加
.NET 11 Preview 1 は ZstandardStream、ZstandardEncoder、ZstandardDecoder を System.IO.Compression に出荷し、サードパーティパッケージなしで高速なビルトイン zstd サポートを提供します。
- EF Core 11 で 1 つのコマンドでマイグレーションを作成して適用できる
dotnet ef database update コマンドが、マイグレーションを 1 つのステップでスキャフォールドして適用するための --add を受け入れるようになりました。仕組み、コンテナと .NET Aspire にとって重要な理由、注意点を紹介します。
- EF Core 11 が DiskANN インデックスでネイティブな SQL Server ベクトル検索を追加
EF Core 11 Preview 2 は SQL Server 2025 の VECTOR_SEARCH() と DiskANN ベクトルインデックスを LINQ から直接サポートします。インデックスのセットアップ、近似クエリの実行方法、EF Core 10 の VectorDistance アプローチからの変更点を紹介します。
- ReSharper が VS Code と Cursor に登場、非商用利用は無料
JetBrains は ReSharper を VS Code 拡張機能として、完全な C# 解析、リファクタリング、ユニットテストと共に出荷しました。Cursor や Google Antigravity でも動作し、OSS と学習には無料です。
- C# 15 の union 型がここに: 型ユニオンが .NET 11 Preview 2 で出荷
C# 15 は網羅的なパターンマッチングと暗黙の変換を伴う型ユニオン用の union キーワードを導入します。.NET 11 Preview 2 で今すぐ利用可能です。
- Microsoft Agent Framework 1.0: 純粋な C# で AI エージェントを構築
Microsoft Agent Framework が安定した API、マルチプロバイダーコネクター、マルチエージェントオーケストレーション、A2A/MCP 相互運用性で 1.0 に到達。.NET 10 上での実際の見え方を紹介します。
- .NET 11 Runtime Async がステートマシンを置き換え、よりクリーンなスタックトレースを実現
.NET 11 の Runtime Async は async/await の処理をコンパイラ生成のステートマシンからランタイム自体に移し、読みやすいスタックトレース、正しいブレークポイント、ヒープ割り当ての削減を実現します。
2026 / 02
- C# 14 の拡張メンバー: 拡張プロパティ、演算子、静的拡張
C# 14 は拡張メンバーを導入し、新しい extension キーワードを使って既存の型に拡張プロパティ、演算子、静的メンバーを追加できるようにします。
- C# 14 のアイデア: インターセプターで System.Text.Json のソース生成を自動的に感じられるようにできる
コミュニティの議論で、C# 14 のインターセプターを使って JsonSerializer の呼び出しを書き換え、生成された JsonSerializerContext を自動で利用させる案が提案されました。AOT に優しいソース生成を保ちつつ、呼び出し側をきれいに保ちます。
- C# 14 の null 条件代入: ?. と ?[] を左辺で使う
C# 14 は null 条件演算子を代入の左辺でも動作するように拡張し、プロパティやインデクサーを設定する際の冗長な null チェックを排除します。
- Polars.NET: LibraryImport に依存する .NET 10 向け Rust DataFrame エンジン
新しい Polars.NET プロジェクトが 2026 年 2 月 6 日のコミュニティ投稿の後にトレンドになっています。見出しはシンプルです。Rust Polars に支えられた .NET フレンドリーな DataFrame API で、安定した C ABI とオーバーヘッドを低く保つための LibraryImport ベースの interop を備えています。
2026 / 01
- WinUI 3 の "ローカル専用ノート" アプリは正しい意味で退屈: オフラインファースト、SQLite、キーボード優先
Miyanyedi Quick Note は WinUI 3 + SQLite のメモアプリで、オフラインファーストかつプライバシー重視です。「ローカル専用」が機能である理由と、.NET 8 のデスクトップアプリ向け最小 SQLite スニペットを紹介します。
- CV Shortlist: AI を組み込んだ .NET 10 の SaaS がオープンソース化、スタックは学ぶ価値あり
CV Shortlist は Azure Document Intelligence と OpenAI モデルを組み合わせたオープンソースの .NET 10 SaaS です。スタック、設定の規律、AI 連携の境界は学ぶ価値があります。
- ModularPipelines V3: CI パイプラインを C# で書き、ローカルでデバッグし、YAML のお守りをやめる
ModularPipelines V3 を使えば、CI パイプラインを YAML ではなく C# で書けます。dotnet run でローカル実行、コンパイル時の安全性、ブレークポイントでのデバッグが手に入ります。
- Microsoft `mcp`: .NET 10 上の C# から Model Context Protocol サーバーを配線する
microsoft/mcp を使って、.NET 10 上の C# で Model Context Protocol (MCP) サーバーを配線する方法。ツールの契約、入力バリデーション、認証、可観測性、そして本番運用を支えるパターンを扱います。
- C# 13: `params` 割り当ての終わり
C# 13 はついに params の背後にある隠れた配列割り当てを解消します。Span、ReadOnlySpan、List などのコレクション型と組み合わせて、ゼロ割り当ての可変長メソッドを使えるようになります。
- C# プロポーザル: 判別共用体
C# の判別共用体プロポーザルを概観します。union キーワード、網羅的なパターンマッチング、そしてこれが OneOf ライブラリやクラス階層をどう置き換えうるかを取り上げます。
2025 / 04
- C# 14: ラムダで修飾子付きパラメーターをシンプルに
C# 14 では、暗黙的に型付けされたラムダパラメーターに対して ref、out、in、scoped、ref readonly の各修飾子を使用できるようになり、パラメーターの型を明示的に宣言する必要がなくなります。
- C# 14 の partial コンストラクターとイベント
C# 14 ではインスタンスコンストラクターとイベントを partial メンバーとして宣言でき、定義をファイル間で分割することで、よりすっきりしたコード生成と関心の分離を実現できます。
- C# 14: 未バインドのジェネリック型に対する nameof のサポート
C# 14 では nameof 式が拡張され、List<> や Dictionary<,> などの未バインドのジェネリック型に対応し、ダミーの型引数が不要になりました。
- C# 14 における暗黙的な Span 変換: Span と ReadOnlySpan の第一級サポート
C# 14 では Span、ReadOnlySpan、配列、文字列の間で組み込みの暗黙的変換が追加され、より整然とした API、より優れた型推論、AsSpan() の手書き呼び出しの削減が可能になります。
- C# 14: field キーワードと field によって裏付けられたプロパティ
C# 14 はプロパティのアクセサー向けに文脈依存キーワード field を導入し、別途バッキングフィールドを宣言せずに自動プロパティへカスタムロジックを追加できるようにします。
2025 / 01
- .NET のパフォーマンス: ToList vs ToArray
.NET 9 は InlineArray を活用して ToArray のパフォーマンスを大幅に改善し、ToList より高速かつメモリ効率の良いものにします。.NET 8 と .NET 9 を比較したベンチマークを参照ください。
- C# 13: 認識される任意のコレクション型で params コレクションを使う
C# 13 では params 修飾子が配列を超えて Span、ReadOnlySpan、IEnumerable、その他のコレクション型をサポートするように拡張され、ボイラープレートが減って柔軟性が向上します。
- C# 13 への切り替え方
'Feature is not available in C# 12.0' を修正し、ターゲットフレームワークを変更するか .csproj ファイルで LangVersion を設定して、プロジェクトを C# 13 に切り替える方法。
2024 / 12
- C# 14.0 の新機能
field キーワード、拡張メンバー、null 条件付き代入、暗黙的な span 変換など、C# 14.0 のすべての新機能をまとめます。
- C# 言語のバージョン履歴
C# の進化により、モダンで高パフォーマンスな言語へと変貌を遂げました。本ガイドはあらゆる主要なマイルストーンを追跡します。初期 (C# 1.0 - 1.2)。C# は 2002 年に .NET Framework の主要言語として登場しました。Java に似ていましたが、Windows 開発に焦点を当てていました。バージョン 1.2 はその後すぐに小さな...
2023 / 11
- C# リストからランダムに項目を選ぶ
.NET 8 で導入された Random.GetItems を使うと、C# でリストからランダムに項目を選択できます。実用的な例とともに動作を解説します。
- MAUI: ライブラリ内でハンドラーを登録する方法
ビルダーパターンと MauiAppBuilder の拡張メソッドを使って、.NET MAUI ライブラリの内側からビューハンドラーやサービスを登録する方法を紹介します。
- エラー対処: 'Point' には事前定義されたサイズがないため、sizeof は unsafe コンテキストでしか使えない
unsafe コンテキスト外で sizeof を Point に対して使えない C# のエラーを解決します。unsafe コードを有効化する方法と、Marshal.SizeOf を使う方法の2つを紹介します。
- C# Unsafe Accessor を使ってプライベートプロパティのバッキングフィールドにアクセスする
.NET 8 の UnsafeAccessorAttribute を使って、C# のプライベート自動プロパティの自動生成されたバッキングフィールドにリフレクションなしでアクセスします。
- C# ZIP ファイルを Stream に書き出す
.NET 8 では、ZIP ファイルをディスクに書き込まずに Stream との間で直接作成・展開できる、新しい CreateFromDirectory と ExtractToDirectory のオーバーロードが追加されました。
- .NET 8 のパフォーマンス: GetGenericTypeDefinition が 10 倍高速に
.NET 8 と .NET 7 で GetGenericTypeDefinition をベンチマークすると、ほぼ 10 倍のパフォーマンス向上が見られます。BenchmarkDotNet によるベンチマークコードと結果を紹介します。
- .NET core でスクリーンショットを撮る方法
System.Windows.Forms を使って、.NET コンソールアプリケーションからデスクトップ全体のスクリーンショットを撮る方法を解説します。Windows 限定の方法で、すべてのディスプレイをカバーします。
- C# UnsafeAccessor で readonly フィールドを更新する方法
C# で UnsafeAccessor を使って readonly フィールドを更新する方法を解説します。リフレクションのパフォーマンスペナルティのない代替手段で、.NET 8 で利用できます。
- .NET 8 のパフォーマンス: UnsafeAccessor vs. リフレクション
.NET 8 で UnsafeAccessor とリフレクションをベンチマーク。従来のリフレクションと比べて、UnsafeAccessor がいかにオーバーヘッドゼロのパフォーマンスを実現しているかを見ていきます。
2023 / 10
- C# 機能を experimental としてマークする方法
C# 12 から、新しい ExperimentalAttribute を使って型、メソッド、プロパティ、アセンブリを experimental としてマークできるようになりました。diagnosticId、pragma タグ、UrlFormat と組み合わせた使い方を紹介します。
- C# ref readonly パラメーター
C# の ref readonly 修飾子は、読み取り専用の参照を渡すより透明性の高い方法を提供します。in 修飾子に対して、より厳しい制約と呼び出し側からの見えやすさをどう改善するかを解説します。
- C# 配列をシャッフルするには?
C# で配列をシャッフルするいちばん簡単な方法は、.NET 8 で導入された Random.Shuffle を使うことです。配列にも Span にも、in-place で動作します。
- C# NullReferenceException とは何で、どう直すか?
C# で NullReferenceException が発生する原因、デバッグの仕方、null チェックや null 条件演算子、null 許容参照型を使った防止方法を解説します。
- 既存の JsonSerializerOptions に TypeInfoResolver を追加・削除する
.NET 8 で追加された TypeInfoResolverChain プロパティを使って、既存の JsonSerializerOptions に TypeInfoResolver を追加したり、そこから削除したりする方法を解説します。
- C# 12 Interceptors
.NET 8 のコンパイラーに導入された実験的機能、C# 12 の interceptors を解説します。InterceptsLocation 属性を使ってコンパイル時にメソッド呼び出しを差し替える方法を紹介します。
2023 / 09
- Implementation type Data.AppDbContext can't be converted to service type Microsoft.AspNetCore.Identity.IUserStore
AppDbContext を IUserStore に変換できないという ASP.NET Core Identity のエラーを、identity の設定に AddEntityFrameworkStores を追加して解消する方法を解説します。
- .NET 8 インターフェース階層のプロパティをシリアライズする
.NET 8 ではインターフェース階層からのプロパティのシリアライズに対応し、宣言された変数の型に応じて、階層内のすべてのインターフェースのすべてのプロパティを含められるようになりました。
- .NET 8 非公開プロパティへのデシリアライズ
.NET 8 で、JsonInclude 属性とパラメーター付きコンストラクターを使って、JSON を非公開プロパティにデシリアライズする方法を解説します。
- .NET 8 native AOT で JsonStringEnumConverter を使う方法
.NET 8 で追加された JsonStringEnumConverter<TEnum> を使って、System.Text.Json で native AOT 対応の enum シリアライズを行う方法を解説します。
- The type or namespace name InterceptsLocationAttribute could not be found
C# interceptors の InterceptsLocationAttribute に関する CS0246 エラーを、自分で属性を定義することで解消する方法を解説します。
- .NET 8 JsonSerializerOptions を readonly としてマークする
.NET 8 で MakeReadOnly を使って JsonSerializerOptions のインスタンスを読み取り専用にする方法と、IsReadOnly プロパティでそれを確認する方法を解説します。
- .NET 8 Half、Int128、UInt128 のシリアライズ
.NET 8 の System.Text.Json は、Half、Int128、UInt128 という数値型のシリアライズに、組み込みで対応するようになりました。
- .NET 8 Memory<byte> は base64 としてシリアライズされる
.NET 8 から、Memory<byte> と ReadOnlyMemory<byte> は Base64 文字列としてシリアライズされます。Memory<int> など他の型は引き続き JSON 配列のままです。
- .NET 8 非公開メンバーを JSON シリアライズに含める
.NET 8 で JsonInclude 属性を使って、private、protected、internal なプロパティを JSON シリアライズに含める方法を解説します。
2023 / 08
- C# 12 インライン配列 (Inline arrays)
インライン配列を使うと、struct 型の中に固定サイズの配列を作成できます。インラインバッファーを持つそのような struct は、unsafe な固定サイズバッファーと同等のパフォーマンスを発揮します。インライン配列は主にランタイムチームや一部のライブラリ作者が、特定のシナリオでパフォーマンスを改善するために使うことを想定しています。多くの場合...
- C# 12 コレクション式 (Collection expressions)
C# 12 では、配列を作るための新しい簡潔な構文が導入されました。次のような形です。重要な点として、配列の型は明示的に指定する必要があるため、変数宣言に var は使えません。同様に、Span<int> を作りたい場合は次のようにできます。多次元配列 この簡潔な構文の利点は...
- C# プロセスの終了を待つには?
プロセスの終了を待つには WaitForExit メソッドが使えます。コードは同期的にプロセスの終了を待ち、その後で実行を再開します。例を見てみましょう。上のコードは新しい cmd.exe プロセスを開始し、timeout 5 コマンドを実行します。process.WaitForExit() の呼び出しによって、プログラムは...
- C# 12 任意の型に alias を付ける
C# 12 では using alias ディレクティブの制限が緩和され、名前付きの型だけでなく任意の型に alias を付けられるようになりました。これにより、タプル、ポインター、配列型、ジェネリック型などにも alias を付けられます。タプルの完全な構造的な形を書く代わりに、短くて分かりやすい alias を...
- C# に With...End With 文に相当する構文はありますか?
VB の With...End With 文は、単一のオブジェクトを繰り返し参照する一連の文を、メンバーアクセスのための簡略化された構文で実行できます。C# に相当する構文はあるでしょうか。ありません。最も近いのはオブジェクト初期化子ですが、これは新しいオブジェクトのインスタンス化にしか使えません。
2023 / 07
- C# 12 - プライマリコンストラクター
C# 12 から、クラスや構造体内でプライマリコンストラクターを定義できるようになりました。パラメーターは型名の直後の括弧に置かれます。これらのパラメーターは広いスコープを持ち、プロパティやフィールドの初期化、メソッドやローカル関数内の変数、ベースコンストラクターへの引き渡しに利用できます。
2023 / 06
- C# でプログラミングを始める方法
Visual Studio のセットアップから、最初のプログラムを書くこと、学習リソースを見つけることまで、C# プログラミングを始めるための初心者向けガイドです。
- C# 12 への切り替え方法
ターゲットフレームワークを .NET 8 に更新するか、.csproj ファイルで LangVersion を設定して、C# 12 の言語バージョンエラーを解決します。
- C# 12 の新機能
プライマリコンストラクター、ラムダ既定パラメーター、コレクション式、インライン配列など、C# 12 の新機能の概要です。
2023 / 05
- C# 12 - ラムダ式のパラメーターに既定値を指定
C# 12 では、メソッドやローカル関数と同じように、ラムダ式のパラメーターに既定値や params 配列を指定できます。
2023 / 03
- C# 11 - ジェネリック属性
C# 11 でジェネリック属性を定義して使用する方法と、型引数の制約や代表的なエラーメッセージについて学びます。
- C# 11 - file アクセス修飾子とファイルスコープの型
C# 11 の file 修飾子が、型のスコープを宣言されたファイルに限定し、ソースジェネレーターとの名前衝突を回避するのに役立つ仕組みを学びます。
- C# 11 - 補間付きの raw 文字列リテラル
C# 11 で補間付きの raw 文字列リテラルを使う方法を、波かっこのエスケープ、複数の $ 文字、条件演算子を含めて学びます。
- C# 11 の raw 文字列リテラル (三重引用符構文)
C# 11 の raw 文字列リテラル (三重引用符構文 `"""`) を使い、エスケープシーケンスなしで空白、改行、引用符を埋め込みます。ルールと例を紹介します。
- C# 11 への切り替え方法
ターゲットフレームワークを変更するか、.csproj ファイルで LangVersion を設定して C# 11 に切り替え、'Feature is not available in C# 10.0' エラーを解消します。
- C# null のときに例外をスローする: ArgumentNullException.ThrowIfNull (.NET 6+)
.NET 6+ では ArgumentNullException.ThrowIfNull で null チェックを簡潔に記述できます。古いフレームワークでは C# 7+ の throw 式を使用してください。
2020 / 11
- .NET Core で Embedded Resource の Stream を取得する
リソース名の構成を理解し、GetManifestResourceStream を使って .NET Core で埋め込みリソースのストリームを取得する方法を学びます。
- Xamarin.Forms で appsettings.json を使う方法
Xamarin.Forms で appsettings.json 構成ファイルを使う方法を、ファイルをリソースとして埋め込み、IConfiguration オブジェクトを構築する形で解説します。
- ngrok を使って、モバイルクライアント向けにローカルの SignalR サービスを公開する方法
ngrok を使ってローカルの SignalR サービスを公開し、モバイルクライアントがネットワーク設定や SSL の回避策なしで接続できるようにします。
2020 / 05
- C# using var (using 宣言)
C# 8 の using 宣言 (`using var`) を使えば、入れ子の波かっこなしで IDisposable オブジェクトを破棄できます。構文、スコープのルール、`using` ブロックを選ぶべき場面を解説します。
2020 / 04
- C# 8.0 の null 合体代入 ??=
キャッシュや条件付き代入などの実用的な例を交えて、C# 8.0 の null 合体代入演算子 (??=) の動作を学びます。
2019 / 01
- Xamarin Forms で背景をアニメーションさせる
Xamarin Forms で重ねた BoxView に対する ScaleTo アニメーションを使い、滑らかに動く背景エフェクトを作ります。
2013 / 10
- PC が 1 trillion まで数えるのにどれくらいかかるか
PC が 1 trillion、さらにそれ以上まで数えるのにどれくらい時間がかかるかのベンチマーク。2023 年版の更新結果を含みます。
2013 / 06
- WP8 アプリに音声認識を追加する
Windows Phone toolkit の SpeechTextBox コントロールを使って、Windows Phone 8 アプリに音声認識を追加します。
- ScheduledTaskAgent を使って live tiles を定期的に更新する
ScheduledTaskAgent を使い、RSS フィードから Windows Phone の live tiles を定期的に更新する方法を解説します。
2013 / 05
- Windows Phone 7 アプリに wide tiles を作る
MangoPollo ライブラリと 1 つのコード片で、Windows Phone 7 と 8 の両方の wide live tiles を作成する方法を解説します。
2012 / 01
- C#: Hex を Color に変換する
Hex のカラーコード (RGB と ARGB の両形式) を Color オブジェクトに変換する C# の拡張メソッドです。
- code snippets を使って生産性を上げる
Visual Studio の code snippets が、短いエイリアスで再利用可能なコード片を挿入できる仕組みで、いかに生産性を上げてくれるかを解説します。