抽選ルーレット

6 項目
123456

当選者はホイールが動く前にcrypto.getRandomValuesで抽選され、アニメーションはその区画を狙って停止します。回し方が結果を変えることはなく、どの項目も確率は完全に同じです。同じ名前を複数行に書けば、その分だけ区画が増えます。

入力した内容が保存・記録・共有されることはありません。

名前や数字のリストを貼り付けて、ルーレットを回すだけでランダムに1つ選べます。当選者はルーレットが動く前に決まるため、アニメーションが結果に影響することはありません。

使い方

  1. 1行に1つずつ、項目を入力または貼り付けます。
  2. 「回す」を押します。停止したときに当選者が表示されます。
  3. 当選者を削除してもう一度回せば、重複なしで抽選できます。

ルーレットが回る前に当選者が決まっている理由

処理の順序こそが、この設計のすべてです。まずブラウザの暗号学的乱数源から棄却サンプリングで値を抽選するので、すべての項目の当選確率は完全に等しくなります。そのあとで初めて最終的な回転量を計算します。回転しているように見えるだけの周回数に、すでに当選した区画に針が止まるためのずれを加えたものです。

すぐ思いつく別の方法は、ランダムな勢いでルーレットを回し、針の下に止まった区画を読み取ることです。そのほうが公正に感じられますが、実際には公正さで劣ります。結果がアニメーションに左右されるからです。イージング曲線、フレームレート、物理計算での浮動小数点の丸め、バックグラウンドのタブに対するブラウザの処理制限。どれも一様ではなく、中には特定の区画を一貫して有利にするものもあります。遅いノートパソコンで少し違う動きをするルーレットは、少し違う確率分布を持つルーレットなのです。

先に抽選すれば、アニメーションは純粋な演出になり、それが本来あるべき姿です。回転を見ていても、回転中にページを再読み込みしても、結果は同じです。

重み付けと、複数の当選者を選ぶ方法

ある項目を当たりやすくする唯一の方法は、それを複数回書くことです。重複はまとめずにそのまま残し、1行が1区画になります。10項目のリストに3回登場する名前は10区画中3区画を占め、10回に3回当たります。

これは意図的な設計です。設定画面に隠れた重み付けの欄は見ている人の誰にも見えませんが、ルーレットの3区画を占める名前なら、その場の全員が目で見て数えられます。参加者に公正だと納得してもらう必要がある抽選なら、重み付けはルーレットの上に見えているべきです。

重複なしで複数の当選者を選ぶには、回して当選者を削除し、また回します。削除するたびにその区画がなくなるので、以降の抽選は残りの中から行われます。チーム分け、発表者の順番、順位付きの賞品を決めるには、これが正しい方法です。選び直すのではなく削除することで、ルーレットが目に見えて小さくなっていくので、これも全員が追いかけられます。

リストの保存場所

指定しない限り、どこにも保存しません。保存のチェックボックスをオンにすると、リストはローカルストレージに書き込まれます。これはその端末のブラウザ内にある、サイトごとの保存領域です。アカウントではなく、同期もされず、このサイトを含めどこにも送信されません。

そこから次のことが言えます。ノートパソコンで保存したリストは、スマートフォンにはありません。ブラウザのデータを消去すると消えます。プライベートウィンドウからは見えず、同じマシンの別のブラウザからも見えません。チェックを外すとすぐに消去されます。

これは、登録を求めないことと引き換えのトレードオフです。同じリストを2つの場所で使いたいなら、メモに保存しておいて貼り付けてください。

ルーレットが適さない場面

授業での指名、朝会の順番、振り返り会の進行、食事の場所選び、主催者をすでに信頼している人たちの間での景品抽選なら、ルーレットはまさにうってつけです。すばやく、目に見え、誰かが決めるという気まずさをなくしてくれます。

結果を見ていなかった人や、運営者を疑う理由がある人に対して、結果を証明しなければならない場面には向いていません。ここには証拠を生むものが何もありません。シードは公開されず、事前のコミットメントもなく、スクリーンショットはスクリーンショットが存在することしか証明しません。お金や法的な重みがかかった抽選には、公開されたシード、応募締め切り前のコミットメント、あるいは第三者の立会いといった、文書化された手順が必要で、それはまったく別の種類の仕組みです。

抽選が見えると受け止め方が変わる

裏で決めて結果だけを伝えるのも、全員が見ている前で抽選するのも、手続きとしてはまったく同じです。それでも受け手の印象はまるで違います。手続き的公正に関する研究では、プロセスが公正で透明だと感じられるとき、人は気に入らない結果でも受け入れるという結果が一貫して得られています。目に見えるランダム抽選は、その透明性をもっとも安上がりに用意する方法です。

だからこそ、実際のランダム性が本質ではない場面でもホイールは役に立ちます。レトロスペクティブで誰が最初に話すかを進行役が操作するのではないかと疑う人はいません。価値があるのは、選ぶという気まずさを個人から取り上げて、全員が見える仕組みに預けられることです。

同じ理屈で、引き直すよりも当選者を削ってホイールを縮めるほうがうまくいきます。当選者を取り除いて残りの区画が広がれば、確率が変わったこととその変わり方を全員が目で確認できます。最初とまったく同じに見えるリストからもう一度引くよりも、はるかに納得しやすいのです。

ホイールが本当に役立つ場面

教室で指名にホイールを使うと、教師の記憶に頼るよりも発言の機会が均等に行き渡りますし、指名されたこと自体が評価の表れだという含みもなくなります。よく使われる工夫は、出た名前を毎回取り除くことです。そうすれば誰かが二回目に当たる前に、クラス全員が一巡します。

