素早く公正な方法でランダムな数字がほしいですか。この無料のオンライン乱数生成器なら、1から10までのシンプルな範囲から数十億にも及ぶ範囲まで、お好きな範囲で数字を1つ、あるいは数字のリストをまとめて生成できます。「最小」と「最大」に最小値と最大値を設定し、「個数」で必要な数字の個数を選んで、「生成」を押してください。両端の値も範囲に含まれるため、1から10の範囲なら1と10のどちらも結果として出ます。
結果はすべて、お使いのブラウザ上で直接、Web Crypto API (crypto.getRandomValues) を使って生成されます。これは、OSが提供する暗号学的に安全な乱数源から、暗号学的に強力なランダムな値を取得する仕組みです。サーバーに送信されるものは一切なく、記録も一切残らず、私たちがあなたの数字を見ることもありません。生成は瞬時に行われ、プライバシーも守られ、ページが一度読み込まれれば低速な回線でも問題なく動作し続けます。
各設定は、実際に人々がランダムな数字を必要とする場面のために用意されています。「重複なし」をオンにすると、同じ数字が2回出ることはなくなります — くじ引きや抽選、あるいは重複なしでグループ分けをしたいときにぴったりの設定です。500人の参加者から20人の当選者を選びたい場合はどうすればよいでしょうか。「最小」を1、「最大」を500に設定し、「重複なし」をオンにして、「個数」を20に設定し、「生成」を押します。「並び順」では結果を昇順または降順に並べ替えでき、ボタン1つですべての結果をコピーできます。「出力形式」を「改行」から「スペース区切り」や「カンマ区切り」に切り替えると「セット数」が表示され、複数の独立した抽選を一度に行えます — たとえば20組の抽選それぞれで3つの数字を生成する、といった具合です。そして「セット間の重複を許可」で、同じ数字が複数のセットにまたがって出てもよいかどうかを決められます。
実際のところ、ランダムな値はどのように生成されているのでしょうか。お使いのブラウザは、Math.random() のようなJavaScriptの疑似乱数生成器ではなく、Web Crypto APIを通じて暗号学的に強力なランダムな値を提供します。「生成」を押すと、ページはcrypto.getRandomValuesを使ってランダムな値を要求し、それを使って選択した範囲内の数字を作成します。乱数の基盤となる源はOSが提供するため、ページ自体が独自のシード (seed) や疑似乱数の列を保持しておく必要はありません。
生の値を範囲に変換する部分こそ、多くの生成ツールが静かに間違いを犯す場所であり、ここだけで1つの段落を割く価値があります。値を範囲のサイズで割った余りを使う方法は、一見わかりやすいものの偏りがあります — 範囲の大きさが2^32を割り切れない限り、最も小さい数字がわずかに多く出てしまうのです。この不具合はモジュロバイアス (modulo bias) と呼ばれ、理論上だけでなく実際に測定できる偏りです。このツールでは代わりに、範囲の大きさで割り切れない部分に当たる値を除外し、再び値を生成します — これはリジェクションサンプリング (rejection sampling) と呼ばれる手法です。余分な生成が数回発生するぶんコストはかかりますが、その代わり正確な保証が得られます。「最小」と「最大」の間のすべての数字が、ほぼ同じではなく、まったく同じ確率で出るのです。
何が数字を本当にランダムにするのでしょうか。ある数字が十分にランダムであるとは、それまでの結果から次の値について何もわからない状態を指します — そして実際には、ここでは3つの異なるアプローチがあります。Math.random() のような通常の疑似乱数関数は決定論的なアルゴリズムを実行します。内部状態を知っている人なら誰でも、そのシーケンス全体を再現できてしまいます。これはスライドショーをシャッフルする程度には十分ですが、結果が予測不可能でなければならない用途にはまったく向きません。このツールが使用している暗号学的に安全な生成器 (CSPRNG) もアルゴリズムである点は同じですが、システムの安全な乱数源から予測不可能な値を生み出すように設計されており、その出力を観察しても次に何が来るかはまったくわかりません。大気中のノイズや放射性崩壊のような源による物理的な乱数は、また別のアプローチですが、範囲内の数字を生成するという実用面では、その差はほとんど関係ありません。ブラウザがMath.random() を改良するのではなく、わざわざ別の暗号用APIを用意しているのはまさにこのためです。この2つはまったく異なる問題を解決するものであり、結果が重要な意味を持つ場合には、暗号学的に安全な生成器が適しています。
ランダムな数列は、人間の目にランダムに見える必要はありません。1から10までの数字を10個生成してみてください。繰り返しや、7、7、8のような同じ数字の繰り返し、あるいは高い数字ばかりが続く短い並びが、頻繁に見られるはずです — そして、そのどれもがまったく普通のことです。ランダム性とは予測不可能であることであり、均等に分布しているように見えることではありません。それぞれの生成は独立しており、それ以前の数字が次の数字に何らかの影響を与えることは一切なく、特定の数字が「そろそろ出るはず」ということもありません。この逆を信じてしまう本能こそがギャンブラーの誤謬であり、人間自身がランダムな数字を生み出すのが苦手な理由も同じ本能によるものです — ランダムな数列を考えてほしいと頼まれると、人は繰り返しを避け、実際の偶然よりもずっと均等に値を散らしてしまいます。不自然なほどきれいに整った結果は、人間が作ったものらしさの表れです。本当のランダム性では、むしろ数字がかたまって現れることがあります。
なぜこの乱数生成器を選ぶべきなのでしょうか
- ブラウザ内でのみ生成: 数字はお使いのデバイス上で作成され、外部に送信されることは一切ありません
- Web Crypto APIによる乱数: 暗号学的に安全、Math.random()ではありません
- モジュロバイアスなし: リジェクションサンプリングにより範囲内のすべての数字が同じ確率で出ます
- どんな範囲にも対応: 1から10まででも数十億に及ぶ値でも、両端を含めて生成できます
- 「重複なし」モード: くじ引きやグループ分けのために、重複のないリストを生成できます
- 複数セット: 独立した複数の抽選をワンクリックでまとめて実行できます
- 並べ替えと出力形式: 昇順・降順、改行・スペース・カンマから選べます
- 履歴とファイル保存: 後で説明が必要になるかもしれない抽選の記録を残せます
- 無制限かつ無料: 登録不要、利用回数の制限もなく、サーバーには何も保存されません
ランダムな数字は、多くの人が思うよりもずっと多くの場面で活躍しています。先生は特定の生徒をひいきすることなく生徒を指名できます。配信者やマーケティング担当者は、結果を信じてもらえる観客の前で、プレゼント企画や抽選の当選者を決めます。プレイヤーは失くしたサイコロの代わりに使ったり、誰が先に始めるかを決めたりしますし、大会ではくじ引きでスタート順を決めます。研究者はランダムな標本を選ぶことで、実際に調査に参加した人以外にも結果を一般化できるようにします。開発者はテストデータを生成したり、シード (seed) を使ってシミュレーションを初期化したり、QA中に識別子を選んだりします。共通しているのは、あとから説明できるランダムな選択プロセスだという点です。この抽選は暗号学的なランダム性を使い、すべてお使いのデバイス上で完結するため、誰かに結果を疑われても、どのようにその結果が生まれたかを示すことができます。
このツールには、知っておく価値のある正直な制約がいくつかあります。「重複なし」モードでは、範囲に含まれる数以上の数字を生成することはできません — 1から10の範囲で20個のユニークな値を生成することは、そもそも不可能です。それぞれの抽選は独立しており、それまでの結果が次の結果に影響を与えることはありません。そのため、ページを再読み込みしても何らかのサイクルがリセットされるわけではありません — そもそも、いるべきサイクル自体が存在しないのです。数字は暗号学的に強力ですが、この抽選はあくまで公正な選択であり、予測ではありません。公式の抽選では、それぞれの主催者が独自の物理的または認証済みの機材を使用しており、お使いのブラウザで計算される内容とは一切関係がありません。こうした制約の範囲内では、保証はむしろより強力になります — あなたの範囲内のすべての数字が、毎回まったく同じ確率を持つのです。