Azure SDK documentation update解説:http-client-csharp 1.0.0-alpha.20260504.2で確認すべき変更点

Azure SDK documentation updateで示された今回の変更は、通常のアプリ開発者がすぐにコードを書き換える更新ではなく、TypeSpecからAzure SDK for .NETの生成コードを作るチームが確認すべき、C#クライアント生成系の更新です。特に、@azure-typespec/http-client-csharpを使ってSDKを再生成している場合、If-MatchやIf-None-Matchなどの条件付きリクエストヘッダーとAzure.Core.eTagの扱いを確認する必要があります。

今回の要点は、@azure-typespec/http-client-csharpの参照が prerelease 1.0.0-alpha.20260504.2 に更新され、Azure.Core.eTagを使う生成済みRestClientで不正な.Value参照が出る問題に対応した点です。GitHub上では、関連するPR #58950は「Generated by branded – http-client-csharp build 20260504.2」とされ、PR #58935をトリガーとして生成された更新であることが確認できます。なお、PR #58950自体はClosedであり、実装上の修正はPR #58935側でマージされています。(GitHub)

目次

Azure SDK documentation updateで何が変わったのか

今回のAzure SDK documentation updateで注目すべき変更は、azure-sdk-for-netリポジトリ内のC#向けTypeSpecエミッター構成です。ファイル差分では、eng/azure-typespec-http-client-csharp-emitter-package.jsonにおいて、@azure-typespec/http-client-csharpの参照が以前の1.0.0-alpha.20260428.2から、1.0.0-alpha.20260504.2のtarball参照へ変更されています。あわせて、@azure-tools/typespec-client-generator-coreも0.67.3から0.67.4へ更新されています。(GitHub)

この更新は、単なるドキュメント文言の修正ではありません。TypeSpecからC#のAzure SDKクライアントを生成する際の出力に影響する、コード生成基盤の更新です。

変更点の整理

項目変更内容確認すべき人
@azure-typespec/http-client-csharpprerelease 1.0.0-alpha.20260504.2へ更新TypeSpecから.NET SDKを生成しているチーム
@azure-tools/typespec-client-generator-core0.67.4へ更新生成ツールの依存関係を管理する担当者
MatchConditionsHeadersVisitorETag条件付きヘッダーの生成処理を修正C#生成コードのレビュー担当者
生成済みSDKコード複数サービスのGenerated配下に差分Azure SDK for .NETのサービス別メンテナー
回帰テストIf-Match / If-None-MatchとAzure.Core.eTagのケースを追加CI・品質保証担当者

背景にある問題:Azure.Core.eTagで不正なC#コードが生成されるケース

今回の更新で重要なのは、Azure.Core.eTagスカラーを使う条件付きヘッダーの生成です。関連Issueでは、If-MatchやIf-None-MatchヘッダーにAzure.Core.eTagを使うと、生成されたRestClient内で次のような不正なコードが出る問題が報告されていました。(GitHub)

request.Headers.Add("If-Match", TypeFormatters.ConvertToString(ifMatch).Value);

このコードは、TypeFormatters.ConvertToString(ifMatch)が文字列を返すにもかかわらず、その後ろに.Valueを付けているため、C#コンパイル時にCS1061が発生します。Issueでは、stringにはValueの定義がないというエラーが明記されています。(GitHub)

修正後の意図は、ラップされた文字列式ではなく、変換後のETag?パラメーター側から.Valueを参照することです。PR #58935の説明では、出力が次のように整理されるとされています。(GitHub)

request.Headers.Add("If-Match", ifMatch.Value);

この差は小さく見えますが、SDK生成では大きな意味があります。生成コードがコンパイルできなければ、SDKのビルド、テスト、リリースパイプラインが止まるためです。

誰が対応すべきか

今回のAzure SDK documentation updateは、すべてのAzure利用者に影響する更新ではありません。対応優先度が高いのは、次のようなチームです。

