本文へスキップ

.NET 11がC# 15のunion型を搭載、.NET 8と.NET 9はサポート終了

.NET 11(ドットネット11)とC# 15は11月10日に公開され、同じ日に.NET 8と9のサポートが終わった。実地テストでは、unionのケース漏れは警告だけでビルドが通り、実行時にクラッシュした。

著者

5 分で読めます

英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

Microsoftの.NETと.NET Coreのサポートポリシーページのスクリーンショット。サポート中のバージョンとして.NET 11(STS)と.NET 10(LTS)が並び、どちらも2028年11月14日までサポートされると表示されている。

数字で見る

.NET 8と.NET 9のサポート終了日
2026年11月10日
.NET 10と.NET 11のサポート終了日
2028年11月14日
Standard Term Supportリリースである.NET 11のサポート期間
2年

Microsoftは2026年11月10日、C# 15と新しいunion型(共用体型)を含む.NET 11をリリースした。Microsoftのサポートポリシーページによると、同じ日に.NET 8と.NET 9のサポートが終了した。Microsoftの.NETは、アプリを作るための無料のオープンソース基盤で、C#はその主要言語だ。今も.NET 8や9で動くアプリには、Microsoftからのセキュリティ修正がもう届かない。

.NET Blogの発表は、11月10日から13日まで開かれる.NET Conf 2026の初日に出た。Thurrott.comによると、.NET 11はStandard Term Support(STS)リリースで、サポート期間は2年だ。.NET 10のようなLong Term Support(LTS)リリースは3年サポートされる。

.NET 11とC# 15の中身

目玉は言語だ。C# 15は.NET 11を対象とするすべてのプロジェクトで既定となるため、追加の設定はいらない。Microsoftの「C# 15の新機能」ページには、次の機能が載っている。

機能何をするかプレビュー用フラグが必要か
Union型決められた型の一覧のうち、ちょうど1つを保持する型不要
Closed階層サブクラスをコンパイラーがすべて把握している基底クラス不要
コレクション式の引数容量などのコンストラクター設定を[...]の中で渡す不要
拡張インデクサー自分で書いていない型に[index]アクセスを追加する不要
ラベル付きbreakとcontinue内側のループから外側のループを抜ける不要
古いランタイムでの静的インターフェイスメンバー新しいランタイムの支援なしで、インターフェイスに普通の静的メソッドを置ける不要
メモリ安全性のルールunsafeなポインターコード向けの新ルール必要

Unionは、値がいくつかの形のどれかになる場合に役立つ。たとえば支払いが、カード、銀行振込、クーポンのいずれかである場合だ。コンパイラーは、コードがすべての形を扱っているかを確認する。

それ以外はツールとライブラリの改良だ。.NET Blogは、ビルドを速くするネイティブのコマンドラインホストと、常駐するMSBuildサーバーを挙げている。ASP.NET CoreでのOpenAPI 3.2対応や、MCPを使うAIの構成要素も載っている。MCPはModel Context Protocolの略で、AIモデルをツールにつなぐ仕組みだ。スマートフォンとデスクトップ向けのアプリフレームワークである.NET MAUIは、既定でCoreCLRで動くようになった。Microsoftは「数百のランタイム最適化」をうたうが、発表に数値はない。

サポート中の.NETバージョン

下の表は、2026年11月10日に更新されたMicrosoftのサポートポリシーページによる。このページによると、偶数番号のリリースはLTS、奇数番号はSTSだ。

バージョン種類リリース日最新パッチサポート終了
.NET 11STS2026年11月10日11.0.02028年11月14日
.NET 10LTS2025年11月11日10.0.152028年11月14日
.NET 9STS2024年11月12日9.0.232026年11月10日
.NET 8LTS2023年11月14日8.0.342026年11月10日

目を引く点が1つある。.NET 11と.NET 10は、どちらも2028年11月14日の同じ日にサポートが終わる。つまりSTSリリースを選んでも、LTSより寿命が短くなるわけではない。Microsoftのポリシーは、サポート対象は各バージョンの最新パッチだけで、各バージョンの最後の6か月はセキュリティ修正のみになるとも定めている。

Tech AI Wireのテスト: .NET 11 SDKでC# 15のunionを試す

