ルーレット・抽選メーカー
選択肢を入力してスピン、またはくじ引き抽選。暗号論的に安全な乱数と Fisher-Yates シャッフルで、どの項目も同じ確率で選ばれます。URLで共有・ブックマーク可能。
0 / 20
使い方
【ルーレット(スピン)モード】テキストエリアに選択肢を1行ずつ入力し、「スピン!」ボタンを押すと3〜5秒のアニメーションの後に当選項目が中央に大きく表示されます。プリセットボタン(今日のランチ、メンバー選び、何でも決めて)をクリックすると、すぐに使えるサンプル項目をワンタッチで挿入できます。「当選済みを除外」をONにすると、前回までに選ばれた項目を次回のスピンから外す機能で、ランチの連続ループや当番の連続当選を防ぐことができます。直近10件の履歴が画面に残るので、誰が当たったかをさかのぼって確認できます。
【抽選(くじ引き)モード】候補リストを入力し「当選者数」を設定してから「抽選する」ボタンを押すと、指定人数が重複なしで無作為に選ばれます。当選者は0.5秒間隔のフェードインで1人ずつ発表されるため、プレゼント抽選や班決めなどの場で使うと盛り上がります。
【URLシェア・ブックマーク】「URLで共有」ボタンを押すと、現在の項目リストをURLに埋め込んでクリップボードにコピーします。そのURLをブックマークするか、チャットやSNSで共有するだけで、いつでも同じルーレットを再現できます。項目はサーバーに保存されないため、プライバシーの心配もありません。
【利用シーン】ランチ・飲み会のお店決め、グループの順番・当番・班決め、授業での指名、配信企画のプレゼント抽選やコメント採用、罰ゲーム・お題決めなど幅広く使えます。配信用途では OBS のブラウザソースにページURLを設定すると、画面にそのまま取り込めます(Phase 2 で OBS 特化版をBOOTH提供予定)。
しくみの解説:なぜ「公平」なのか
【独自観点A: Math.random() と crypto.getRandomValues() の違い】JavaScript の標準乱数 Math.random() は「線形合同法」などの擬似乱数(PRNG)で生成されます。内部状態(シード)が決まれば出力列は再現可能であり、周期もあるため「誰にも予測できない」という意味での公平性は担保されません。MDN の公式ドキュメントも「does not provide cryptographically secure random numbers(暗号的に安全な乱数を提供しない)」と明記しています。本ツールは OS が収集するエントロピー(マウス操作・割り込みタイミング等のノイズ)由来の crypto.getRandomValues() を使います。これは暗号論的に安全な乱数生成器(CSPRNG)であり、過去の出力から次を予測することができません。「抽選の公平性=当選者がツール提供者にも事前に予測・操作できないこと」という意味で、配信視聴者・参加者双方が結果を信頼できる根拠になります。
【独自観点B: Fisher-Yates シャッフルと「ナイーブシャッフル」の落とし穴】一見公平に見える array.sort(() => Math.random() - 0.5) というコードが巷で使われていますが、これは均一なシャッフルを生みません。比較関数が一貫性を欠くため、ソートアルゴリズムの特性に依存して特定の順列が出やすくなる偏りが発生します。本ツールが採用する Fisher-Yates シャッフル(Durstenfeld 版)は「末尾から順に、まだ確定していない要素から1つを等確率で選んで入れ替える」アルゴリズムです。たとえば3要素 [A, B, C] の場合、全順列6通り(ABC/ACB/BAC/BCA/CAB/CBA)がそれぞれ確率 1/6 で生成されることを数学的に証明できます。出典は Ronald Fisher & Frank Yates の 1938 年の統計表(シャッフルアルゴリズムの原典)と Knuth の TAOCP(The Art of Computer Programming)Vol.2 §3.4.2 です。
よくある質問
- 結果は本当にランダム(公平)ですか?
- はい、公平です。本ツールは crypto.getRandomValues()(暗号論的に安全な乱数)を使い、Fisher-Yates シャッフルで全順列を等確率(1/n!)で生成します。Math.random() のような擬似乱数は使いません。MDN の公式ドキュメントが「Math.random() は暗号用途に不適」と明記しているように、予測可能な乱数ではなく OS 由来のエントロピーを使うことで、誰にも結果を事前に予測・操作できない真の公平性を実現しています。
- 作ったルーレットを保存・共有できますか?
- 「URLで共有」ボタンを押すと、項目リストを Base64 エンコードして URL に埋め込んだリンクをコピーできます。そのURLをブックマークすれば毎回同じルーレットを再現でき、チャットや SNS で共有すれば相手にも同じルーレットが開きます。入力内容はサーバーに保存されないため、個人名や社内情報を含む項目でも安心して使えます。
- OBSなど配信ソフトに取り込めますか?
- OBS の「ブラウザソース」として本ページの URL を設定すると、画面にそのまま表示できます。現バージョンは汎用ウェブページとして動作します。背景透過・カスタムカラー・効果音プリセットに対応した配信特化版を Phase 2 で BOOTH にて提供予定です。詳細が決まり次第、本ページでご案内します。
- 最大で何項目まで入れられますか?
- 1項目あたり最大50文字、最大20項目まで入力できます。20項目を超えた分は自動的に無視されます。重複する項目は除去されず許容されるため、「ラーメン」を2つ入れればラーメンが選ばれる確率が2倍になります。これを利用した確率の重み付けが可能です。
- 抽選で同じ人が連続して当たることはありますか?
- 単発スピン(ルーレットモード)は毎回全候補が対象なので、理論上は連続当選もあり得ます。防ぐには「当選済みを除外」をONにすると、前回までの当選者を候補から自動的に外せます。全員が当選済みになった時点で自動リセットして全候補が復活します。抽選モード(くじ引き)は1回の抽選内で重複なしに抽出するため、同じ人が2回選ばれることはありません。
数値のみのランダム用途(パスワード生成)には「パスワード生成」ツールをご利用ください。企画の制限時間管理には将来追加予定のカウントダウンタイマーが便利です。