無料枠を半分しか使わない番付にした:呼び出し5回を2回に
すし積む 開発の記録 / 2026年10月
すし積むには、オンラインの番付(ランキング)があります。置き場所は Cloudflare の Workers と D1(データベース)で、無料枠の中で動かしています。この番付サーバーの無料枠の使い方を、半分にしました。何を数えて、何を変えたのか。コミットに残っている実測値で書きます。
無料枠は、みんなで分け合う
Cloudflare の無料枠は、アカウント単位です。そのアカウントの Workers と D1 のすべてで、分け合います。ほかのプロジェクトと同居するなら、番付のほうは、細くしておくに越したことはありません。さらにコミットには、2026年9月1日から、D1 はこの上限で、本当に問い合わせを断るようになったとあります。上限は、「読んだ行数」で、1 日 500 万行です。
一人が遊ぶと、何が起きているか
「一人が一度遊び、点を送り、番付を一度見る」という、一番ふつうの流れで、サーバーへの呼び出しと、読んだ行数を数えました。数え方は、D1 の代わりに node:sqlite を噛ませた Worker を、実際に動かして、です。
| 前 | 後 | |
|---|---|---|
| 呼び出し | 5 | 2 |
| 読んだ行 | 421 | 221 |
| 書いた行 | 1 | 1 |
頭打ちになるのは、読んだ行数です。500 万行を、一人あたりの行数で割ると、無料枠で遊べる人数が出ます。前は 5,000,000 ÷ 421 ≒ 11,876 人(コミットには「約 1 万 1 千人」とあり、割り算とは少しずれています)。後は 5,000,000 ÷ 221 ≒ 22,624 人(コミットでは約 2 万 2 千人)。どちらの数え方でも、1 日あたりの上限が、およそ 2 倍になりました。
変えたのは二つ
1. 順位を、サーバーで数える
それまでは、ゲームのほうが、上位 100 件の一覧を二度引いて、その中から自分を探していました。これを、サーバーが順位を数えて返す形に変えました。数え方は、上位の一定の件数(SCAN)で打ち切る COUNT です。上位にいる人ほど、読む行が少なくて済みます。
2. 前置きの呼び出しを、なくす
点を送る /submit を、text/plain で受けるようにしました。中身は JSON のままです。ただ、この型で送ると、ブラウザが、前置きの確認の呼び出し(OPTIONS)を投げません。呼び出しが、一つ減ります。
なお、共有データベース(アーティファクト側)には、順位を数える仕組みがありません。そちらは、これまでどおり、ゲーム側で数えます。submit が null を返したときだけ、一覧を引く形にしました。
確かめたこと
- 空の番付に二人送ると、1 位・2 位が出る。
- 500 人の番付では、サーバーが数えた順位(「100 位圏外」を含む)が、正しく出る。
- 点を書き換えた申告は、日本語でも英語でも、これまでどおり弾かれる。
分かったこと
数えるのは、お金ではなく、呼び出しと行。
- 無料枠の上限は、いちばん先に尽きるものを数える。ここでは、呼び出しの回数ではなく、読んだ行数でした。
- 「ふつうの一回」を、実測する。一人が遊ぶ流れを一本決めて数えたから、「半分」と言えました。
- 同じ無料枠の話は、10秒ピッタリのランキングにもあります。そちらは、書き込みの回数(KV の 1 日 1,000 回)でした。
この記事の数字は、コミット(2026年9月7日)の記録から取りました。無料枠の上限値(1 日 500 万行など)は、コミットの記述によります。
この話に出てくるもの
- すし積む(作品ページ) — 落ち物パズルのゲーム
- 10秒ピッタリのランキングを、公平にする — 書き込み回数を数えた、別の記録
ほかの記録
- 「しょうがない」を測り直したら、取得の費用は8分の1だった — 「イオンとあみあみは費用が重くて縮められない」は、古い単価に基づく思い込みだった。3つの取得設定で同じページを比べて、描画が丸ごと無駄だと分かった記録。
- 「減るはず」が、二度外れた:AIへの問い合わせを削る話 — トレカ情報アプリで、AI への問い合わせを減らそうとした記録。45%減るはずが4.5%、配備したのに束ねが0回。数え直して見つかったことを、コミットの数字で書いた。
- CrazyGames に落ちた:理由は書かれていなかったので、撮って探した — ゲームポータルの審査に「全体の品質が期待に達していない」とだけ書かれて落ちた。自分で画面を撮って見つけた四つの原因と、測って選んだ直し方の記録。
コメント
感想や、記事の間違いの指摘は、ここへ。書くには、GitHub のアカウントが要ります。
押すと、giscus(giscus.app)と GitHub に接続します。押さなければ、接続しません。詳しくはあつかいに書いています。