macOS 26で行ったTech AI Wireのテストでは、公式のmcr.microsoft.com/dotnet/sdk:11.0コンテナイメージ(Ubuntu 26.04.1、arm64)がSDK 11.0.100と表示した。新しいコンソールプロジェクトはnet11.0を対象とし、言語の設定はなかった。MicrosoftのC# 15のサンプルは、書かれたとおりにコンパイルされ、動いた。ラベル付きbreakには小さなグリッドを追加した。

Pet pet = new Dog("Rex");
string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

public union Pet(Cat, Dog, Bird);

dotnet runの初回実行は、ビルドを含めて2.6秒だった。ほかの機能も動いた。大文字と小文字を区別しない比較子で作ったHashSetは、"Hello"、"HELLO"、"hello"のうち1つだけを残した。ラベル付きbreakは、2つのループを一度に抜けた。

次に、テストではswitchからBirdの行を消した。それでもビルドは成功した。表示されたのは警告CS8509で、文面は "The switch expression does not handle all possible values of its input type (it is not exhaustive). For example, the pattern 'Bird' is not covered." だ。switch式が入力型のすべての値を扱っておらず、たとえば'Bird'が漏れている、という意味になる。その後プログラムにBirdが渡されると、SwitchExpressionExceptionで終了コード134を出してクラッシュした。

直すには設定1つで足りた。-p:WarningsAsErrors=CS8509を付けると、同じビルドがエラーCS8509と終了コード1で失敗した。つまり安全チェックはあるが、既定では警告にすぎない。

開発者にとっての意味

今週注意すべきことは2つある。古いバージョンと、新しい習慣だ。

  • .NET 8と.NET 9から移行する。 どちらも11月10日でパッチが止まった。Microsoftが載せる最後のバージョンは8.0.34と9.0.23だ。今後見つかるセキュリティ上の欠陥は、これらでは塞がれない。
  • 10か11かは、サポート期間ではなく機能で選ぶ。 どちらも2028年11月14日までサポートされる。.NET 11ならC# 15が使える。.NET 8を使うチームにとっては、.NET 10のほうが小さな移行で済む。
  • unionを使う前にCS8509をエラーにする。 プロジェクトファイルに<WarningsAsErrors>CS8509</WarningsAsErrors>を追加する。テストのビルドを失敗させたのと同じ設定だ。これがないと、unionに新しいケースを足しても問題なくコンパイルされ、本番環境で初めて失敗しかねない。
  • メモリ安全性のルールには、今は手を出さない。 まだプレビュー用フラグが必要なので、今後のリリースまでに変わる可能性がある。
  • コンテナのビルドを更新する。 テストでは、sdk:11.0タグでSDK 11.0.100が取得された。Dockerfileではイメージをダイジェストで固定し、テストしたSDKで毎回ビルドされるようにしておきたい。

.NET 10を使うチームには期限がない。ブランチでC# 15を試し、頼っているライブラリが.NET 11に対応した時点で移ればよい。

出典

  1. Announcing .NET 11 - .NET Blog
  2. .NET and .NET Core Support Policy - Microsoft
  3. What's new in C# 15 - Microsoft Learn
  4. Microsoft Releases .NET 11 - Thurrott.com

関連記事

プログラミング

C++26がContractsを巡りISO投票で否決、GCC 16で検証

C++26はContracts(コントラクト、契約プログラミング)を巡ってISO投票で否決された。Tech AI WireはGCC 16.2で4つのモードをすべて試し、1つは10 / 0に警告なしで0を出力した。

A silver laptop with a blue-and-yellow Python logo sticker on its lid sits on a wooden developer desk beside a coffee mug, a monitor glowing out of focus behind it.
プログラミング

CPythonのJIT、PEP 836の取り下げで削除へ

PEP 836の作成者が2026年10月19日にこの提案を取り下げました。そのため、CPythonの実験的なJIT(ジャストインタイム)コンパイラは、mainブランチから削除される見通しです。

GitHub上のTypeScript 7.1 Betaのプレリリースページ。v7.1-betaのタグが付き、発表へのリンクと24個のダウンロードアセットが表示されています。
プログラミング

TypeScript 7.1 Betaが新しいAPIとコンテンツマッパーを追加

TypeScript(タイプスクリプト)7.1 Betaは、6.0から移れなかったツールのためにプログラムから使えるAPIを復活させ、.vueファイル向けのコンテンツマッパーを追加しました。型チェックは7.0より最大1.9倍速くなります。