スタンドアップやレトロスペクティブでは、年次や立場に左右されずに発言順を決められます。これは分散チームほど効いてきます。最初にミュートを解除する人はたいてい毎日同じ人だからです。ファシリテーションでは、意外だったことは何か、何に足を引っ張られたかといった問いをホイールに入れておくと、毎スプリント同じ三つの所見しか出てこないという型を崩せます。

仕事以外でも、話し合うコストのほうが決めるコストより高い決断を引き受けてくれます。どの店にするか、誰が先に行くか、同じくらい良い四つの選択肢のどれにするか。ホイールはあなたより上手に選べるわけではありません。会話を終わらせるのが上手なだけです。

その場にいなかった人にも信じてもらえる抽選にする

金銭や義務が絡む抽選では、画面録画は何の証明にもなりません。結果が映っているだけで、その結果が公正に決まったことは示せないからです。定番の作り方はコミット・アンド・リビール方式です。応募を締め切る前に、応募者リストと秘密のシードを合わせたハッシュを公開します。抽選後にリストとシードを公開すれば、誰でも当選者を再計算し、ハッシュが事前に公開したものと一致するか確認できます。

シードそのものを、誰も操作できず後から誰でも検証できるものから取ってくることもできます。たとえば指定した高さのビットコインブロックのハッシュや、公開されているランダムネスビーコンです。こうすれば、主催者が気に入った結果が出るまでシードを試し続けるという余地すら消えます。

法規制のある懸賞では、要件を決めるのは暗号技術ではなく法律であり、手順の文書化や第三者の立会いが求められるのが一般的です。このツールが対象にしているのは、そこまでの水準に達しない抽選、つまりほとんどすべての抽選です。

これは一般的な説明であり、法的助言ではありません。お住まいの地域の賭博規制や消費者保護のルールが適用される販促であれば、そちらの要件が優先します。

重み付けは見える形のままで

このツールで当選確率を上げる方法は、同じ項目を複数回並べることだけです。これは機能が足りないのではなく、意図的な制約です。設定パネルの重み付け欄は見ている人には見えませんが、十区画のうち三つを占めている名前なら、その場の全員が数えられます。

考えるのも簡単になります。十のうち三つなら三十パーセントで、ホイールの三十パーセントがそのまま目に入ります。重み1.0の項目の隣に重み3.0があると、誰もやらない計算を全員に強いたうえ、その計算が思ったとおりのものだと信用してもらう必要も出てきます。

購入枚数が人によって違う福引きのように、本当に細かい重み付けが要る場合でも、チケット一枚につき一行のリストが正直な表現であることに変わりはありません。販売データからそのリストを作るのは、機能として用意するまでもない二行のスクリプトです。

アニメーション、動きへの敏感さ、結果の読み取り

回転するホイールは大きく動く要素であり、人によっては無害な飾りではありません。前庭機能の障害があると、回り続ける動きは本当に不快なものになります。だからこそOSは動きを減らす設定を用意していますし、インターフェースはそれを尊重すべきなのです。

当選者はアニメーションが始まる前に決まっているので、アニメーションはあくまで演出です。短くしても飛ばしても結果は何も変わりません。これはインターフェース上のあらゆる動きが備えるべき性質です。取り除いても情報が失われないことです。

結果は針の位置だけでなく、テキストとしても存在する必要があります。当選者をライブリージョンで知らせれば、スクリーンリーダーが読み上げてくれますし、目を離していた人、途中から参加した人、ホイールのラベルが小さすぎて読めない解像度で画面共有を見ている人にも結果が伝わります。

よくある質問

この抽選は本当に公平ですか?
はい。処理の順序がその根拠です。当選者はまずcrypto.getRandomValues(ブラウザの暗号学的に安全な乱数源)から棄却サンプリングで抽出され、どの項目も有利になりません。回転角度はそのあとで、その区画に止まるように計算されます。多くのルーレットは逆で、アニメーションを走らせて針の下に来た区画を結果とするため、フレーム時間やイージングが抽選の一部になってしまいます。
特定の名前の当選確率を上げられますか?
はい。複数行に同じ名前を書いてください。重複はまとめられず、1行が1区画になります。10行のうち3行が同じ名前なら確率は30%です。重み付けはこの方法だけです。設定画面に隠れず、ルーレット上で見えるようにするためです。
リストはどこに保存されますか?
チェックを入れた場合のみ、このブラウザのこの端末内にだけ保存されます。保存先はローカルストレージで、端末の外に出ることはなく、本サイトにも第三者にも送信されません。チェックを外せばすぐに消えます。ブラウザのデータを消去した場合も削除されます。
別の端末でも同じリストが使えますか?
いいえ。アカウントも同期もないため、パソコンで保存したリストがスマートフォンに出てくることはありません。登録を求めず、データをサーバーに持たないことの代償です。
重複なしで複数当選させるには?
回して「当選者を削除」を押し、また回してください。削除するたびにその項目がルーレットから外れるので、次の抽選は残りから行われます。チーム分けや順位付きの景品を決めるときの一般的な方法です。
項目はいくつまで入れられますか?
最大500件です。40件を超えると区画のラベルは小さすぎて読めないため非表示になりますが、回転も当選者の表示も通常どおり動作します。

最終更新:

問題を報告

操作手順、期待した結果、実際の結果を記載してください。秘密情報や個人情報は削除してください。

関連ツール