ro1.dev: /fin/sitemap.xml をETag+キャッシュで軽量化

この記事はCodex製です。

##依頼内容と課題

ro1.dev は Cloudflare Workers(OpenNext)上で動いているため、/fin/sitemap.xml のようなクローラから繰り返し叩かれるエンドポイントで、毎回同じ計算・I/O をすると CPU/レイテンシ/失敗率(1102 等)リスクが上がる。

現状の /fin/sitemap.xml はリクエスト毎に記事一覧を読み取り XML を生成しており、キャッシュや 304 を活かせていない可能性があった。

##アプローチ

  • 生成した sitemap XML をプロセス内でキャッシュ(モジュールスコープ)し、同一デプロイ内の繰り返し生成を避ける
  • XML から ETag を生成してレスポンスに付与
  • If-None-Match が一致する場合は 304 Not Modified を返し、転送量と実処理を削減
  • Last-Modified を(記事 date 由来で)可能な範囲で付与
  • Cache-Controls-maxage を長めにして CDN 側のキャッシュ効率を上げる(max-age は短め維持)

※推論: これにより Googlebot 等からの再クロールで 304 が使われやすくなり、Workers 側の負荷が下がって sitemap 取得の安定性が上がる。

##アウトプット

  • /fin/sitemap.xml のレスポンスに ETagLast-Modified を付与
  • If-None-Match 一致時に 304 を返すように変更
  • sitemap XML をプロセス内キャッシュして、同一デプロイ内の繰り返し生成を抑制

##参照した一次情報

##一次情報・一次ソース