Skip to content

原文(日本語に翻訳)

BashツールのOTELトレーシングを改善しました。トレーシングが有効な場合、サブプロセスがW3C形式のTRACEPARENT環境変数を継承するようになりました。

原文(英語)

Improved Bash tool OTEL tracing: subprocesses now inherit a W3C TRACEPARENT env var when tracing is enabled

概要

OpenTelemetry(OTEL)トレーシングが有効な環境でClaudeのBashツールを使用する場合、実行されるサブプロセスにW3C形式のTRACEPARENT環境変数が自動的に伝播されるようになりました。これにより、Claudeが実行するコマンドチェーン全体を単一の分散トレースとして追跡でき、CI/CDパイプラインや複雑な自動化スクリプトのオブザーバビリティが大幅に向上します。

基本的な使い方

OTELトレーシングが設定された環境では、Bashツールで実行されるコマンドの子プロセスにTRACEPARENTが自動伝播します。

bash
# OTELエンドポイントを設定
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
export OTEL_SERVICE_NAME=claude-code

# ClaudeがBashツールでスクリプトを実行すると、
# 子プロセスもTRACEPARENTを受け取る
./build.sh  # → TRACEPARENT が自動設定される

TRACEPARENTのフォーマット(W3C Trace Context仕様):

traceparent: 00-{trace-id}-{parent-id}-{flags}
例: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

実践例

CI/CDパイプラインでの分散トレーシング

bash
# Claudeが実行するビルドスクリプト内でOTELを活用
#!/bin/bash
# build.sh - TRACEPARENTが自動設定される

# Node.jsアプリをビルド(TRACEPARENTを引き継ぐ)
npm run build

# テスト実行(同じトレースID内)
npm test

# デプロイスクリプト(トレースが繋がる)
./deploy.sh

これにより、Claudeのリクエスト → ビルド → テスト → デプロイが1つのトレースとして可視化されます。

カスタムスクリプトでのトレース活用

python
# Claudeが実行するPythonスクリプト内でTRACEPARENTを活用
import os
from opentelemetry import trace
from opentelemetry.propagate import extract
from opentelemetry.propagators.b3 import B3Format

# 環境変数からTRACEPARENTを取得
traceparent = os.environ.get('TRACEPARENT', '')

if traceparent:
    # 親トレースを継続
    carrier = {"traceparent": traceparent}
    ctx = extract(carrier)
    tracer = trace.get_tracer(__name__)
    with tracer.start_as_current_span("python-step", context=ctx):
        # 処理内容
        process_data()

JaegerやDatadogでのトレース確認

yaml
# docker-compose.yml(Jaeger設定例)
services:
  jaeger:
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"  # Jaeger UI
      - "4318:4318"    # OTLP HTTP

# Claude Code設定
# export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
# export OTEL_SERVICE_NAME=claude-code
# → Jaeger UIでClaudeのBash実行トレースを確認

GitHubActionsでのオブザーバビリティ

yaml
# .github/workflows/claude-automation.yml
- name: Run Claude Code automation
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
    OTEL_EXPORTER_OTLP_ENDPOINT: https://otel-collector.example.com
    OTEL_SERVICE_NAME: claude-github-actions
  run: |
    claude --auto "テストを実行して失敗したものを修正"
    # すべてのサブプロセスがTRACEPARENTを継承
    # → OTELコレクターでトレースを確認可能

注意点

  • この機能はOTELトレーシングが有効(OTEL_EXPORTER_OTLP_ENDPOINTなどが設定済み)な場合のみ動作します。OTELが未設定の場合、TRACEPARENT環境変数は設定されません。
  • TRACEPARENTはW3C Trace Context仕様(RFC)に準拠したフォーマットです。多くのOTELエクスポーターやAPMツール(Jaeger、Zipkin、Datadog、New Relicなど)と互換性があります。
  • サブプロセスがOTELライブラリを使用していない場合でもTRACEPARENT環境変数は設定されますが、活用するにはOTELの実装が必要です。

関連情報