AI開発収益化ラボ
Cache Casino

Cache Casino ができるまで — 速さと stale 事故を同時に可視化するキャッシュ戦略シミュレーターの設計

Cache Casino ができるまで

キャッシュは、入れた瞬間に速くなります。
そして、入れた瞬間から「どこが真実か」を難しくします。

この矛盾を、そのまま遊べる形にしたのが Cache Casino です。
CDN、ISR、Redis、DB Query Cache、Service Worker などのキャッシュ層を積み、
さらに「管理画面で本文を修正」「Webhook 遅延」「在庫更新」みたいな運用イベントを足すと、

  • 速度はどれだけ上がるか
  • 鮮度はどれだけ削れるか
  • どの事故が表面化するか

を一気に見られるようにしました。

何を面白がるサービスか

このサービスの主役は、アルゴリズムでもベンチマークでもなく、キャッシュの気持ち悪さ です。

速いのに、正しくない。
誰も落ちていないのに、ユーザーごとに見ている真実が違う。
しかも、そのズレは運用イベントが起きるまで見えにくい。

技術者ならたいてい一度は見たことのある、

「性能改善の成功体験が、整合性事故の発見を遅らせる」

という状態を、診断 UI として切り出しました。

実装方針

今回は AI を使っていません。
理由はシンプルで、

  1. コストなしで何度でも回せる
  2. 結果の世界観をこちらで制御しやすい
  3. キャッシュ事故はロジックだけでも十分に“あるある”を再現できる

からです。

内部では、

  • アプリの前提プリセット
  • キャッシュ層のプリセット
  • 運用イベントのプリセット

を持ち、それぞれに

  • 速度への寄与
  • 鮮度への悪影響
  • 事故率への寄与

を数値で設定しています。

スコアリングの考え方

Cache Casino では、結果を3軸で返しています。

  • 速度
  • 鮮度
  • 事故率

速度だけ高くても、鮮度が死んでいれば意味がありません。
逆に鮮度だけ高くても、Origin が全部抱えていれば負荷で死にます。

そこで、

speedScore
freshnessScore
incidentScore

を別々に持ち、最後の incidentScore

  • キャッシュ層の数
  • イベントの重なり
  • stale しやすさ
  • 無効化責務の複雑さ

をまとめて加算する形にしています。

これにより、

  • キャッシュを積みすぎると事故率が伸びる
  • でも薄すぎると速度が死ぬ
  • 運用イベント次第で一気に stale 地獄へ寄る

という、わりと現実に近いバランスになりました。

UI の整理

今回いちばん大事にしたのは、初見で意味が伝わること でした。

Spec Roulette で学んだのは、世界観だけ先に立つと「で、何をするページ?」になりやすいことです。
なので Cache Casino では、画面構成をかなり素直にしています。

  1. アプリの前提を選ぶ
  2. キャッシュ層を積む
  3. 運用イベントを足す
  4. 配当として速度・鮮度・事故率を見る
  5. どこで 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 は、性能改善の気持ちよさと、整合性事故の気持ち悪さを同じ画面に置いたサービスです。

速くするのは楽しい。
でも、速くした後に「どこが真実か」を説明できない構成は、たいてい後で運用コストとして帰ってきます。

その不穏さを、少し笑える形で触れるようにしたのがこのサービスです。