Skip to content

フロント静的資産が immutable・1年キャッシュで配信され、デプロイ後に旧 JS が残る #808

Description

@win2cot

事象

deploy.ymldeploy-webindex.html 以外の全資産(js/*.js, *.html, css/*.css, vendor/**)に Cache-Control: public, max-age=31536000, immutable を付与している。

これらアプリ資産はコンテンツハッシュでフィンガープリントしていない(js/auth.js 等、ファイル名固定)。そのため:

  • 内容を更新してもブラウザが旧版を最大 1 年保持し再取得しない。
  • CloudFront の /* invalidation はエッジキャッシュのみを消し、ブラウザキャッシュは消せない。
  • 結果、デプロイ直後に新旧 JS の混在が起き実行時エラーになる。

実害(v0.2.0 dev デプロイで確認)

SaaS Admin 画面で、新規 admin.js(Auth.isAppAdmin() を呼ぶ)+ ブラウザキャッシュの旧 auth.js(isAppAdmin 未定義)が混在し:

TypeError: Auth.isAppAdmin is not a function

origin/CloudFront 上のファイルは正しい(curl で確認済)が、invalidation 伝播中にロードしたブラウザが旧 immutable 資産を取得・固定化していた。

対処方針

フィンガープリント無しのアプリ資産(*.html / js / css)は ETag 再検証前提の no-cache で配信する。vendor/(サードパーティ・内容安定)のみ長期 immutable を維持。

恒久策として、ビルド時のアセット・フィンガープリント(内容ハッシュ付きファイル名)+ immutable 復活は別途検討の余地あり。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions