.NETのGetCallerBaggagePairs更新でuserId解決が改善|影響範囲と確認ポイント

.NETでAgent365やOpenTelemetryのテレメトリを扱っている場合、今回の確認ポイントは「user.id がどの値から解決されるか」です。2026年5月5日にマージされた Fix GetCallerBaggagePairs: resolve userId across all channels では、GetCallerBaggagePairs() が AadObjectId だけに依存せず、AgenticUserId や From.Id へフォールバックするように修正されました。これにより、Teams以外のチャネルやA2A呼び出しで user.id が空になっていたケースが改善されます。(GitHub)

対応が必要なのは、.NETアプリでMicrosoft OpenTelemetry distro、Agent365関連のホスティングテレメトリ、または user.id を使ったログ分析・トレース検索・アラート・ダッシュボードを運用しているチームです。特に、user.id をMicrosoft Entra IDのオブジェクトIDと同じものとして扱っている場合は、今回の変更後に From.Id や AgenticUserId が入る可能性を前提に、クエリや後続処理を見直してください。

目次

今回の.NET documentation updateで変わったこと

今回の変更は、TurnContextExtensions.GetCallerBaggagePairs() における user.id baggageの解決ロジックを修正するものです。

従来は、呼び出し元ユーザーのIDとして AadObjectId だけを参照していました。しかし、GitHub上の説明では、AadObjectId はTeams以外のチャネルやA2A呼び出しでは null になるケースがあるとされています。そのため、テレメトリ上の user.id が欠落し、ユーザー単位の追跡や障害調査がしづらくなる可能性がありました。(GitHub)

修正後の優先順位は次の通りです。

from?.AadObjectId ?? from?.AgenticUserId ?? from?.Id

実装上も、OpenTelemetryConstants.UserIdKey に対して上記のフォールバック順で値を設定する形になっています。(GitHub)

項目変更前変更後実務上の意味
user.id の取得元AadObjectId のみAadObjectId → AgenticUserId → From.IdAadObjectId がないチャネルでもIDが入りやすくなる
Teams主に AadObjectIdAadObjectId が優先既存のTeams中心の挙動は大きく変わりにくい
Teams以外のチャネルnull になりやすいFrom.Id にフォールバックuser.id の欠落率が下がる可能性がある
A2A呼び出しAadObjectId がないと欠落AgenticUserId にフォールバックエージェント関連の呼び出し追跡がしやすくなる

重要なのは、この変更が認証や認可の仕組みを変更するものではない点です。変わるのは、OpenTelemetry/Agent365のテレメトリに付与される user.id baggageの解決方法です。

なぜuser.id baggageの修正が重要なのか

OpenTelemetryのBaggageは、リクエストやワークフローに紐づくキーと値のコンテキスト情報を、サービス境界を越えて伝播させるための仕組みです。ユーザーIDやアカウントIDのように、後続のトレース、メトリック、ログ分析で使いたい情報を運ぶ用途で利用されます。(OpenTelemetry)

user.id が空のままだと、現場では次のような問題が起きます。

起きやすい問題具体例
障害調査でユーザー軸の絞り込みができない「特定ユーザーだけ失敗しているか」をトレースから確認しづらい
ダッシュボードの集計が不正確になるuser.id が空のリクエストが「不明ユーザー」にまとまる
A2A呼び出しの追跡が途切れるどのエージェント由来の処理かを後から追いにくい
アラートの条件が意図とずれるuser.id の欠落を異常として検知している場合、修正後に件数が変わる

今回の修正で user.id が入りやすくなること自体は改善です。ただし、値の意味が常に同じとは限りません。AadObjectId、AgenticUserId、From.Id は同じ種類のIDとして扱うべきではありません。

影響を受けやすいシステム

今回の.NET documentation updateは、すべての.NETアプリに直接影響するものではありません。影響が出やすいのは、Microsoft OpenTelemetry distro for .NETのAgent365関連機能を使い、かつ呼び出し元ユーザーの情報をテレメトリで分析しているシステムです。

