【アップデート】Claude Code v2.1.193 でOpenTelemetry の新しいログイベント `claude_code.assistant_response`が追加されました

【アップデート】Claude Code v2.1.193 でOpenTelemetry の新しいログイベント `claude_code.assistant_response`が追加されました

2026.06.26

はじめに

こんにちは。
クラウド事業本部コンサルティング部の渡邉です。

2026年6月26日、Claude Code v2.1.193 のリリースに伴い、OpenTelemetry の新しいログイベント claude_code.assistant_response が追加されました。

https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

これまで Claude Code の OpenTelemetry モニタリングでは、ユーザーのプロンプト(claude_code.user_prompt)や API リクエスト・ツール実行などの構造化イベントをエクスポートできましたが、モデルが返した応答テキストを直接ログイベントとして取得することはできませんでした。

今回の追加により、エンタープライズ向けの監査ログや、プロンプト〜レスポンスの完全なトレース記録が実現しやすくなります。

本記事では、claude_code.assistant_response の概要と、環境変数による制御方法、実際の設定手順をご紹介します。

Claude CodeのOpenTelemetryモニタリングとは

Claude Code は、OpenTelemetry(OTel)を通じて以下の 3 種類のシグナルをエクスポートできます。

シグナル 内容 有効化する環境変数
メトリクス トークン数・コスト・セッション数・編集行数などのカウンター OTEL_METRICS_EXPORTER
ログイベント プロンプト・API リクエスト・ツール実行などの構造化レコード OTEL_LOGS_EXPORTER
トレース(Beta) インタラクション・LLM リクエスト・ツール呼び出しのスパン OTEL_TRACES_EXPORTER + CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1

テレメトリを有効化するには CLAUDE_CODE_ENABLE_TELEMETRY=1 が必要です。いずれかのエクスポーターを設定することで、任意の OTLP 対応バックエンドへデータを送信できます。

主なログイベント一覧

ログイベント(OTEL_LOGS_EXPORTER)で取得できる主なイベントは以下のとおりです。

イベント名 記録されるタイミング
claude_code.user_prompt ユーザーがプロンプトを送信したとき
claude_code.assistant_response モデルが応答を返したとき(v2.1.193 で追加)
claude_code.api_request Claude API へのリクエストごと
claude_code.api_error API リクエストが失敗したとき
claude_code.tool_result ツール実行が完了したとき
claude_code.tool_decision ツールの許可・拒否が決定したとき

claude_code.assistant_response とは

claude_code.assistant_response は、Claude モデルが生成した応答テキストを含む OpenTelemetry ログイベントです。

CHANGELOG の記述は以下のとおりです。

Added claude_code.assistant_response OpenTelemetry log event containing the model's response text. Redacted unless OTEL_LOG_ASSISTANT_RESPONSES=1; when that var is unset it follows OTEL_LOG_USER_PROMPTS, so deployments that already log prompt content will start receiving response content on upgrade — set OTEL_LOG_ASSISTANT_RESPONSES=0 to keep prompts-only.

このイベントにより、ユーザーの入力(user_prompt)とモデルの出力(assistant_response)を prompt.id で紐付けた完全な会話ログを、既存の OTel バックエンドに記録できるようになります。

OTEL_LOG_ASSISTANT_RESPONSES の動作

応答内容のロギングは、以下の 4 パターンで制御されます。

OTEL_LOG_ASSISTANT_RESPONSES OTEL_LOG_USER_PROMPTS 動作
1 応答テキストを記録する
0 応答テキストを記録しない(明示的に無効化)
未設定 1 OTEL_LOG_USER_PROMPTS に従い、応答テキストも記録される
未設定 未設定 or 0 応答テキストは記録されない(デフォルト)

実際に試してみる

前提条件

  • Claude Code v2.1.193 以降がインストール済みであること
  • ~/.claude/settings.json または組織のマネージド設定で、OTel テレメトリ(CLAUDE_CODE_ENABLE_TELEMETRY=1OTEL_LOGS_EXPORTER など)が設定済みであること

ステップ 1: settings.json の環境変数を確認・設定する

すでに OTel が設定済みの場合、~/.claude/settings.jsonenvOTEL_LOG_ASSISTANT_RESPONSES を追加するだけです。
私のClaude Code環境では、OTelのメトリクス・ログイベント・トレースを Google Cloud に転送するように設定しておりますので、以下のような環境変数となっています。
すでに OTEL_LOG_USER_PROMPTS=1 を設定していましたので、今回のアップデートによって、入力プロンプトと応答の両方が記録されるようになっています。