対応が必要な可能性が高いケース

  • TypeSpecからAzure SDK for .NETを生成している
  • @azure-typespec/http-client-csharpを使っている
  • tsp-location.yamlやエミッター用package.jsonを管理している
  • If-Match、If-None-Match、ETag、条件付き更新、楽観的同時実行制御を扱うAPIを持っている
  • 生成済みコードでCS1061や.Value関連のコンパイルエラーに遭遇している
  • sdk/**/src/Generated配下の差分レビューを担当している

すぐに対応しなくてもよいケース

利用状況対応要否
NuGetで公開済みのAzure SDKだけをアプリから利用している原則として直接対応は不要
TypeSpecやSDK生成を使っていない対応不要
C#ではなくJavaScript、Python、Javaなど別言語SDKのみを扱う今回のC#生成問題としては優先度低め
既存コードでETag条件付きヘッダーを使っていない影響は限定的

ただし、公開済みAzure SDKの利用者でも、今後リリースされるSDKで生成コード由来の差分が入る可能性はあります。アプリ側で独自に生成コードを取り込んでいる場合は、ビルド結果を確認してください。

影響範囲:生成コードと条件付きヘッダーを中心に確認する

PR #58950のファイル一覧では、eng配下のエミッター構成に加えて、複数サービスのsrc/Generated配下に差分が出ています。例として、AI、Anomaly Detector、App Configuration、Batch、Cognitive Language、Communication、Content Safety、Document Intelligence、Event Grid、Key Vault、Monitor、Purview、Search、Translation、Visionなどの生成コードが一覧に含まれています。(GitHub)

ここで重要なのは、「一覧にあるサービスすべてで実害が出る」という意味ではないことです。多くはエミッター更新に伴う再生成差分です。実務では、次の観点で絞り込むと確認しやすくなります。

確認観点見るべき場所判断基準
ETag条件付きヘッダーsrc/Generated配下のRequest生成処理If-Match / If-None-Matchの出力が妥当か
コンパイルエラーCI、ローカルビルドログCS1061や.Value関連エラーが消えているか
差分の大きさGit diff意図しない公開API変更がないか
生成ツールの参照eng/azure-typespec-http-client-csharp-emitter-package.json期待するエミッター版を参照しているか
テスト条件付きリクエストの単体・回帰テストETagのnull時・指定時でヘッダー出力が正しいか

移行・設定確認の手順

TypeSpecベースで.NET SDKを生成している場合は、いきなり本番ブランチへ反映するのではなく、生成環境、差分、ビルド、テストの順に確認するのが安全です。

手順表

手順作業目的
1eng/azure-typespec-http-client-csharp-emitter-package.jsonを確認@azure-typespec/http-client-csharpの参照先を把握する
2package-lock.jsonの差分を確認依存関係の更新範囲を確認する
3tsp-location.yamlのemitterPackageJsonPathを確認正しいエミッター構成を使っているか確認する
4SDKを再生成新しいエミッターで生成結果を作る
5src/Generatedの差分をレビュー生成コードの変化を確認する
6dotnet buildを実行コンパイルエラーがないか確認する
7ETag関連テストを追加・実行条件付きヘッダーの退行を防ぐ

Azure SDK for .NETのData Plane Code Generation Quickstartでは、新しいデータプレーンサービスについて、tsp-location.yamlのemitterPackageJsonPathにeng/azure-typespec-http-client-csharp-emitter-package.jsonを設定する流れが説明されています。また、SDKプロジェクトのsrc配下でdotnet build /t:GenerateCodeを実行して生成する手順も示されています。(GitHub)

dotnet build /t:GenerateCode

生成時の詳細を追いたい場合は、トレース付きで実行します。

dotnet build /t:GenerateCode /p:Trace=true -v d

レビュー時に見るべき具体的なコードパターン

今回の更新では、MatchConditionsHeadersVisitorの処理が変更され、単一の条件付きヘッダーに対して、元のヘッダー値式ではなく、変換後のマッチ条件パラメーターから.Valueを参照する方向に修正されています。PR差分では、ExtractHeaderInfoがExtractHeaderNameへ整理され、不要になったヘッダー値の取り回しが削除されています。(GitHub)

