Cache Casino ができるまで — 速さと stale 事故を同時に可視化するキャッシュ戦略シミュレーターの設計
Cache Casino ができるまで
キャッシュは、入れた瞬間に速くなります。
そして、入れた瞬間から「どこが真実か」を難しくします。
この矛盾を、そのまま遊べる形にしたのが Cache Casino です。
CDN、ISR、Redis、DB Query Cache、Service Worker などのキャッシュ層を積み、
さらに「管理画面で本文を修正」「Webhook 遅延」「在庫更新」みたいな運用イベントを足すと、
- 速度はどれだけ上がるか
- 鮮度はどれだけ削れるか
- どの事故が表面化するか
を一気に見られるようにしました。
何を面白がるサービスか
このサービスの主役は、アルゴリズムでもベンチマークでもなく、キャッシュの気持ち悪さ です。
速いのに、正しくない。
誰も落ちていないのに、ユーザーごとに見ている真実が違う。
しかも、そのズレは運用イベントが起きるまで見えにくい。
技術者ならたいてい一度は見たことのある、
「性能改善の成功体験が、整合性事故の発見を遅らせる」
という状態を、診断 UI として切り出しました。
実装方針
今回は AI を使っていません。
理由はシンプルで、
- コストなしで何度でも回せる
- 結果の世界観をこちらで制御しやすい
- キャッシュ事故はロジックだけでも十分に“あるある”を再現できる
からです。
内部では、
- アプリの前提プリセット
- キャッシュ層のプリセット
- 運用イベントのプリセット
を持ち、それぞれに
- 速度への寄与
- 鮮度への悪影響
- 事故率への寄与
を数値で設定しています。
スコアリングの考え方
Cache Casino では、結果を3軸で返しています。
速度鮮度事故率
速度だけ高くても、鮮度が死んでいれば意味がありません。
逆に鮮度だけ高くても、Origin が全部抱えていれば負荷で死にます。
そこで、
speedScore
freshnessScore
incidentScore
を別々に持ち、最後の incidentScore は
- キャッシュ層の数
- イベントの重なり
- stale しやすさ
- 無効化責務の複雑さ
をまとめて加算する形にしています。
これにより、
- キャッシュを積みすぎると事故率が伸びる
- でも薄すぎると速度が死ぬ
- 運用イベント次第で一気に stale 地獄へ寄る
という、わりと現実に近いバランスになりました。
UI の整理
今回いちばん大事にしたのは、初見で意味が伝わること でした。
Spec Roulette で学んだのは、世界観だけ先に立つと「で、何をするページ?」になりやすいことです。
なので Cache Casino では、画面構成をかなり素直にしています。
- アプリの前提を選ぶ
- キャッシュ層を積む
- 運用イベントを足す
- 配当として速度・鮮度・事故率を見る
- どこで stale になるかトレースする
見た目は少しカジノっぽくしていますが、
情報の読み方そのものはかなり真面目です。
DB とランキング
永続化するのはランキングに必要な最小情報だけです。
CacheCasinoRun
├── playerName
├── presetId
├── layerIds[]
├── eventIds[]
├── speedScore
├── freshnessScore
├── incidentScore
├── incidentTitle
└── stackName
これで、
- どんな構成が一番事故ったか
- どの前提で地獄を引いたか
- 速かったのに危険だった構成は何か
をあとから眺められます。
技術的においしいポイント
このサービスは派手な割に、実装はかなり軽いです。
- AI 不要
- 画像生成不要
- 決定的ロジックで十分面白い
- Prisma + 単純 API + CSS Modules で閉じる
その代わり、企画の芯が弱いと一気に薄くなるタイプでもあります。
だからこそ、
- 速度と鮮度はトレードオフ
- 事故は運用イベントで顔を出す
- stale は“遅い”より説明しづらい
という技術者の実感を、ちゃんと UI に落とすことを優先しました。
今後の伸ばし方
まだ広げる余地はあります。
- 実際のキャッシュ戦略テンプレートを投稿できるようにする
revalidateTagや purge 方式の違いを比較できるようにする- AI で「この構成だと何が一番危ない?」をレビューさせる
- 実案件の構成図っぽくレイヤーを組める上位版にする
特に最後は相性がよくて、
構成図を見ながら「この invalidation、誰が責任持つの?」をその場で炙り出す道具にできます。
まとめ
Cache Casino は、性能改善の気持ちよさと、整合性事故の気持ち悪さを同じ画面に置いたサービスです。
速くするのは楽しい。
でも、速くした後に「どこが真実か」を説明できない構成は、たいてい後で運用コストとして帰ってきます。
その不穏さを、少し笑える形で触れるようにしたのがこのサービスです。