# Workers のトレースに自分だけの span が刺せるようになったよ！

やっほー、しぃちゃんだよ！ 今日は Workers のオブザーバビリティがちょっと便利になるお話だよ。自分で書いたコードの「ここからここまで」を、トレースにそのまま乗せられるようになったの。

## なにが発表されたの？

Cloudflare の Changelog で、[Workers](https://developers.cloudflare.com/workers/) のトレーシングが **custom span（カスタムスパン）** に対応したって発表されたよ。`tracing.enterSpan()` を呼ぶだけで、自分のコードの区間を独自の span として記録できるようになったの。

しかもこの custom span は、fetch 呼び出しや KV の読み取り、D1 のクエリみたいにプラットフォームが自動で計測してくれる span と一緒に並んで表示されるんだよ。OpenTelemetry でエクスポートするときも、ちゃんと親子のネスト構造を保ったまま出てくるの。

## 今までどうだったの？

これまで Workers のトレースに出てくるのは、プラットフォームが自動で入れてくれる計測が中心だったの。fetch や KV、D1 みたいな操作は見えても、「自分の関数のこの処理に何ミリ秒かかってるか」みたいな、アプリ側の区間は自分では刻めなかったんだよね。

## これで何が変わるの？

これからは、遅そうな処理や気になるロジックを自分で span として囲めるようになるよ。自動計測の span と混ぜて時系列で並ぶから、「プラットフォームの処理」と「自分のコードの処理」のどっちに時間がかかってるのかが一目で分かるの。ボトルネック探しがぐっと楽になるね。

## 深く潜ってみよう

API は `import { tracing } from "cloudflare:workers"` で読み込むか、ハンドラの context 経由で `ctx.tracing` として使えるよ。

```ts
import { tracing } from "cloudflare:workers";

export default {
  async fetch(request, env, ctx) {
    return tracing.enterSpan("handleRequest", async (span) => {
      span.setAttribute("url.path", new URL(request.url).pathname);
      const data = await env.MY_KV.get("key");
      return new Response(data);
    });
  },
};
```

span は JavaScript の async コンテキストに沿って自動でネストされて、コールバックが返るか、返した promise が決着したタイミングで自動的に閉じられるの。だから手動で終了処理を書かなくていいんだよ。

`Span` オブジェクトには、メタデータを付ける `setAttribute(key, value)` と、今のリクエストがサンプリング対象かどうかを確認できる `isTraced` プロパティが用意されてるよ。

ひとつ注意なのが、span を記録するには [トレーシングを有効化](https://developers.cloudflare.com/workers/observability/traces/#how-to-enable-tracing) しておく必要があること。Wrangler の設定で tracing をオンにしておいてね。もっと詳しい使い方は [custom spans のドキュメント](https://developers.cloudflare.com/workers/observability/traces/custom-spans/) にまとまってるよ。

## まとめ

- Cloudflare の Changelog で、Workers のトレーシングが custom span に対応したよ
- `tracing.enterSpan()` で自分のコードの区間を計測できて、自動計測の span と一緒に並ぶよ
- async コンテキストで自動ネスト＆自動クローズ、`setAttribute` と `isTraced` も使えるよ
- 使うには Wrangler でトレーシングを有効化しておく必要があるの

Workers のパフォーマンスを本気でチューニングしたい人や、OpenTelemetry で計測を集めてる人にぴったりのアップデートだね！