レビューでは、次のような不正パターンが残っていないかを確認します。

TypeFormatters.ConvertToString(ifMatch).Value
TypeFormatters.ConvertToString(ifNoneMatch).Value

期待される形は、次のようにETag?パラメーター側の値を使うコードです。

if ((ifMatch != null))
{
    request.Headers.Add("If-Match", ifMatch.Value);
}

PR #58950のテストデータにも、If-MatchとIf-None-MatchでETag?を受け取り、nullでない場合にrequest.Headers.Add(..., ifMatch.Value)またはifNoneMatch.Valueを追加する期待出力が含まれています。(GitHub)

実務で失敗しやすいポイント

prereleaseを安定版のように扱わない

1.0.0-alpha.20260504.2はalpha付きのprereleaseです。生成結果の差分が大きくなる可能性があるため、安定版SDKの利用者向けに「必ず更新すべき」と案内するのは避けるべきです。

特に、社内テンプレートやCIでエミッター版を固定している場合、prerelease更新を取り込む前に、生成コードの差分レビューとビルド確認を必ず行ってください。

生成コードを手で直して終わらせない

src/Generated配下のコードを直接修正しても、次回の生成で上書きされます。TypeFormatters.ConvertToString(...).Valueのような問題を見つけた場合は、生成結果だけでなく、エミッター版、TypeSpec定義、生成設定を確認する必要があります。

ETagのケースだけでテストを終えない

今回の主な修正点はETagですが、生成ツールの更新では周辺の生成結果も変わることがあります。最低限、次の観点を確認しましょう。

確認項目理由
条件付きヘッダー今回の中心的な修正箇所
public API差分利用者に影響する変更を検出するため
serialization/deserialization生成コード更新で影響が出やすい
null処理ETagや任意ヘッダーで退行しやすい
CIの全体ビルド単体ファイルだけでは検出できない問題がある

Azure SDK利用者が今すぐ確認すべきこと

通常のアプリ開発者は、まず自分が「SDKを使っているだけ」なのか「SDKを生成している」のかを切り分けてください。

SDKを使っているだけの場合

NuGetでAzure.*パッケージを参照しているだけなら、今回の更新を理由にすぐコードを変更する必要は基本的にありません。対応すべきことは、利用中パッケージのリリースノート確認と、通常のアップデート前検証です。

SDKを生成している場合

TypeSpecからAzure SDK for .NETを生成している場合は、次の順で確認してください。

  1. @azure-typespec/http-client-csharpの参照バージョンを確認する
  2. If-Match / If-None-Matchを使うAPIがあるか確認する
  3. dotnet build /t:GenerateCodeで再生成する
  4. TypeFormatters.ConvertToString(...).Valueが残っていないか検索する
  5. 生成後のsrc/Generated差分をレビューする
  6. CIで全体ビルドと回帰テストを通す

検索コマンドの例です。

grep -R "TypeFormatters.ConvertToString(.*).Value" ./sdk

Windows環境でPowerShellを使う場合は、次のように確認できます。

Select-String -Path .\sdk\**\*.cs -Pattern "TypeFormatters\.ConvertToString\(.*\)\.Value"

ヒットしなければ必ず安全というわけではありませんが、今回の既知パターンを素早く確認するには有効です。

まとめ:今回の更新は「生成環境の健全性」を確認するサイン

Azure SDK documentation update: Update azure-typespec/http-client-csharp version to prerelease 1.0.0-alpha.20260504.2は、一般的なAzure SDK利用者向けの大規模な移行告知というより、TypeSpecからC# SDKを生成する環境で、ETag条件付きヘッダーの生成不具合を解消するための重要な更新です。

最初に確認すべきことは、自分のプロジェクトが@azure-typespec/http-client-csharpでSDKを生成しているかどうかです。該当する場合は、エミッター参照、tsp-location.yaml、生成コード差分、If-Match / If-None-Match周辺のビルド結果を確認してください。該当しない場合は、今後のAzure SDK for .NETリリースで関連差分が入る可能性を把握しつつ、通常のアップデート検証で十分です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次