行・単語シャッフルツール
貼り付けたリストの行や単語をランダムにシャッフル — 暗号学的に安全な乱数を使用し、ワンクリックで毎回新しい順序に。
1,155回閲覧
リストを公平にシャッフル
リスト(1行に1項目)またはテキストのかたまりを貼り付け、行単位か単語単位のどちらでシャッフルするかを選びます。このツールはcrypto.getRandomValuesを種にしたFisher-Yatesシャッフルを実行します — これは本サイトのサイコロ、乱数生成ツール、抽選ツールでも使われているのと同じ暗号学的に強力な乱数源であり、同じモジュロ・バイアス回避の仕組みを備えています。Fisher-Yatesは最後の項目から逆向きに処理を行います。各位置について、残っている項目の中からランダムなインデックスを選んで入れ替えるため、リストのあらゆる並び順が等しい確率で発生し、どの位置にも偏りが生じません。
このバイアス回避の詳細は、見た目以上に重要です。Math.random() * n で生成される単純なランダムインデックスや、さらに悪いことに暗号学的に安全な乱数整数を % n で縮小したものは、nが生成器の値域を割り切れない場合、完全に一様にはなりません — 特定の位置がわずかに他より頻繁に現れてしまいます。数回のシャッフルであれば誰も気づきませんが、1日に何千回ものシャッフルを実行するクイズプラットフォームでは、出題順や抽選エントリー順のわずかな偏りが公平性の実質的な問題になります。このツールは範囲外の値をモジュロで縮小するのではなく、棄却して再抽選するため、リストの長さに関係なくすべてのシャッフルが偏りのない状態を保ちます。
これは本サイトのサイコロや乱数生成ツールを動かしているのとまったく同じシャッフルの原理であり、単一の数値ではなく行や単語の配列に適用しているだけです。残っているシャッフルされていない項目の中から一様に1つを選んで配置し、何も残らなくなるまでそれを繰り返します。「入力のあらゆる順列に等しく到達できる」という保証こそが、単に混ざって見えるだけで密かに特定の並びを優先してしまうシャッフルと、公平性の基準を満たすシャッフルとを分ける違いです。
知っておくべきこと
- 行モードは各行を1つの単位としてシャッフルします — 名前リスト、読み上げ順、クイズの問題セットをランダム化するのに最適です。
- 単語モードはスペースで分割し、単語をシャッフルしてから再結合します — 1つの文や短いフレーズをかき混ぜるのに適しています。
- 擬似ランダム風ではなく、本物のランダムです: ここで使われている暗号学的な乱数源は、暗号鍵に使われるものと同じクラスの乱数であり、多くの言語に組み込まれている弱い既定のランダム関数ではありません。
- 何も保存されません: シャッフルは完全にブラウザ内で実行され、クリックするたびに新しい独立した順序が生成されます — ページを更新すると、同じ結果ではなく異なる結果が得られます。
よくある質問
シャッフルは本当にランダムですか?
はい — Math.random()ではなくcrypto.getRandomValuesで駆動する偏りのないFisher-Yatesシャッフルを使用しているため、どの並び順も等しい確率で出現します。
1つの文の中の単語をシャッフルできますか?
はい — 単語モードに切り替えると、スペースで分割してシャッフルし、再び結合します。
なぜMath.random()をそのまま使わないのですか?
Math.random()は、公平性が重視される選択のためではなく、グラフィックスやアニメーション向けに設計された高速な擬似乱数生成器であり、その出力を単純にモジュロである範囲に縮小すると、小さな統計的偏りが生じます。crypto.getRandomValuesは、まさにこのような偏りのないランダムな選択のために作られた、暗号学的に強力な乱数源です。
このツールは実際にどのような場面で役立ちますか?
試験やクイズの出題順をランダム化する、ランダムなタスクや座席の割り当ての前に名前リストをシャッフルする、抽選の前にエントリーリストをかき混ぜる、あるいは読書リストを毎回新しい順序に入れ替える、といった用途に便利です。
同じリストを2回シャッフルすると、同じ順序になりますか?
いいえ — シャッフルのたびに新しい乱数が生成されるため、まったく同じ入力に対して2回実行しても、独立した、通常は異なる並び順になります。ちょうど、物理的なトランプの束を2回シャッフルするのと同じです。
関連ツール
問題を報告
行・単語シャッフルツール
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!