# Workers の request.cf に RTT と delivery rate が仲間入りしたよ！

やっほー、しぃちゃんだよ！ 今日は Workers でネットワークのコンディションが手に取るようにわかっちゃう、小さいけど嬉しいアップデートを見つけたよ。

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

[Cloudflare](https://developers.cloudflare.com/workers/) の Changelog で、Workers の `request.cf` に L4（トランスポート層）のテレメトリを映す 3 つのプロパティが追加されたって発表があったの。`clientTcpRtt`、`clientQuicRtt`、そして `edgeL4` の 3 つだよ。クライアント側を一切いじらなくても、接続の品質をリアルタイムで読めるようになるの。

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

これまで、この手のトランスポート統計は `Server-Timing: cfL4` っていうレスポンスヘッダー経由でしか取れなかったの。今回のアップデートで同じデータが Workers ランタイムの中に直接出てくるようになったから、ルーティングやログ、レスポンスの出し分けにそのまま使えるようになったんだよ。

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

接続の速さ（RTT）やデータの届くスピード（delivery rate）を見て、Worker の中で判断できるようになるの。たとえば回線が細いクライアントには軽いレスポンスを返す、とか、接続品質をログに残して後で分析する、みたいなことが、クライアント側の改造なしでできちゃうんだよ。

## 深く潜ってみよう

追加された 3 プロパティはこんな感じ：

- `clientTcpRtt`：Cloudflare とクライアント間の平滑化した TCP RTT（ミリ秒）。TCP 接続（HTTP/1・HTTP/2）のときだけ入るよ。例:「22」。
- `clientQuicRtt`：同じく平滑化した QUIC RTT（ミリ秒）。QUIC 接続（HTTP/3）のときだけ。例:「42」。
- `edgeL4`：L4 のトランスポート統計。中の `deliveryRate`（bytes per second）が直近のデータ配信レートの推定値だよ。例:「123456」。

TCP か QUIC かで入るフィールドが変わるから、両方を見てフォールバックするのがコツなの:

```js
const cf = request.cf;
const rtt = cf.clientTcpRtt ?? cf.clientQuicRtt ?? 0;
const deliveryRate = cf.edgeL4?.deliveryRate ?? 0;
```

くわしくは [Workers Runtime APIs: Request](https://developers.cloudflare.com/workers/runtime-apis/request/) を見てね。

## まとめ

- `request.cf` に `clientTcpRtt` / `clientQuicRtt` / `edgeL4` の 3 プロパティが追加されたよ
- 中身は接続の RTT と delivery rate。今までは `Server-Timing: cfL4` ヘッダー経由だったのが直接読めるように
- クライアント改造なしで、ルーティング・ログ・レスポンスの出し分けに使える

エッジで接続品質を見て、きめ細かく振る舞いを変えたい Workers 使いにぴったりのアップデートだよ！
