Skip to content

原文(日本語訳)

サブプロセス(Bash、フック、MCP、LSP)が OTEL_* 環境変数を継承しなくなりました。これにより、Bashツール経由で実行されるOTEL計測済みアプリがCLI自身のOTLPエンドポイントを拾わなくなります。

原文(英語)

Subprocesses (Bash, hooks, MCP, LSP) no longer inherit OTEL_* environment variables, so OTEL-instrumented apps run via the Bash tool no longer pick up the CLI's own OTLP endpoint

概要

Claude Code のCLI自体がOpenTelemetry(OTEL)によるテレメトリを送信するため、OTEL_EXPORTER_OTLP_ENDPOINT などの OTEL_* 環境変数を設定していました。これらの変数がサブプロセスにも引き継がれていたため、BashツールやMCPサーバーで実行したOTEL計測済みアプリケーションが、意図せずClaude Code自身のOTLPエンドポイントにテレメトリを送信してしまう問題がありました。今回の修正でサブプロセスへの OTEL_* 変数の継承が停止され、アプリケーションが独自のOTEL設定を正しく使用できるようになります。

基本的な使い方

この変更は自動的に適用されます。特別な操作は不要です。

修正前(問題のある動作):

bash
# Claude CodeがOTEL_EXPORTER_OTLP_ENDPOINTを設定している場合
# Bashツールで実行したアプリがそのエンドポイントにテレメトリを送信してしまう
claude -p "npm start を実行してください"
# → アプリのOTELトレースがClaude CodeのOTLPエンドポイントに送られる(意図しない動作)

修正後(正しい動作):

bash
# アプリは自身のOTEL設定のみを使用する
claude -p "npm start を実行してください"
# → アプリのOTELトレースはアプリ独自のエンドポイントに送られる(正しい動作)

実践例

OTELを使ったWebアプリの開発

OpenTelemetryで計測されたWebアプリケーションをClaude Codeのデバッグセッション中に実行しても、テレメトリが正しくルーティングされます。

bash
# アプリ独自のOTEL設定(.envファイルなど)
OTEL_EXPORTER_OTLP_ENDPOINT=http://my-jaeger:4317
OTEL_SERVICE_NAME=my-web-app

# Claude Codeに実行させても干渉しない
# 「npm run dev を実行してOTELトレースが正しく出力されるか確認してください」

マイクロサービスのテスト

複数のマイクロサービスが独自のOTEL設定を持つ場合、Bashツールから実行しても各サービスが独自の設定を維持します。

bash
# service-a と service-b がそれぞれ異なるOTLPエンドポイントに送信
# → 従来は両方がClaude CodeのエンドポイントのOTEL_*を拾っていた
# → 修正後は各サービスの設定が正しく機能する

OTELフックスクリプトの利用

フックスクリプトでOTELを使った処理を行う場合も同様に動作が改善されます。

bash
#!/bin/bash
# .claude/hooks/post-tool-use.sh
# このスクリプトが独自のOTEL設定を使ってトレースを送信できる
export OTEL_EXPORTER_OTLP_ENDPOINT=http://my-collector:4317
# ... OTELを使った処理

注意点

  • この変更はBashツール、フック、MCPサーバー、LSPすべてに適用されます
  • Claude Code自身のテレメトリには影響しません(CLIは引き続き自身のOTEL設定を使用します)
  • アプリケーションが独自の OTEL_* 環境変数を設定している場合、それらは正しく機能するようになります
  • Claude Code自身が使用するOTELの設定については、デバッグ時に --debug フラグで確認できます

関連情報