このツールとは?
リストシャッフルツールとは、一連の項目をランダムな順序に並べ替えたり、その中からランダムな部分集合を抽出したりするものです。難しいのは偏りなくこれを行うことです。配列をランダムな比較関数でソートするような単純な方法では、特定の並び順が他よりもはるかに出やすい、偏った分布になってしまいます。
このツールはFisher–Yates(Durstenfeld)シャッフルアルゴリズムを使用しています。これは証明可能に一様なランダム順列を得るための標準的な手法で、リストのあらゆる並び順が同じ確率で出現します。
なぜこれを使うのか?
- 本当に偏りのないシャッフル——結果を偏らせるよくある反面パターンsort(() => Math.random() - 0.5)ではなく、Fisher–Yatesを使用。
- 抽選モード:リスト全体をシャッフルする代わりに、ちょうどN個をランダムに抽出。抽選や景品企画に最適。
- 誤って重複した項目があるリスト向けに、シャッフル前の重複削除をオプションで選択可能。
- 名前、タスク、チケット、賞品など、どんなテキストにも対応——1行に1項目。
- プライバシー保護:シャッフルはすべてブラウザ内で行われ、何もアップロードされません。
使い方
- ボックスにリストを貼り付ける。1行に1項目。
- 重複が含まれる可能性がある場合は「シャッフル前に重複を削除」を必要に応じてチェックする。
- 全体を並べ替えるだけならシャッフルをクリック。当選者を選ぶ場合はN項目オプションをチェックし、抽出する数を設定する。
- 結果をコピーする——いつでも再度シャッフルをクリックすれば、新しいランダムな順序や新しい抽選結果が得られます。
例
入力
Alice
Bob
Charlie
Diana
Ethan出力
Charlie、Ethan、Alice、Diana、Bobのようにランダムに並べ替えられたリスト——シャッフルをクリックするたびに結果は変わります。抽選モードを2に設定すると、同じ入力からEthanとAliceだけが得られることもあります——これは1度シャッフルしてから先頭2件を切り出したものではなく、独立したランダムな2件抽選です。
単純なシャッフルが偏った結果を生む理由
sort(() => Math.random() - 0.5)は一見正しそうに見えて実は正しくない、よくあるテクニックです。これはソートアルゴリズムが特定のパターンで特定の回数だけ比較関数を呼ぶことに依存していますが、実際のソート実装はそれを保証していません。実際の影響としては、特定の並び順が他よりも頻繁に出現するシャッフルになります——ちょっと見ただけでは気づきにくいですが、何度も実行すれば統計的に測定できるレベルの偏りです。
Fisher–Yatesはこの問題全体を回避します。ソートアルゴリズムに間接的にランダム性を作らせるのではなく、各位置を残りのランダムな位置と正確に1回だけ直接入れ替えるため、使用している言語のソート実装がどうであれ、一様性が証明されています。
→ 乱数生成器 · UUID ジェネレータ
よくある質問
なぜarray.sort(() => Math.random() - 0.5)を使ってはいけないのですか?
この1行はよく知られた反面パターンです。JavaScriptのsort()は各要素のペアが同じ回数だけ比較されることを保証しないため、結果として得られる順序は特定の並び順に測定可能なほど偏ります——本来のランダム性であれば得られないはずの確率で、一部の項目が先頭や末尾に寄ってしまうのです。Fisher–Yatesはその構造上この問題を完全に回避しており、本ツールが実際に実装しているアルゴリズムです。
このシャッフル順は本当に偏りがないのですか?
はい。Fisher–Yatesはリストを一度だけ走査し、各ステップで現在の項目をまだシャッフルされていない部分から一様ランダムに選んだ項目と入れ替えます。良質な乱数源(JavaScriptのMath.random())があれば、あらゆる可能な並び順が等しい確率で生成されることが数学的に証明されています。
シャッフルモードと抽選モードの違いは何ですか?
シャッフルモードはリストのすべての項目を並べ替え、新しい順序で全項目を表示します。抽選モードはN個だけをランダムに抽出し、その項目だけを表示します——並べ替えた全リストを見せずに、決まった数の当選者やサンプルを選びたい場合に便利です。
実際の景品抽選会に使ってもいいですか?
はい、非公式な景品企画や抽選であれば、ランダム性が本当に一様なので問題なく使えます。金銭的な賞品を伴う法的に規制された懸賞の場合は、地域の規制を確認してください——特定の監査可能な抽選プロセスが求められる地域もあります。
重複を削除すると元のリストは変わりますか?
いいえ——重複削除はシャッフル後の出力のみに影響し、チェックボックスが有効な場合にのみ適用されます。入力したリストは入力した通りのまま保持されるので、オプションを切り替えて何度でも再入力なしに再シャッフルできます。