ルーレット名前抽選 — ルーレット・チーム分け・公平なくじ引き
名前のリストを貼り付けて鮮やかなルーレットを回し、当選者を決定できます。複数名を一度に選ぶ「Pick-N」モードや、ランダムなグループに分ける「Teams」モードへの切り替えも可能です。当選者を除外して再スピンすれば、次点の抽選もスムーズに行えます。抽選処理はすべて端末上で実行されるためサーバー側の行数制限はなく、10,000件以上のリストでも快適に動作します。端末の暗号学的乱数生成器と棄却サンプリングを用いたFisher–Yatesシャッフルにより、単なる近似ではなく完全に均等な確率での抽選を実現しています。
活用事例
ルーレットを使ってランダムに名前を抽選する方法
生徒やチームメンバー、応募者の名前を一行に一人ずつ入力または貼り付けます。リストはこのブラウザに自動保存されます。
「Spin」をクリックします。ルーレットが加速し、4–6秒かけて減速しながら、暗号学的な乱数によって選ばれた場所で停止します。
針が指した名前が当選カードにポップアップ表示され、タイムスタンプとともに履歴リストに記録されます。
当選者を除外して次の順位を再スピンしたり、「Pick-N」に切り替えて重複のない複数名を一度に抽選したり、「Teams」に切り替えて全員を2つ以上の均等なグループへランダムに配分して名簿をコピーしたりできます。
よくある質問
- 名前リストはどこかにアップロードされますか?
- いいえ。リストはお使いのブラウザのローカルストレージにのみ保存され、サーバーへ送信されることはありません。リストをクリアすれば完全に削除されます。
- ルーレットの抽選は本当に公平ですか?
- はい。停止位置の決定には、暗号処理で使われるcrypto.getRandomValuesを用い、剰余バイアス(偏り)を排除する棄却サンプリングを組み合わせています。すべての項目が完全に同一の確率で選ばれます。
- 何件まで名前を追加できますか?
- システムによる上限はありません。抽選処理はサーバーへのリクエストではなくブラウザ内で配列を一度走査するだけなので、10,000件以上の名前でも問題なく貼り付け、スピン、シャッフルが可能です。実質的な上限はプランではなく端末のメモリに依存します。数千件を超えるとルーレットの幅が狭くなり見づらくなるため、その規模ではPick-NやTeamsモードのご利用をおすすめします。
- リストをランダムなチームに分けるにはどうすればよいですか?
- Teamsモードに切り替え、チーム数を設定して「Split」をクリックします。Fisher–Yatesシャッフルされたリストが各チームへ順番に均等配分されるため、全員が必ずどれか一つのチームに属し、チーム間の人数差も最大で一人以内になることが保証されます。単一抽選モードを繰り返す方法では同じ人が複数回選ばれる可能性があるため、均等なチーム分けはできません。
- 同じ人が二度当選することはありますか?
- ルーレット上に名前を残したままにしている場合のみ起こり得ます。抽選ごとに「Remove & respin」を使えば、ラウンドごとに重複のない当選者を確定できます。
- ルーレットには何人まで名前を表示できますか?
- 厳密な上限はありません。文字が読みやすいのは概ね30–40件程度までです。それを超えると枠が細くなるため、件数が多い場合はPick-Nモードが適しています。
- Pick-Nモードは何が違うのですか?
- ルーレットの回転を省き、リストの暗号学的シャッフルコピーから指定されたN名を一瞬で抽出します。一度の抽選内で重複が発生しないことが保証されます。
- 作成したリストは明日も残っていますか?
- はい、同じ端末とブラウザであれば、再訪問時もローカルストレージに保持されます。プライバシー保護のため、他の端末とは同期されません。
抽選の「真の公平性」とは(そして一般的なツールで偏りが生じる三つの理由)
多くの名前抽選ツールは、ランダムに見えて実際には偏りがあります。以下の三つの不具合はいずれも外見からは判断できず(ルーレットは回り、名前は選ばれるため)、重要な用途で使用する抽選ツールではどのアルゴリズムを採用しているかが明記されている必要があります。
| 手法 | 抽選の仕組み | 生じる偏り | 判定 |
|---|---|---|---|
| Math.random() % n | 浮動小数点数をスケーリングし、剰余を取得 | 剰余バイアス — 先頭寄りのインデックスが選ばれやすく、生成器も暗号学的に安全ではない | コイントス程度なら問題ないが、景品の抽選には不適 |
| 単純なシャッフル(各要素を任意の要素と交換) | リストをループしながらランダムなペアを入れ替える | 数学的に非一様:特定の順列の出現頻度が高くなる | 公平に見えるが、公平ではない |
| Fisher–Yates / Durstenfeld シャッフル | リストを末尾から走査し、自身またはそれ以前の要素と交換する | なし — すべての順列が均等な確率で出現する | 1964年以来、標準として認められている正確なアルゴリズム |
| crypto.getRandomValues + 棄却サンプリング | OSのエントロピープールからバイト値を取得し、範囲を歪める値を破棄する | 偏りなし。過去の抽選結果を知っていても予測不可能 | 本ツールが採用している方式 |
- 棄却サンプリングは多くの実装で見落とされがちです。例えば256通りのランダムなバイト値を10名のリストに割り当てると、最初の6名が当選する確率がわずかに高くなります。範囲外の余り値を破棄することで、この偏りを完全に排除できます。
- 本ツールの処理容量はサーバーのクォータではなくお使いのブラウザによって制限されるため、10,000件以上のリストでも快適に貼り付けて抽選できます(抽選処理全体が配列を一度走査するだけで完了するためです)。
- 当選者を除外して再スピンすれば、純粋な次点抽選が行えます。一方、Pick-Nモードは一度のシャッフルで重複のない複数名を一括抽出するため、クラスをチーム分けする際などに最適です(単一抽選を繰り返すと、毎回除外しない限り同じ名前が選ばれる可能性があります)。
プライバシー重視設計。名前の抽選はすべてブラウザ内で実行され、リストはこのブラウザのローカルストレージにのみ保存されます。サーバーへ送信されることは一切ありません。