settings.json
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_LOG_TOOL_DETAILS": "1",
    "OTEL_METRICS_EXPORTER": "otlp",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "https://xxxxxxxxxxxxxxxxxxxxxx",
    "OTEL_EXPORTER_OTLP_HEADERS": "x-api-key=xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "OTEL_RESOURCE_ATTRIBUTES": "user.email=xxxxxxxxxxxxxxxxxxxxxxxxx",
    "OTEL_METRICS_INCLUDE_VERSION": "true",
    "OTEL_TRACES_EXPORTER": "otlp",
    "OTEL_SERVICE_NAME": "claude-code",
    "OTEL_LOG_USER_PROMPTS": "1"
  },

ステップ 2: 記録されるイベントを確認する

設定を追加してセッションを開始すると、バックエンド(Google Cloud Logging)に以下の 2 種類のログイベントが記録されます。

イベント名 記録される内容 有効化する環境変数
claude_code.user_prompt ユーザーが送信したプロンプトのテキスト OTEL_LOG_USER_PROMPTS=1
claude_code.assistant_response モデルが返した応答テキスト OTEL_LOG_ASSISTANT_RESPONSES=1、または OTEL_LOG_ASSISTANT_RESPONSES 未設定かつ OTEL_LOG_USER_PROMPTS=1

2 つのイベントは共通の prompt.id 属性を持ちます。バックエンドで prompt.id をキーにフィルタリングすることで、1 ターンの入力〜出力の会話ペアを確認できます。

以下は Google Cloud の Cloud Logging に記録された実際のイベントです。

claude_code.user_promptイベント
{
  "textPayload": "claude_code.user_prompt",
  "insertId": "xxxxxxxxxxxxxxxxxxxx",
  "resource": {
    "type": "generic_task",
    "labels": {
      "namespace": "",
      "job": "claude-code",
      "task_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "project_id": "<PROJECT_ID>",
      "location": "asia-northeast1"
    }
  },
  "timestamp": "2026-06-26T07:47:44.633Z",
  "labels": {
    "service.name": "claude-code",
    "organization.id": "<ORG_ID>",
    "user.email": "<USER_EMAIL>",
    "user.id": "<USER_ID_HASH>",
    "terminal.type": "vscode",
    "event.name": "user_prompt",
    "instrumentation_version": "2.1.193",
    "session.id": "<SESSION_ID>",
    "user.account_uuid": "<ACCOUNT_UUID>",
    "prompt_length": "13",
    "prompt": "今までの会話内容を要約して",
    "event.sequence": "12",
    "app.version": "2.1.193",
    "instrumentation_source": "com.anthropic.claude_code.events",
    "event.timestamp": "2026-06-26T07:47:44.633Z",
    "user.account_id": "<ACCOUNT_ID>",
    "prompt.id": "<PROMPT_ID>"
  },
  "logName": "projects/<PROJECT_ID>/logs/claude-code-telemetry",
  "receiveTimestamp": "2026-06-26T07:47:50.517996202Z"
}
claude_code.assistant_responseイベント
{
  "textPayload": "claude_code.assistant_response",
  "insertId": "xxxxxxxxxxxxxxxxxxxx",
  "resource": {
    "type": "generic_task",
    "labels": {
      "namespace": "",
      "job": "claude-code",
      "project_id": "<PROJECT_ID>",
      "task_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "location": "asia-northeast1"
    }
  },
  "timestamp": "2026-06-26T07:47:59.621Z",
  "labels": {
    "user.email": "<USER_EMAIL>",
    "user.id": "<USER_ID_HASH>",
    "service.name": "claude-code",
    "response": "## 会話の要約\n\n**作業内容**: Claude Code v2.1.193 の新機能に関する調査\n\n---\n\n### 1. 調査フェーズ\n\n`claude_code.assistant_response` について以下のソースで調査しました。\n\n- **CHANGELOG.md**(GitHub): v2.1.193 の該当エントリを確認\n- **公式ドキュメント**: `code.claude.com/docs/en/monitoring-usage` および `observability` ページを取得\n\n**判明した仕様:**\n- `claude_code.assistant_response` はモデルの応答テキストを含む新しい OTel ログイベント\n- デフォルトはリダクション(`OTEL_LOG_ASSISTANT_RESPONSES=1` で有効化)\n- **未設定時は `OTEL_LOG_USER_PROMPTS` の値に連動**する(既に `=1` の環境ではアップグレード後に応答も自動でロギング開始される)\n\n---\n\n### 2. 調査内容の作成\n\n`/home/<USERNAME>/investigation/2026-06-26-claude-code-assistant-response-otel.md` を作成。OTel の基本設定を含む構成にしました。\n\n---\n\n### 3. 調査内容のリライト\n\nユーザーから「OTel は `~/.claude/settings.json` で設定済みで Google Cloud に転送されている」とのフィードバックを受け、`settings.json` を確認。\n### 4. セッションダンプ\n\n`/session-dump` で `daily-log/2026-06-26.md` に本セッションの作業内容を追記して完了。",
    "organization.id": "<ORG_ID>",
    "instrumentation_version": "2.1.193",
    "session.id": "<SESSION_ID>",
    "event.name": "assistant_response",
    "user.account_uuid": "<ACCOUNT_UUID>",
    "terminal.type": "vscode",
    "event.sequence": "14",
    "response_length": "968",
    "app.version": "2.1.193",
    "user.account_id": "<ACCOUNT_ID>",
    "request_id": "<REQUEST_ID>",
    "prompt.id": "<PROMPT_ID>",
    "query_source": "repl_main_thread",
    "model": "claude-sonnet-4-6",
    "event.timestamp": "2026-06-26T07:47:59.621Z",
    "instrumentation_source": "com.anthropic.claude_code.events"
  },
  "logName": "projects/<PROJECT_ID>/logs/claude-code-telemetry",
  "receiveTimestamp": "2026-06-26T07:48:05.515809866Z"
}

