FAIR DRAW LAB

31,103枚、ぜんぶ同じ重さのくじ。

2026-09-18

人気の聖句も、めったに開かれない聖句も、通常ガチャでは同じ条件からスタートします。ここでは「本当に公平なの?」という疑問に、まずは30秒で答えます。もっと知りたい人は、その先の技術の奥までどうぞ。

くじの数31,103通常ガチャの抽選枠
重み付けなしどの枠も1票ずつ
履歴補正なし前回の結果で確率を変えない

巨大なくじ箱を想像してみてください

通常ガチャでは、聖書全体を抽選用に整理した31,103個の枠を用意しています。イメージは、同じ大きさ・同じ重さのくじを31,103枚入れた箱です。

ヨハネ3:16だけ特別に増やしたり、図鑑でまだ持っていない聖句をこっそり出やすくしたりはしません。「今日のあなたにはこれが必要そう」といったAI判定も、通常ガチャの確率には入れません。

翻訳によって節の区切り方が少し違うため、内部では共通の抽選IDを使っています。難しい話はページ下部の「技術の奥まで見る」にまとめています。

「詩篇ばかり出る気がする」のは、えこひいき?

1節ごとの確率は同じでも、書巻ごとの節数は違います。詩篇のように節が多い書は、書巻全体で見れば当たりやすくなります。これは贔屓ではなく、「くじが多い書は、そのぶん箱の中にも多く入っている」からです。

逆に、節数の少ない書は出会う機会も少なめ。だから66書すべてに出会えた時は、ちゃんと特別な達成にしたいと思っています。

コンピュータのサイコロも、きちんと強いものを

聖句を決める時は、ブラウザに標準で入っているセキュリティ用途にも使われる乱数機能を使います。ゲームの演出などでよく使われる Math.random() は、聖句の当選決定には使いません。

専門用語では crypto.getRandomValues()。名前は少し難しく見えますが、役割はシンプルです。次に何が出るかを予測しにくい、強いサイコロを振っています。

割り切れない時は、無理やり配らない

たとえば「10個の番号を3人に余りで振り分ける」と、4個もらう人と3個しかもらわない人が出ます。コンピュータの大きな乱数を31,103個へそのまま余り算で押し込むと、ものすごく小さいけど同じような偏りが作れます。

なので聖書ガチャは、きれいに同じ数ずつ配れない端っこの値が出たら、その値を使わずもう一度振ります。「少しくらいならいいだろう」とはしません。

この方法の専門名が rejection sampling。避けたい偏りを modulo bias と呼びます。

同じ聖句が2回続いた。バグ?

違います。ランダムは「きれいにばらける機械」ではありません。同じものが続くことも、同じ書が何回か固まることもあります。前回の結果を見て次の確率を調整する仕組みは入れていません。

本文の取得に失敗したら?

別の聖句へ勝手に引き直しません。当選はそのままに、同じ聖句の本文表示だけを再試行します。「読み込みに失敗した結果だけ消える」という見えない選別を避けるためです。

テーマガチャは「箱を小さくする」だけ

「不安なとき」「悲しいとき」などのテーマガチャは、最初から対象をテーマ内へ絞ります。ただし、その小さな箱の中ではどの抽選枠も1票ずつです。

はじめての方へ26枠
不安なとき27枠
悲しいとき27枠
やる気が出ないとき24枠

聖書ガチャが、通常ガチャでやらないこと

  • 人気の聖句をこっそり出やすくする
  • 図鑑未取得を優遇してコンプリートを近づける
  • 前回出た聖句を「また出たら嫌だろう」と減らす
  • 本文取得に失敗した結果を別の当選へ差し替える
  • 聖句にSSR・R・Nのような価値ランクを付ける

もっと深く見たい人へ — 技術の奥まで

ここから先は完全に「好きな人向け」です。読まなくてもガチャは楽しめます。でも、聖書ガチャがどこまで細かく公平さを確認しているか、全部置いておきます。

抽選用の31,103枠とは、正確には何?

翻訳ごとの節区切りの差を吸収するため、内部では共通化した canonical Scripture ID を抽選単位にしています。現在の通常プールは31,103件で、重複はありません。

翻訳によって複数節がひとまとまりで返る場合でも、表示都合で当選確率を変えません。

乱数と偏り対策をコード寄りに知りたい

抽選にはWeb Crypto APIの crypto.getRandomValues() を使用します。ブラウザ実装は、暗号用途に適した擬似乱数生成器を外部の乱数源などから得た値で初期化します。

32bit値を31,103へ写像する際は、2^32 が31,103で割り切れないため、均等に割り当て可能な上限を超えた値を捨てて再取得します。これが rejection sampling です。

「真の乱数」とは表現せず、Web Cryptoが提供する暗号学的に強い乱数値として説明します。

SHA-256は何のため?

SHA-256は、抽選プールの指紋みたいなものです。中身が1文字でも変われば別の値になります。アプリは抽選前に想定した指紋と一致するか確認し、プールが壊れていたら抽選を止めます。

通常ガチャ件数31,103
アルゴリズムfair-draw/v1
重み付けなし
自動除外なし

通常ガチャのプール指紋

bc6fbe0c6855f2e1c32f8c7ad171409b22606e24f28ccc5900e8ea3607dd4dea

テーマガチャのプール指紋

テーマ件数SHA-256
はじめての方へ26f3178b9c83d79e73750c03e469325ec5cb689936e4d020d359db6e786cc71b53
不安なとき27325ef721119f430ea810f208eadc1794d17ab1043ad133194b57028b78a8423a
悲しいとき271303f1124a67a17d812b6ce1a2345f60088e757e1badf6ab6564a1ea704e65b5
やる気が出ないとき2486c3ab3b921f77e00292062cc6fc70b293ed45f7940f128b94777e4a64b11f36
大量に回せば「公平」を証明できる?

大量試行の統計テストは、実装ミスを見つける助けになります。でも「結果がそれっぽく散ったから、乱数生成器は完全に正しい」とまでは言えません。NISTも、統計テストは乱数生成器の適切性を絶対に証明するものではないと注意しています。

だから聖書ガチャでは、試行結果だけでなく、乱数源・写像方法・抽選プール・検証用SHA-256まで一緒に公開します。

参考資料

抽選方式やプールを変更した場合は、このページも同時に更新します。