利用状況対応優先度確認ポイント
Teamsチャネルのみを利用している低〜中AadObjectId が引き続き優先されるため、既存クエリに大きな変化がないか確認する
Teams以外のチャネルも利用している高修正後に From.Id が user.id として入るケースを確認する
A2A呼び出しを使っている高AgenticUserId が入るケースを想定して分析軸を見直す
user.id をダッシュボードやアラート条件に使っている高欠落率、ユニーク数、集計単位の変化を確認する
user.id を認可やユーザー照合に流用している要注意テレメトリ用IDを業務ロジックに使っていないか確認する

特に注意したいのは、user.id を「必ずEntra IDのオブジェクトIDである」とみなしている実装です。今回の修正後は、Teams以外のチャネルでは From.Id、A2Aでは AgenticUserId が入る可能性があります。GUID形式であることを前提にした処理や、Entra IDユーザー検索にそのまま渡す処理がある場合は、エラーや誤照合の原因になります。

変更後のチャネル別挙動

PR上では、修正後のチャネル別挙動として、Teamsでは AadObjectId、その他のチャネルでは From.Id、A2Aのユーザー文脈では AadObjectId、A2Aのエージェント文脈では AgenticUserId が使われると整理されています。(GitHub)

チャネル・呼び出し修正後のuser.id確認すべきこと
TeamsAadObjectId既存のユーザー追跡が継続して機能するか
Teams以外のチャネルFrom.IdIDの形式、重複、チャネルごとのスコープを確認する
A2Aユーザー文脈AadObjectId従来のユーザー軸分析と整合するか
A2Aエージェント文脈AgenticUserIdエージェント由来の処理をユーザーと混同していないか

この表から分かる通り、今回の修正は「単に null を埋める」だけではありません。チャネルによって user.id の由来が変わるため、分析側でIDの意味を区別できるようにしておくことが重要です。

移行時に確認すべきポイント

依存パッケージまたは参照コミットを確認する

まず、自社アプリが該当する変更を含むバージョンまたはコミットを参照しているか確認します。

GitHubの変更履歴では、2026年5月6日の 1.0.2 に「より多くのチャネルタイプで user.id baggageを解決するためのホスティングテレメトリ抽出ロジック更新」が追加されています。また、関連PRでは Microsoft.OpenTelemetry パッケージのバージョンが 1.0.1 から 1.0.2 に更新されたと説明されています。(GitHub)

確認対象は次の通りです。

確認箇所見るべき内容
.csprojMicrosoft.OpenTelemetry のバージョン
Directory.Packages.props集中管理しているパッケージバージョン
ロックファイル実際に復元されているバージョン
forkまたはソース参照TurnContextExtensions.cs にフォールバック処理が入っているか
CI/CD本番ビルドで古いパッケージが固定されていないか

NuGetや社内フィードを使っている場合は、単にコードを変更するだけでなく、実際のデプロイ成果物に修正版が入っているかまで確認してください。

user.idを使うクエリとダッシュボードを見直す

修正後は、これまで空だった user.id に値が入る可能性があります。そのため、次のような集計は結果が変わることがあります。

見直す対象変更後に起きる可能性
user.id の欠落率欠落件数が減る
ユニークユーザー数From.Id や AgenticUserId 分だけ増える
エラー率のユーザー別集計「不明ユーザー」に集約されていたエラーが分散する
アラート条件user.id is null を前提にした条件が変化する
SLA/SLO分析ユーザー単位の分母・分子が変わる

移行後すぐに判断せず、リリース前後で同じ期間・同じチャネルごとに比較するのがおすすめです。特に、TeamsとTeams以外のチャネルを混ぜて集計している場合は、チャネル別に分けて差分を見ると原因を切り分けやすくなります。

user.idの意味を業務ロジックに使っていないか確認する

user.id はテレメトリ上の識別子です。今回の変更で値が入りやすくなるからといって、認可、課金、ユーザー本人確認のような業務ロジックにそのまま使うべきではありません。

特に避けたいのは次のような実装です。

避けるべき実装理由
user.id をEntra IDのオブジェクトIDとして固定的に扱うFrom.Id や AgenticUserId が入る可能性がある
user.id の形式をGUID前提でバリデーションするTeams以外のチャネルで形式が異なる可能性がある
user.id だけでユーザーを一意に統合するチャネルや呼び出し元の違いを無視すると誤集計につながる
Baggageに機密情報を追加するサービス境界を越えて伝播され、ログや外部バックエンドに送られる可能性がある