2 つのイベントを見比べると、いくつかの重要な点が確認できます。

まず、prompt.id が両イベントで同じ値になっています。これにより、どのプロンプトに対する応答なのかをログ上で正確に突き合わせられます。user_prompt イベントには prompt フィールドに実際の入力テキストが、assistant_response イベントには response フィールドにモデルの出力テキストが記録されています。

次に、assistant_response イベントには model(使用モデル)・request_id(Anthropic API リクエスト ID)・response_length(応答文字数)・query_source など、user_prompt イベントにはない属性が含まれています。モデルごとの応答傾向の分析や、API 側のトレースとの紐付けに活用できます。

また、タイムスタンプを見ると user_prompt07:47:44assistant_response07:47:59 で、約 15 秒の差があります。この差から応答生成にかかった時間をログから把握できることもわかります。

なお、両イベントは同じログ名 projects/.../logs/claude-code-telemetry に記録されており、Google Cloud Logging のログエクスプローラーで jsonPayload.labels."prompt.id"="<値>" のようなフィルタを使えば、1 ターン分の会話をまとめて検索できます。

まとめ

Claude Code v2.1.193 で追加された claude_code.assistant_response により、OpenTelemetry 経由でモデルの応答テキストを取得できるようになりました。既存の OTel 設定に OTEL_LOG_ASSISTANT_RESPONSES=1 を 1 行追記するだけで、user_prompt イベントと assistant_response イベントが共通の prompt.id で紐付けられた完全な会話ログをバックエンドに記録できます。

また、assistant_response イベントには使用モデル(model)や応答文字数(response_length)、Anthropic API リクエスト ID(request_id)なども含まれるため、応答品質の分析やコスト配分の把握にも役立ちます。

一方で、応答テキストにはコードや内部情報が含まれる場合もあるため、OTel バックエンドのアクセス制御や保持ポリシーの設定はあわせて確認する必要があります。また、OTEL_LOG_USER_PROMPTS=1 を設定済みの環境では、v2.1.193 へのアップグレード後に OTEL_LOG_ASSISTANT_RESPONSES が未設定のままだと、応答テキストも自動的にロギングされるようになります。プロンプトのみ記録したい場合は OTEL_LOG_ASSISTANT_RESPONSES=0 を明示的に設定してください。

Claude Code のテレメトリを活用してコンプライアンスやセキュリティ監査の要件を満たしたい方は、今回の機能をぜひ活用してみてはいかがでしょうか。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部コンサルティング部の渡邉でした!


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

この記事をシェアする

関連記事