.NET 10 runtime と ASP.NET Core を標準化しているチームにとって、.NET 10.0.6 は「小さなパッチ」ではなく、バックエンド/API/Web workloads 全体のアップグレード判断に使うべき servicing checkpoint です。結論としては、.NET 10.0.x を本番利用している場合は、最新パッチへの更新を前提に、ランタイム、ASP.NET Core、SDK、コンテナ、IIS Hosting Bundle、認証まわりの回帰確認をまとめて行うべきです。
この記事では、2026年4月20日時点で runtime と ASP.NET Core の v10.0.6 リリースがそろった servicing wave を整理します。Microsoft は2026年4月14日の April 2026 servicing release として、.NET 10.0.6 にセキュリティ修正と非セキュリティ修正が含まれることを案内しており、ASP.NET Core 10.0.6、.NET 10.0.6、Runtime 10.0.6 の changelog も公開されています。runtime と ASP.NET Core の GitHub release tag は、それぞれ2026年4月20日に公開されています。(Microsoft for Developers)
ただし、servicing release は短期間で後続パッチが出ることがあります。2026年4月21日には .NET 10.0.7 の out-of-band security update が案内され、10.0.6 後に一部アプリケーションで復号失敗が報告されたこと、CVE-2026-40372 の修正が含まれることが説明されています。そのため実務では、「10.0.6 の変更点を検証観点として使い、最終的な導入先は公開時点の最新 10.0.x にする」と考えるのが安全です。(Microsoft for Developers)
.NET 10.0.6 servicing drop は何が起きた更新か
.NET 10.0.6 servicing drop は、新機能を大きく追加するメジャーアップデートではありません。主な意味は、.NET 10 runtime、ASP.NET Core、関連パッケージ、SDK、コンテナイメージ、Windows 向け Hosting Bundle を同じ 10.0.6 系にそろえる保守更新です。
.NET 10.0.6 の release notes では、10.0.6 runtime を含む SDK として 10.0.202 と 10.0.106 が示されています。また、SDK には対応する .NET Runtime が含まれるため、SDK を導入する開発環境では runtime や ASP.NET Core package を個別に入れる必要がないケースがあります。Docker images もこのリリース向けに更新されています。(GitHub)
| 観点 | .NET 10.0.6 で見るべきポイント | 実務での意味 |
|---|---|---|
| .NET runtime | セキュリティ修正、暗号化、メール、基盤ライブラリの挙動 | バックエンド API、バッチ、認証基盤、外部連携の回帰確認が必要 |
| ASP.NET Core | Blazor、JsonPatchDocument、IIS shutdown、WindowsHostingBundle などの修正 | Web アプリ、API、Blazor、IIS ホスティング環境で重点的に確認 |
| SDK / CI | 10.0.202 / 10.0.106 など、利用 SDK の整合性 | 開発者端末、CI、ビルドエージェントのバージョンずれを防ぐ |
| コンテナ | .NET Docker images の更新 | docker build --pull や base image digest の見直しが必要 |
| Windows / IIS | ASP.NET Core Runtime、Hosting Bundle、ASP.NET Core Module | IIS 配下のアプリはサーバー側の更新も忘れやすい |
標準化チームが .NET 10.0.6 をチェックポイントにすべき理由
.NET 10 は LTS ですが、LTS だから一度入れれば終わりではありません。Microsoft のサポートポリシーでは、サポートを受けるには公開済みの最新パッチを適用している必要があると説明されています。.NET 10 は LTS / Active support として扱われ、2026年4月14日時点のポリシー表では .NET 10 の end of support は 2028年11月14日と示されています。(Microsoft)
つまり、.NET 10 に標準化するチームほど、毎月の servicing release を「任意の更新」ではなく「運用ルーチン」に組み込む必要があります。特に backend developers や web platform teams は、次のような理由で 10.0.6 を単なるバージョン番号として扱うべきではありません。
| チームの状況 | なぜ重要か | まず取るべき行動 |
|---|---|---|
| .NET 10.0.x を本番利用中 | セキュリティ修正と非セキュリティ修正が累積される | 最新 10.0.x を対象にステージング検証を開始する |
| ASP.NET Core で認証を使っている | Cookie、Data Protection、トークン保護の不具合は本番影響が大きい | 既存 Cookie や保護済みトークンの復号テストを入れる |
| コンテナ運用している | ホスト OS の更新だけではコンテナ内 runtime は変わらない | base image を pull し直し、イメージを再ビルドする |
| self-contained publish を使っている | アプリに runtime が同梱されるため、サーバー更新だけでは反映されない | publish 環境を更新して成果物を作り直す |
| IIS / Windows Server で運用している | Hosting Bundle や ASP.NET Core Module の更新を見落としやすい | Web サーバー単位で導入状況を棚卸しする |
セキュリティ更新として見るべきポイント
.NET 10.0.6 の release notes では、このリリースに security fixes と non-security fixes が含まれると説明されています。関連する CVE として、CVE-2026-26171、CVE-2026-32203、CVE-2026-33116、CVE-2026-32178 などが示され、System.Security.Cryptography.Xml、EncryptedXml、System.Net.Mail まわりの説明も含まれています。(GitHub)
実務での判断基準は明確です。次のような機能を使っている場合は、通常の HTTP スモークテストだけでなく、該当機能の入力データを使った回帰確認を入れてください。
| 利用している機能 | 確認するテスト例 | 失敗時に起きやすい影響 |
|---|---|---|
| EncryptedXml / XML 暗号化 | 正常な XML、巨大な XML、不正な XML の処理 | 外部連携失敗、CPU/メモリ負荷増大、例外増加 |
| SAML / SOAP / 旧式 XML 連携 | 署名・暗号化された既存メッセージの検証 | ログイン連携や基幹連携の停止 |
| System.Net.Mail | 送信元、宛先、表示名、国際化ドメインを含むメール送信 | 通知メール、パスワード再設定メールの失敗 |
| ASP.NET Core 認証 | ログイン、ログアウト、Cookie 更新、CSRF 検証 | ログイン不能、セッション切れ、フォーム送信失敗 |
CVE の深刻度や影響範囲は MSRC の該当ページで最終確認すべきですが、アプリケーションチームの初動としては「自社アプリが該当 API を使っているか」「使っている場合は本番データに近い入力で再現テストがあるか」を確認することが重要です。
ASP.NET Core 10.0.6 で注目すべき修正領域
ASP.NET Core 10.0.6 の changelog では、Blazor の metadata comments、Newtonsoft JsonPatchDocument、Blazor template の migration ID、IIS shutdown hang、WindowsHostingBundle、trimming test などに関する修正や調整が並んでいます。すべての Web アプリに直接影響するとは限りませんが、該当機能を使っているチームは優先的に確認すべきです。(GitHub)
JsonPatchDocument を使う API は更新後の差分を確認する
JsonPatchDocument は、部分更新 API で使われやすい機能です。たとえば、ユーザー情報の一部だけを replace する、注文ステータスだけを変更する、といった PATCH エンドポイントで利用されます。
確認すべきテストは、正常系だけではありません。
| テスト対象 | 例 |
|---|---|
| 正常な patch | replace、add、remove が期待通り反映される |
| 不正な path | 存在しないプロパティを指定した場合に想定のエラーになる |
| 権限制御 | 更新してはいけないフィールドが変更されない |
| バリデーション | patch 適用後の model validation が動く |
| ログ・監査 | 変更前後の値が監査ログに残る |
特に、フロントエンドや外部クライアントが JSON Patch を直接送る API では、更新後に「一部のリクエストだけ 400/500 になる」形で問題が表面化しやすいです。
Blazor を使う場合は build と初期表示だけで終わらせない
Blazor 関連では、metadata comments やテンプレート、WASM template tests に関する修正が含まれています。Blazor Server、Blazor WebAssembly、SSR を組み合わせているアプリでは、次の確認を入れると安全です。
| 確認項目 | 見るべきポイント |
|---|---|
| 初回表示 | ルーティング、レイアウト、認証必須ページが開けるか |
| フォーム | validation、submit、エラーメッセージ表示が崩れないか |
| JavaScript interop | JS 連携、ファイルアップロード、DOM 操作が動くか |
| WASM | restore、publish、ブラウザ起動、キャッシュ更新が通るか |
| テンプレート由来の DB | migration ID や初期データの差分で起動エラーが出ないか |
IIS / Windows Hosting Bundle は Web サーバー単位で確認する
IIS を使って ASP.NET Core アプリをホストしている場合、アプリケーションコードだけでなく、サーバー側の Hosting Bundle と ASP.NET Core Module も更新対象になります。.NET 10.0.6 の release notes では、Windows Server 上で単体アプリをホストするための Hosting Bundle が ASP.NET Core Module を含むと説明されています。(GitHub)
IIS 環境では、次のようなテストをステージングで実施してください。
| 操作 | 確認内容 |
|---|---|
| App Pool recycle | 再起動後に初回リクエストが成功するか |
| graceful shutdown | デプロイ時や停止時にリクエストが中断されすぎないか |
| health check | ロードバランサーが復帰を正しく検知するか |
| Windows service 連携 | バックグラウンド処理が二重起動しないか |
| ログ出力 | Event Viewer、stdout log、Application Insights などで異常が増えないか |
Data Protection 利用アプリは 10.0.6 だけで判断しない
ASP.NET Core アプリで特に注意したいのが Data Protection です。GitHub issue #66335 では、10.0.5 以前で保護された secrets が 10.0.6 で unprotect できないという報告があり、実際の例外として System.Security.Cryptography.CryptographicException が示されています。(GitHub)
さらに Microsoft の .NET 10.0.7 out-of-band security update では、10.0.6 後に一部顧客から decryption failure が報告されたことが説明されています。(Microsoft for Developers)
このため、認証 Cookie、CSRF token、password reset token、メール確認 token、TempData、独自に保護した文字列を使うアプリでは、次の観点を必ずテストに入れてください。
| 確認項目 | 具体例 |
|---|---|
| 旧バージョンで発行された Cookie | 10.0.5 以前でログインした状態から、更新後もアクセスできるか |
| 既存トークン | パスワード再設定、メール確認、招待リンクが更新後も検証できるか |
| 新規発行トークン | 更新後に発行した token が再起動後も検証できるか |
| Key ring | ファイル共有、Blob Storage、Redis などの key ring 保存先が変わっていないか |
| ロールバック | 更新後に発行された Cookie や token を戻し先バージョンで扱えるか |
本番判断としては、10.0.6 に固定して導入するのではなく、10.0.7 または公開時点の最新 10.0.x をターゲットにしてください。10.0.6 は「何を検証すべきか」を整理するためのチェックポイントとして使うのが現実的です。
アップグレード前に確認するバージョン棚卸し
.NET の更新で失敗しやすいのは、アプリケーション、開発環境、CI、コンテナ、本番サーバーで見ている runtime が違うことです。まずは、各環境で次のコマンドを実行し、結果を表にまとめてください。
dotnet --info
dotnet --list-sdks
dotnet --list-runtimes
dotnet --version
dotnet --version は主に SDK バージョン確認に使います。runtime の確認には dotnet --info や dotnet --list-runtimes を合わせて使うのが安全です。
| 環境 | 確認するもの | 見るべきポイント |
|---|---|---|
| 開発者端末 | SDK、runtime、global.json | ローカルだけ古い SDK に固定されていないか |
| CI / build agent | SDK、NuGet restore、publish output | build image が古くないか |
| ステージング | runtime、ASP.NET Core Runtime、Hosting Bundle | 本番と同じ構成か |
| 本番 VM | runtime、Hosting Bundle、OS patch | 更新対象サーバーの漏れがないか |
| コンテナ | base image、image digest、runtime inside container | 古い image を再利用していないか |
| self-contained app | publish output に含まれる runtime | サーバー更新だけで満足していないか |
global.json と SDK 固定の注意点
CI で再現性を保つために global.json を使うのは有効です。ただし、global.json は runtime のバージョン指定ではなく、.NET CLI が使う SDK バージョンを選ぶための仕組みです。Microsoft Learn では、SDK バージョンの選択はプロジェクトが対象とする runtime version の指定とは独立していると説明されています。(Microsoft Learn)
また、global.json の version には 10.0 や 10.0.x のような指定は使えません。完全な SDK バージョン番号が必要で、ワイルドカードやバージョン範囲もサポートされません。(Microsoft Learn)
標準化チームでは、次のような方針に分けると管理しやすくなります。
| 方針 | 例 | 向いているケース |
|---|---|---|
| 完全固定 | 特定の SDK だけを使う | リリース再現性を最優先する製品チーム |
| latestPatch | 同一 feature band 内の最新パッチを許可 | セキュリティ更新を早く取り込みたい CI |
| latestFeature | 同じ major/minor 内で新しい feature band を許可 | 開発速度を重視しつつ .NET 10 内に収めたいチーム |
| disable | 完全一致以外を拒否 | 一時的な検証や不具合切り分け |
runtime 側の roll-forward にも注意が必要です。Microsoft Learn では、patch version roll-forward は自動で行われ、アプリは対象 major/minor の最新インストール済みパッチを使うと説明されています。framework-dependent deployment では、実行環境で利用可能な最新の .NET security patch に自動的に roll forward します。(Microsoft Learn)
一方で、RollForward を Disable にする設定は、最新パッチへ roll forward する機能を無効にするため、一般利用には推奨されず、テスト用途向けと説明されています。(Microsoft Learn)
バックエンドと Web workloads 向けアップグレード手順
.NET 10 runtime and ASP.NET Core を同時に運用するチームでは、アップグレードを「SDK を入れ替える作業」だけにしないことが重要です。次の順序で進めると、影響範囲を見落としにくくなります。
| 手順 | 作業 | 完了条件 |
|---|---|---|
| 現状把握 | dotnet --info、runtime、SDK、container image、Hosting Bundle を棚卸し | 開発、CI、ステージング、本番の差分が見えている |
| 導入先パッチ決定 | 10.0.6 ではなく、公開時点の最新 10.0.x を確認 | セキュリティパッチを含む最新リリースを対象にしている |
| SDK 更新 | 開発者端末と CI の SDK をそろえる | build log に想定 SDK が出ている |
| パッケージ更新 | Microsoft.AspNetCore.*、Microsoft.Extensions.*、認証系 package を確認 | lock file や central package management が更新済み |
| publish / image 再作成 | self-contained、container、IIS 用成果物を作り直す | runtime を含む成果物が最新になっている |
| ステージング検証 | 認証、API、Blazor、IIS、外部連携を確認 | 本番相当データで重大な回帰がない |
| 本番展開 | canary または段階展開を行う | エラー率、ログイン失敗率、CPU/メモリが安定している |
| 事後確認 | old token、old cookie、rollback plan を確認 | 24〜48時間程度の運用指標に異常がない |
回帰テストで優先すべきチェックリスト
すべてのテストを一から作り直す必要はありません。大切なのは、.NET 10.0.6 servicing drop の影響が出やすい場所を、既存テストに追加することです。
| 領域 | 優先テスト | 失敗時の典型的なサイン |
|---|---|---|
| 認証 / 認可 | Cookie login、OIDC callback、logout、role check | 401/403 増加、ログインループ |
| Data Protection | 旧バージョン発行 token の unprotect | Cookie 失効、招待リンク失敗 |
| Web API | GET/POST/PATCH/DELETE の主要シナリオ | 400/500 増加、model binding 失敗 |
| JSON Patch | add、replace、remove、不正 path | 一部 PATCH だけ失敗 |
| XML / 暗号化 | EncryptedXml、SAML、SOAP、署名付き XML | 外部 ID 連携や基幹連携の停止 |
| メール | パスワード再設定、通知、送信者名 | メール送信失敗、文字化け |
| Blazor | 初期表示、フォーム、JS interop、WASM publish | 画面崩れ、ブラウザエラー |
| IIS | App Pool recycle、shutdown、health check | デプロイ直後の 502/503 |
| コンテナ | 起動、liveness/readiness、runtime version | Pod 再起動、古い runtime の残存 |
| パフォーマンス | 起動時間、P95/P99 latency、GC、CPU | 目立つ遅延やリソース増加 |
特に Web platform teams は、「新規ログインできるか」だけでなく「更新前に発行された Cookie や token が更新後に扱えるか」を必ず見るべきです。ここを省略すると、ステージングでは成功しても、本番ユーザーだけがログイン不能になる可能性があります。
コンテナ運用で見落としやすいポイント
ASP.NET Core アプリをコンテナで運用している場合、サーバーに .NET runtime を入れ替えても、コンテナ内の runtime は更新されません。base image を更新し、アプリを再ビルドし、再デプロイする必要があります。
実務では次の流れを推奨します。
docker build --pull -t example-api:dotnet10-latest .
docker run --rm example-api:dotnet10-latest dotnet --info
FROM mcr.microsoft.com/dotnet/aspnet:10.0 のように floating tag を使っている場合は、build 時点で取得される image が変わる可能性があります。再現性を重視する本番環境では digest pinning を使い、セキュリティ更新時に意図的に digest を更新する運用にすると、監査しやすくなります。
一方で、digest を固定したまま放置すると、古い runtime を使い続ける原因になります。標準化チームは、月次の servicing release に合わせて「base image の digest 更新」「脆弱性スキャン」「ステージング deploy」「本番 deploy」を一つの運用手順にまとめておくべきです。
よくある失敗と回避策
| 失敗パターン | なぜ危険か | 回避策 |
|---|---|---|
dotnet --version だけ見て完了にする | SDK しか見ておらず runtime の差分を見落とす | dotnet --info と --list-runtimes も確認する |
| コンテナを再ビルドしない | 古い runtime が image 内に残る | docker build --pull と runtime 確認を CI に入れる |
| self-contained app を再 publish しない | アプリ同梱 runtime が古いままになる | publish 環境を更新して成果物を作り直す |
| Data Protection の旧 token を試さない | 本番ユーザーだけログイン不能になる | 旧バージョン発行 Cookie/token のテストを用意する |
| IIS Hosting Bundle を更新しない | サーバー側 module が古いままになる | Web サーバー単位で更新台帳を管理する |
global.json を古い SDK に固定したままにする | CI だけ古い SDK で build される | SDK 方針を決め、rollForward を明示する |
| patch release だから無検証で本番投入する | 認証、暗号化、外部連携は小さな変更でも影響が大きい | 影響領域だけでも重点回帰テストを実施する |
.NET 10 標準化チームの次のアクション
.NET 10.0.6 servicing drop は、.NET 10 runtime and ASP.NET Core を本番標準にするチームにとって、更新運用を整える良いタイミングです。やるべきことは、新機能の評価ではなく、最新パッチを安全に取り込むための仕組み作りです。
まず、開発、CI、ステージング、本番、コンテナ、IIS のバージョン棚卸しを行ってください。次に、10.0.6 ではなく公開時点の最新 10.0.x を導入対象に決め、Data Protection、認証、JsonPatch、Blazor、IIS、コンテナを中心に回帰テストを実施します。最後に、毎月の servicing release をセキュリティメンテナンスの定例作業として組み込み、SDK、runtime、ASP.NET Core Runtime、Hosting Bundle、container image を同じリリースサイクルで管理しましょう。
.NET 10 に標準化するメリットは、LTS の安定性だけではありません。パッチ更新を素早く、安全に、再現性高く適用できる運用を作ることで、バックエンドと Web platform の両方を長期的に保守しやすくなります。

コメント