OpenTelemetryのドキュメントでも、Baggageはサービス境界を越えて伝播されるため、認証情報、APIキー、個人情報のようなセンシティブな情報を入れないよう注意されています。(OpenTelemetry)

テストで確認すべきシナリオ

PRのテスト計画では、既存テストに加えて、Teams以外のチャネルで From.Id にフォールバックするケース、A2Aで AgenticUserId にフォールバックするケース、すべての値が設定されている場合に AadObjectId が優先されるケースが追加されています。(GitHub)

自社環境でも、少なくとも次の4パターンを確認しておくと安全です。

テストケース入力条件期待するuser.id
Teams標準ケースAadObjectId があるAadObjectId
Teams以外のチャネルAadObjectId がなく、From.Id があるFrom.Id
A2Aエージェント文脈AadObjectId がなく、AgenticUserId があるAgenticUserId
優先順位確認AadObjectId、AgenticUserId、From.Id がすべてあるAadObjectId

テストでは、単に値が入るかだけでなく、観測基盤側でどう表示されるかも確認してください。アプリケーション内では正しく設定されていても、エクスポーター、プロセッサ、バックエンドのマッピングによって、表示名や保存先の属性名が異なることがあります。

運用チームが見るべきメトリクス

移行後は、機能の成否だけでなく、テレメトリの品質が改善したかを確認することが大切です。

観点確認方法
user.id の欠落率リリース前後で空値の割合を比較する
チャネル別の分布Teams、Teams以外、A2Aで集計を分ける
ユニークID数急増していないか確認する
エラー分析の精度「不明ユーザー」扱いだったエラーが適切に分散しているか見る
アラート影響既存アラートの発火条件が意図せず変わっていないか確認する

ユニークID数が大きく増えた場合は、必ずしも異常とは限りません。これまで欠落していた user.id が入るようになった結果かもしれません。一方で、チャネルごとのID体系を区別しないまま全体集計していると、ユーザー数を過大に見積もる可能性があります。

よくある誤解と注意点

user.idが入るようになれば、ユーザー識別は完全になる?

完全ではありません。今回の変更は、AadObjectId がない場合に別の候補へフォールバックする修正です。チャネルごとにIDの意味や形式が異なる可能性があるため、厳密なユーザー統合には、チャネル、テナント、会話IDなどの補助情報も合わせて扱う必要があります。

Teamsだけ使っていれば確認不要?

Teamsのみの場合でも、AadObjectId が引き続き優先されるため影響は限定的です。ただし、user.id を使ったアラートやダッシュボードを運用しているなら、リリース後に値の分布が変わっていないか確認しておくべきです。

Baggageに入った値は自動的にすべてのログ属性になる?

OpenTelemetryでは、Baggageはコンテキスト情報として伝播されるキー値ですが、Span、Metric、Logの属性とは別物です。属性として見えるかどうかは、明示的に取り込む処理や利用している計装・プロセッサに依存します。(OpenTelemetry)

そのため、GetCallerBaggagePairs() の修正後も、バックエンドで期待通りに検索できるかは実データで確認してください。

今回の更新で取るべき次の行動

今回の.NET documentation updateで確認すべき本質は、GetCallerBaggagePairs() の user.id 解決ロジックが AadObjectId 固定から、AadObjectId → AgenticUserId → From.Id のフォールバック方式に変わった点です。

まず、自社アプリがMicrosoft OpenTelemetry distro for .NETやAgent365のホスティングテレメトリを使っているか確認します。該当する場合は、依存バージョンまたは参照コミットを確認し、1.0.2相当の変更が入っているかを見ます。そのうえで、Teams、Teams以外のチャネル、A2A呼び出しのテストデータを流し、user.id の値、欠落率、ユニーク数、既存アラートへの影響を確認してください。

最も重要なのは、user.id を「常に同じ種類のユーザーID」とみなさないことです。テレメトリの精度は上がりますが、IDの由来を区別しないまま分析や業務ロジックに使うと、誤集計や誤判定につながります。移行時は、チャネル別の検証とダッシュボードの見直しまでをセットで行うのが安全です。

この記事を書いた人

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

コメント

コメントする

目次