Skip to content

chore: Sentry SDK を v11 に上げ、Import Queue の metrics() の回避を外す - #184

Merged
rytkhs merged 1 commit into
developfrom
chore/sentry-v11
Sep 23, 2026
Merged

rytkhs merged 1 commit into
developfrom
chore/sentry-v11

Conversation

@rytkhs

@rytkhs rytkhs commented Sep 23, 2026

Copy link
Copy Markdown
Owner

背景

#181 では、withSentry が env の Queue を Proxy で包み、本物に結び直すのが send / sendBatch だけだったため、cron の IMPORT_QUEUE.metrics() が Illegal invocation で落ちた。報告した getsentry/sentry-javascript#24590 に対する修正(getsentry/sentry-javascript#24592)は 11.0.0 にだけ入り、10 系には入っていない。

v11 に上げて、cron が cloudflare:workers の env から Queue を読む回避を外す。v11 はメジャーアップデートなので、移行ガイドをこのリポジトリの設定と突き合わせ、送る内容を ADR 0029 のとおりに保つ。

変更

Queue の回避を外す — cron は handler の env から IMPORT_QUEUE を読む。cloudflare:workers の import と、回避の説明を消した。

Worker の body の止め方 — httpServerIntegration({ maxRequestBodySize: "none" }) の上書きを外す。v11 の既定の httpServerIntegration は dataCollection.httpBodies を見るので、httpBodies: [] だけで body は送られない。

Web で IP を送らない — dataCollection: { userInfo: false } を足す。v11 の既定は userInfo: true で、event に infer_ip: "auto" が付き、session には ip_address: "{{auto}}" が付く。v10 は sendDefaultPii を設定していなかったので、推定されなかった。header は SDK が Referer と User-Agent しか付けないので、既定のままにする。

withSentry の型 — v11 では、型引数を一部だけ明示すると、戻り値が ExportedHandler | WorkerEntrypointConstructor の union 型になる。handler を ExportedHandler<Bindings, { jobId: string }> 型の変数にしてから渡す形に変えた。

テスト

  • v11 の Worker は、isolate ごとに最初の呼び出しの options から client を 1 つだけ作り、以後の呼び出しでも使い回す。monitoring.test.ts の transport と、送られた event を受け取る配列はファイルで 1 つにした。「SQLの誤り」のテストは event が 0 件でも通る状態だったので、件数も確認するようにした。
  • v11 の core は、fetch が native かの判定をブラウザでだけ行うので、テストで fetch を native に見せかける細工を外した。
  • Web に、本番の条件で初期化したとき、event と session に IP の推定が付かないことを確認するテストを足した。
  • cron のテストは残す。SDK の Proxy を通る Queue の metrics() を読むので、SDK の修正の回帰テストになる。

v11 の既定の変化のうち、受け入れたもの

  • attachStacktrace が既定で true になる。Error でない値が投げられたときにもスタックが付き、issue のまとまり方が変わりうる。
  • Web の session の lifecycle が page になり、状態は crashed でなく unhandled になる。Release Health は使っていない。
  • span streaming が既定になる。tracing は使っていないので影響しない。

確認

  • pnpm typecheck と apps の lint
  • テスト:API 715 件、Web 1021 件
  • 新しいテストと設定が効いているかを、一時的に設定を外して確認した
    • userInfo: false を外すと、infer_ip: 'auto' と {{auto}} で落ちる
    • httpBodies: [] を外すと、body が送られて落ちる
    • tracePropagationTargets: [] を外すと、sentry-trace が付いて落ちる
  • Web の build と wrangler deploy --dry-run

deploy 後に、cron の check-in(import-queue-health)が届くことはまだ確認していない。

@sentry/cloudflare 11.0.0 で withSentry が包んだ Queue のメソッドを本物に結び直すようになった
(getsentry/sentry-javascript#24592)ので、cron は handler の env から Queue を読む形に戻す。

- Worker: body を止めるための httpServerIntegration の上書きを外す。v11 は httpBodies を見る
- Web: dataCollection.userInfo を false にする。v11 の既定では Sentry が IP を推定する
- withSentry の型推論に合わせ、handler を ExportedHandler の変数にしてから渡す
- v11 は isolate で client を 1 つだけ作るので、テストの transport をファイルで 1 つにする
@rytkhs
rytkhs merged commit c5ec5cf into develop Sep 23, 2026
2 checks passed
@rytkhs
rytkhs deleted the chore/sentry-v11 branch September 23, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant