オンライン乱数ジェネレーター
結果の分布
一様性の検定
検定を行うには、より狭い範囲で数値を多く生成してください。
最近の生成結果
保存済みプリセット
乱数ジェネレーターの仕組みは?
このジェネレーターは2種類の乱数源を用意しており、用途に応じて選択できます。
セキュア乱数は、Web Crypto API(crypto.getRandomValues())を通じてお使いのオペレーティングシステムからエントロピーを取得します。予測不可能かつ再現不可能であり、誰にも事前に結果を推測されてはならない本物の抽選に適した選択肢です。
シード乱数は、入力した任意のテキストを決定論的な生成器(xoshiro128**)の初期状態に変換します。同じシードは常に同じ数列を生成するため、誰でもあなたの抽選を再現し、申告通りの結果であることを確認できます。
いずれもブラウザ内で完結します。数値がサーバーに送信されることは一切ありません。
モジュロバイアスなし
多くの単純な生成器は、ランダムな32ビット値を value % range によって指定範囲へ変換します。範囲が2³²をきれいに割り切れない場合、小さい数値の方がわずかに出現しやすくなります。何千回も試行すればこの偏りは測定可能です。
このジェネレーターは代わりにリジェクションサンプリングを使用します。偏りの原因となる余りの範囲に落ちた値は破棄され、再抽選されます。範囲内のすべての数値はまったく同じ確率で出現します。内蔵の一様性検定で自分で検証することもできます。
ジェネレーターでできること
範囲
- 最小値と最大値 — 整数・小数を問わず任意の範囲、負の値にも対応
- 生成数 — 1回の抽選で1個から1,000,000個まで
- 重複なし — 実際の抽選のように、各数値は最大1回だけ出現
- 並び替え — 抽選順、昇順、降順から選択。並び替えは乱数性に影響しません
- ステップ — 結果を特定の値の倍数に限定(0, 5, 10, 15のみなど)
- 除外する数値 — 絶対に抽選されない値をリストで指定
モード
- 乱数の生成方式 — セキュア(Web Crypto)またはシード(再現可能)
- シード — 任意のテキスト。同じシードは常に同じ結果を再現します
- 分布 — 一様分布、正規分布(ガウス分布)、指数分布、ポアソン分布、三角分布、二項分布
- 重み付け —
数値:重みの形式で特定の数値の出現確率を上げる - ダイス表記 —
3d6+2、d20、アドバンテージ用の2d20kh1、能力値決定用の4d6dl1
出力
- 区切り文字 — カンマ、スペース、セミコロン、タブ、改行、または任意の文字
- 数値表記 — 10進数、2進数、8進数、16進数、36進数
- ゼロ埋め — 7を007のようにチケット番号やID番号向けに整形
- 接頭辞・接尾辞 — 各数値を任意のテキストで囲む
- テンプレート —
{n}は数値、{i}は順番を表し、例えばuser{n}はuser42になります - コピー形式 — プレーンテキスト、CSV、JSON、Markdownテーブル
統計
すべての抽選結果はリアルタイムで要約されます。合計、平均、中央値、最小値、最大値、標準偏差に加え、偶数・奇数・素数の個数も表示されます。ヒストグラムで分布の形状を確認でき、カイ二乗検定によって結果が実際に一様分布に従っているかどうかが分かります。
履歴
直近50回分の抽選が、生成時の設定とともにブラウザ内に保存されます。ワンクリックでいつでも復元可能です。よく使う設定は名前を付けてプリセットとして保存でき、すべての設定をJSONファイルとしてエクスポートし、別の端末へインポートすることもできます。データはこのブラウザ以外どこにも保存されません。
キーボード操作
スペースキーまたはRキーを押すと、マウスを使わずに再抽選できます。
クイックプリセット
| プリセット | 範囲 | 生成数 | 用途 |
|---|---|---|---|
| 🎲 サイコロ | 1–6 | 1 | ボードゲーム、意思決定 |
| 🪙 コイン | 0–1 | 1 | 表か裏か |
| 🎰 宝くじ | 1–49 | 6 | 重複なし・ソート済み、実際の抽選と同様 |
| 💯 1–100 | 1–100 | 1 | パーセンテージ、A/B分割 |
| 🔢 暗証番号 | 0–9 | 4 | 4桁、重複あり |
再現可能な抽選
シードモードは、「本当にランダムでした」という言葉だけでは足りない場面のために存在します。
日付、ハッシュタグ、何らかの公開されている終値など、関係者全員が事前に合意できるシードを選び、抽選前に発表しておきます。すると誰もが同じシードと同じ設定を入力することで、まったく同じ結果を得られます。これは数値が予測不可能だったことの証明にはなりませんが、気に入った答えが出るまで抽選をやり直さなかったことの証明にはなります。
これは、検証が必要な作業で乱数を再現可能にする方法でもあります。同僚が再実行できるサンプリング計画、テストスイート全体で安定した一連のテストフィクスチャ、全生徒が同じ「ランダムな」データを受け取る授業課題などです。
分布の選び方
一様分布は範囲内のすべての数値に同じ確率を与えます。これが一般に「ランダム」という言葉で想像されるものであり、デフォルトの設定です。
それ以外の分布は結果を特定の値の周辺に集中させます。これは現実世界の量が示す傾向でもあります。
- 正規分布(ガウス分布) — 身長、測定誤差、テストの点数など。平均と標準偏差を設定します
- 指数分布 — 独立したイベント間の待ち時間
- ポアソン分布 — 一定の間隔内で発生するイベントの回数(1時間あたりの来客数、1バッチあたりの不良品数など)
- 三角分布 — 最小値・最大値・最頻値のみが分かっている場合。プロジェクトの見積もりでよく使われます
- 二項分布 — 固定の試行回数・固定の確率における成功回数
いずれの分布も設定した範囲でクリッピングされるため、ガウス分布の長い裾が最小値・最大値の外にはみ出すことはありません。
乱数の利用シーン
ゲーム・エンターテインメント
- ボードゲーム — サイコロを振る、順番を決める
- テーブルトークRPG — 能力値決定には
4d6dl1、アドバンテージには2d20kh1 - プレゼント企画 — 当選者の選出。シードを使えば参加者が結果を検証できます
- クイズ — 出題順のランダム化
統計・科学
- サンプリング — 母集団から重複なくサンプルを抽出
- A/Bテスト — 参加者をグループに割り当て
- モンテカルロシミュレーション — 反復による確率の推定
- ブートストラップ法 — リサンプリングによる不確実性の推定
開発
- テストデータ — 100万件の値をバックグラウンドで生成し、画面の応答性を維持
- フィクスチャ — シード付きなので、失敗するテストは常に同じ形で失敗します
- ランダムID — パディング、接頭辞、テンプレートを指定可能
- 負荷テスト —
user{n}@example.comのようなテンプレート付き識別子
真の乱数と擬似乱数
Math.random() | crypto.getRandomValues() | シード(xoshiro128**) | |
|---|---|---|---|
| 種類 | 擬似乱数 | 暗号学的に安全 | 擬似乱数、決定論的 |
| エントロピー源 | エンジンが選択するシード | システムのCSPRNG | 入力したシードテキスト |
| 予測可能か | 可能性あり | 不可能 | 設計上、可能 |
| 再現可能か | 不可能 | 不可能 | 常に可能 |
| セキュリティ用途に適するか | 不適 | 適する | 不適 |
| 統計用途に適するか | 場合による | 適する | 適する |
| 検証可能な抽選に適するか | 不適 | 不適 | 適する |
このツールでは Math.random() は一切使用していません。
重複のない抽選
重複なしを有効にすると、範囲内の各数値は最大1回だけ出現します。以下のような用途に最適です。
- プレゼント企画 — 同じ人が2回当選することはありません
- 順列 — 要素セットのシャッフル
- ビンゴ — 一度呼ばれた数字は呼ばれたままになります
- 宝くじ — 1から49の範囲から異なる6つの数値
抽選には部分的なFisher–Yatesシャッフルを使用しているため、100万個の中から6個を選ぶ処理も、49個の中から6個を選ぶ処理と同じ速さです。衝突を避けるためにループし続けることはありません。範囲が供給できる以上のユニークな数値を要求した場合は、フリーズせずにその旨をお知らせします。
結果のエクスポート
数値は任意の区切り文字を使ったプレーンテキスト、スプレッドシート向けのCSV、コード向けのJSON、ドキュメント向けのMarkdownテーブルとしてコピーできます。画面上に表示されるのは最初の数千件のみですが、非常に大きな抽選結果も全件がメモリ上に保持され、コピー時には全件が出力されます。
自分のコードで乱数を生成する
JavaScript / TypeScript
// [min, max] の範囲で暗号学的に安全な整数を生成する。モジュロバイアスなし。
// 素朴な `value % range` は、range が 2**32 を割り切れない場合に
// 小さい数値を優遇してしまうため、余りの範囲に落ちた値は棄却する。
function randomInt(min, max) {
const range = max - min + 1;
const limit = Math.floor(0x100000000 / range) * range;
const arr = new Uint32Array(1);
let value;
do {
crypto.getRandomValues(arr);
value = arr[0];
} while (value >= limit);
return min + (value % range);
}
Python
import random
import secrets
# 暗号学的に安全、モジュロバイアスなし
n = secrets.randbelow(max - min + 1) + min
# 再現可能: 同じシードは常に同じ数列を生成する
rng = random.Random('my-seed')
n = rng.randint(min, max)
# 重複なし
sample = random.sample(range(min, max + 1), count)
PHP
// 暗号学的に安全 (PHP 7以降)、モジュロバイアスなし
$n = random_int($min, $max);
// 再現可能
mt_srand(crc32('my-seed'));
$n = mt_rand($min, $max);
よくある質問 (FAQ)
結果は本当にランダムですか?
セキュアモードでは、はい。これはオペレーティングシステムのエントロピープールから供給される暗号学的に安全な生成器crypto.getRandomValues() によるものです。結果は一様に分布し、予測不可能です。シードモードはあえてその逆で、再現可能であることこそがポイントです。
一度に何個の数値を生成できますか?
最大1,000,000個です。50,000件を超える抽選はバックグラウンドワーカーで計算されるため画面の応答性は保たれ、画面には最初の2,000件と残りの件数が表示されます。コピーする際は全件が対象になります。負の数を生成できますか?
はい。最小値を負の値に設定してください。JavaScriptの数値の全範囲に対応しており、両端が負の範囲も扱えます。並び替えは乱数性に影響しますか?
影響しません。数値はまず抽選され、その後で並び替えられます。並び替えは表示される順序のみを変えます。同じシードを使えば明日も同じ数値になりますか?
はい。別の端末やブラウザでも同じ結果になります。シード生成器は完全に決定論的で、シードと設定以外の要素には一切依存しません。一様性検定は何を教えてくれますか?
各数値が実際に出現した回数と、本来出現すべき回数を比較するカイ二乗検定を実行します。統計量が臨界値を下回っていれば、結果は一様分布と矛盾しないと言えます。意味のある結果を得るには、ある程度狭い範囲と十分な抽選回数(各値につき最低5回)が必要です。重み付けはどのように機能しますか?
数値:重み のペアで指定します。例えば 1:5, 2:1, 3:1 の場合、1は2や3の5倍出現しやすくなります。リストに含まれない数値の重みは0となり、抽選されることはありません。
どのダイス表記に対応していますか?
3d6 は6面ダイスを3個振ります。3d6+2 のように修正値を加えられます。kh、kl、dh、dl でダイスの採用・除外ができ、2d20kh1 は2個のd20のうち高い方を採用(アドバンテージ)、4d6dl1 は4個のd6のうち最も低い1個を除外します。