ToolActToolAct

決定ルーレット

ルーレットに決めてもらいましょう、優柔不断さよさらば

選択肢リスト8/15
🍕 吃火锅
🎮 打游戏
📺 追剧
📚 看书
🚶 散步
🛌 睡觉
🎵 听音乐
🧹 做家务
当選履歴

記録がありません — 回してみよう!

決定ルーレットとは?

決定ルーレットは、あなたの決定を助ける楽しいツールです。複数の選択肢で迷っている時、すべての選択肢をルーレットに入力し、スピンをクリックして、偶然に決定してもらいましょう。

よくある使用シーン:

  • 今日何を食べる?レストランの候補をルーレットに追加
  • 週末どこに行く?行き先をルーレットに追加
  • 何の映画を見る?映画の候補をルーレットに追加
  • チーム活動の選択、公平な決定

使い方

使い方

  1. 入力ボックスに選択肢名を入力し、Enterキーまたは「追加」をクリックしてください
  2. 複数の選択肢を追加できます(最大15個、各選択肢は最大20文字)
  3. 中央の「SPIN」ボタンをクリックするとホイールが回転します
  4. ホイールが停止するまで待ち、ランダムに選ばれた結果を確認してください

公平性のヒント

  • 回転前にも誰もが読み取りやすいよう、選択肢は短く、長さを揃えておきましょう。
  • 重要な決定では、回転前に選択肢リストを確定させ、不利な結果を見てから内容を変更しないようにしましょう。

利用シーン

グループの選択に可視化されたルーレットを回す選択肢を1つずつ追加し、Enterで素早く追加して、授業や会議、配信、家族の決定で透明性のあるランダム選択を行います。結果はアニメーション開始前にcrypto.getRandomValuesで決定されるため、イージングカーブは装飾であり、オフラインで同じシードを再生しても同じスライスに止まります。本番前に再現可能な練習ラウンドを仕組むのに活用できます。
読みやすいように選択肢リストを短く保つルーレットは15件までに制限され、長いテキストはスライス上で切り詰められるため、名前やタスク、トピック、ご褒美、家事、短いレストラン選択肢など、短い内容に向いています。2件入力すると実質的にコイン投げと同じになり、15件だと各スライスがわずか24度の弧になるため、数語以上のラベルは読みにくくなります。スピン中に視聴者が読める長さに収めましょう。
無関係な決定間でリセットする新しいラウンドの前にリセットまたはデフォルトオプションの再読み込みを行い、古いエントリや色、回転、前回の結果が次の選択を混乱させないようにします。各スピンは残りのスライスセットから独立同一分布の結果を引くため、連続で同じ選択肢が選ばれてもそれは正しい一様動作でありバグではありません。公開の場で使用する場合は参加者リストとルールを事前に定義してください。
スライスをカラーコードして配信で結果を見やすくするプレゼンや授業、配信の設定でコントラストのあるスライス色を割り当て、視聴者が切り詰められたラベルを推測せずにルーレットが止まる位置を追跡できるようにします。明るい色と控えめな色を交互にすると、減速後の最終停止位置が目立つようになり、最も読み間違えやすいラベルに最も明るい色を組み合わせることで画面上のエラーを事前に防げます。視聴者が見る画面サイズでレイアウトをテストしましょう。
くじ引きや抽選の前にルールを文書化する実際の賞品やシフト割り当て、参加者の選出が絡む場合は、回す前にエントリリストと除外条件、日付を記録しておき、後から結果を説明できるようにしましょう。オプションリスト、スピンのタイムスタンプ、停止スライスのスクリーンショットを記録してください。ルーレット自体は監査証跡を保持しないため、翌日に「なぜこの名前が選ばれたのか」という質問が出てきたらスクリーンショットが領収書となります。

仕組み

ルーレットは決定論的ランダム抽選を重ねた Canvas 2D 描画で構成されています。各スライスは ctx.beginPath()、ctx.moveTo(cx, cy)、ctx.arc(cx, cy, r, startAngle, endAngle)、ctx.fill() でレンダリングされ、N 個の均等な選択肢はそれぞれ 2π/N ラジアンの弧を持ちます。15 スライスの場合は各 24 度で、入力が 15 個に制限されているのはラベルの可読性を保つためです。当選スライスはアニメーションの前に決定されます。32 ビット符号なし整数を crypto.getRandomValues(new Uint32Array(1))[0] で生成し、N の剰余を取ったものが答えとなります。アニメーションは fullSpins * 2π + (2π - winnerIndex * sliceAngle - sliceAngle / 2) という目標回転角を計算し、キャンバス上部のポインタが選ばれたスライスの中央に向くようにします。requestAnimationFrame 内で easeOutCubic の f(t) = 1 - (1-t)^3 や easeOutBack などのイージングカーブで補間し、物理的なルーレットが減速する動きを模倣します。crypto.getRandomValues は Web Crypto API で規定された CSPRNG であり、OS のエントロピープールからシードされるため、Math.random とは異なりページの状態を読むことで結果を予測することはできません。加重版は長さ N の累積確率配列を構築し、O(log N) の二分探索で乱数値をマッピングします。出力はすべて視覚的で揮発性のものであり、何もログに記録されないため、監査証跡(タイムスタンプ、選択肢リスト、スクリーンショット)はページが更新される前に外部で取得する必要があります。

  • Canvas 描画: 各スライスは ctx.arc(cx, cy, r, startAngle, endAngle) で sliceAngle = 2π / N。15 選択肢で各 24 度の弧となり、これが実用的な可読性の上限。
  • 当選者の選定は crypto.getRandomValues(new Uint32Array(1))[0] % N を使用。Web Crypto CSPRNG で OS エントロピからシードされ、公平な単発抽選に適するが、再生可能な抽選には不向き(監査証跡なし)。
  • アニメーションはディスプレイのリフレッシュレート(通常 60 Hz)の requestAnimationFrame で実行され、easeOutCubic の f(t) = 1 - (1-t)^3 や easeOutBack でわずかなオーバーシュートを表現。カーブは装飾であり、当選者はすでに決定済み。
  • 最終回転角は targetRotation = fullSpins * 2π + (2π - winnerIndex * sliceAngle - sliceAngle / 2) で、上部ポインタがスライスの中央に位置するようになる。
  • 加重オプションモードでは重みのプレフィックスサム配列を構築し、二分探索で一様乱数をスライスにマッピング(O(log N))。逆 CDF サンプリングと等価。
  • N が 15 以下で抽選範囲が 2^32 値の場合はモジュロバイアスが無視できる(バイアス ≈ N / (2 * 2^32) ≈ 1.7×10^-9)。 rejection-sampling ループは不要。
  • 各スピンは独立同一分布。連続で同じ選択肢が選ばれてもそれは正しい一様動作でありバグではない。スピン間の重複排除には外部記録が必要。

使用例

ランチ選び

選択肢: ピザ、寿司、バーガー、タコス、サラダ → 回す → 結果: 寿司

チームアクティビティ

選択肢: ボウリング、カラオケ、脱出ゲーム、ミニゴルフ → 回す → 結果: 脱出ゲーム

映画ナイト

選択肢: アクション、コメディ、ホラー、恋愛、SF → 回す → 結果: コメディ

よくある質問

ホイールの回転は本当にランダムですか?

はい。選ばれるセグメントは crypto.getRandomValues によって決定されたあと、ホイールがそのセグメントに止まるようアニメーションします。視覚的な回転は演出にすぎず、結果は最初に決まっています。各回転は過去の結果から独立しています。

すべてのセグメントは等確率ですか?

はい。各選択肢は同じサイズのスライスを得て、各スライスの確率も等しくなります。重み付けや偏りのあるモードはなく、すべての選択肢が同じ確率で選ばれます。

回転アニメーションは結果に影響しますか?

いいえ。アニメーションは演出です。結果が先に計算され、その後ホイールがそれを示すように回転します。途中でアニメーションを停止しても、選ばれるセグメントは変わりません。

ホイールの設定をセッションをまたいで保存できますか?

いいえ。選択肢は現在のセッション中のみ保持されます。タブを閉じたり更新したりするとリストは失われます。再利用する必要がある場合は、閉じる前に選択肢をコピーしておいてください。

重要な決定に使ってもよいですか?

ランチや発表順、ドラフトなど、どの選択肢でも受け入れ可能で、見える形のランダム性が遺恨を避けてくれる、低リスクなグループの選択にお使いください。選択肢間で結果が大きく異なるような決定を委ねるのは避けてください。ホイールはトレードオフを評価できません。

同じ選択肢が連続で選ばれることがあるのはなぜですか?

各回転は独立しています。選択肢が 3 つの場合、同じ選択肢が連続で 2 回選ばれる確率は 1/3 ≈ 33%、10 個の場合は 10% です。繰り返しは奇妙に感じるかもしれませんが、本物の乱数選択では数学的に予想される結果です。

選択肢のリストはアップロードされますか?

いいえ。ホイールは完全にブラウザ内で動作します。オプトインすればローカルに保存されますが、サーバーには一切送信されません。