
ランダムジェネレータは、合理的には予測できない数値や記号の並びを生成します。大きく2つのタイプがあり、擬似乱数(アルゴリズムベースで再現可能)と真の乱数(物理的なエントロピー源を使用)に分けられます。教室での活動用にサッと選びたい場合でも、アプリケーション用に暗号学的に安全な値が必要な場合でも、こうしたジェネレータの仕組みを理解しておけば適切なツールを選べます。例えば、dogenerator.com の 乱数ジェネレータ を使えば、ブラウザ上で即座に偏りのない結果を生成できます。
ランダムジェネレータとは?2つのコアタイプを解説
ランダムジェネレータ(乱数ジェネレータ、RNG と呼ばれることも多い)は、偶然のランダムさ以上の精度では予測できない、数値や記号の並びを生成するシステムです。Wikipedia でも述べられているように、特定の結果の並びには後から振り返れば見えるパターンが含まれますが、事前に予見することはできませんでした。ジェネレータは大きく 擬似乱数ジェネレータ(PRNG) と ハードウェア/真の乱数ジェネレータ(HRNG/TRNG) の2つに分類されます。
中核となる違いは決定論性です。PRNGは決定論的で、同じ初期状態(シード)を与えれば同一の並びを生成します。HRNGは非決定論で、予測不能な物理プロセスに依存します。両者をつなぐ重要な概念が エントロピー源、つまり乱数の抽出元となる生の素材です。John von Neumann は1951年にこう警告したことで有名です。「乱数を算術的に生成しようと考える者は、もちろん、罪を犯している状態にある」(Wikipedia)。

擬似乱数ジェネレータ(PRNG)
PRNGは、真の乱数の性質に近い性質を持つ並びを生成するアルゴリズムです。シード と呼ばれる初期値によって完全に決定されます。PRNGは高速・再現可能で、シミュレーション、ゲーム、デバッグに不可欠です。Wikipedia の乱数生成の記事 では「数値生成の速さと再現性の点から、実用上重要である」と述べられています。当選者の選出や名前のシャッフルといった日常的な用途でオンラインの乱数ジェネレータを使う場合、その裏側では十分にテストされたPRNGが動いているのが一般的です。
ハードウェア乱数ジェネレータ(HRNG)/真のRNG
HRNGは、熱ノイズ、大気ノイズ、放射線崩壊、量子効果といった物理現象を計測して、真に予測不可能な数値を生成します。速度は遅くレート制限されることも多いですが、暗号や高セキュリティ用途には不可欠です。Wikipedia は「ハードウェア乱数ジェネレータは通常、1秒あたり限られた数の乱数ビットしか生成しない」と説明しており、より高速なPRNGのシードとして使われることが多いと述べています。
擬似乱数ジェネレータの仕組み:アルゴリズムとシード
PRNGは 乱数シード(開始値)に依存して内部状態を初期化します。このシードが出力される並び全体を決定します。再現性により、開発者はデバッグ用に同じ並びを再現でき、これはモンテカルロ・シミュレーションやゲーム開発での大きな利点となります。
乱数シード:再現性とデバッグ
同じシードでPRNGを実行すると、まったく同じ数値の並びが得られます。これはシミュレーションのテストやデバッグで極めて有用です。Wikipedia では「同じ乱数シードから始めることで、再び同じ乱数の並びを実行できるため、デバッグが容易になる」と記されています。
Mersenne Twister(MT19937)— 最も一般的なPRNG
1998年に Matsumoto と Nishimura によって開発された Mersenne Twister は、R言語と Python のバージョン 2.3 以降の両方でデフォルトのジェネレータです(Wikipedia)。2^19937 − 1 という巨大な周期と優れた統計的性質を持ち、シミュレーションや非暗号学的用途に適しています。ただし暗号学的には安全ではなく、十分な出力を観察されると内部状態を特定されてしまいます。
現代のPRNG:Xorshift と Xoroshiro128+
ビデオゲームやリアルタイムシミュレーションのように高速性が求められる用途では、Xorshift(2003年)とその後継である Xoroshiro128+(2018年)がよく使われます。Xoroshiro128+ は現代の64ビットCPU上で最速クラスのジェネレータです(Wikipedia)。速度と引き換えに周期は短くなりますが、これらも暗号学的には安全ではありません。
暗号学的に安全なPRNG(CSPRNG)と NIST 規格
CSPRNGは、攻撃者がアルゴリズムを知り多数の出力を観察しても予測に耐えるよう設計されています。暗号化、鍵生成、認証トークンに必須です。NIST SP 800-90A は CTR_DRBG や Hash_DRBG を含む複数のCSPRNGアルゴリズムを標準化しています(Wikipedia)。代表的なCSPRNGとして、Blum Blum Shub(1986年)や ChaCha20 のようなストリーム暗号があります。
エントロピー源:真の乱数の心臓部
エントロピー源とは、真のRNGに予測不可能性を提供する物理的な生の入力です。高品質なエントロピーがなければ、どんなに優れたアルゴリズムでも真の乱数を生成できません。Wikipedia で説明されているように、例として熱ノイズ、ショットノイズ、電子回路のジッタ、ブラウン運動、大気ノイズなどが挙げられます。

現実世界における物理エントロピー源
Joshua Coleman による最近のプロジェクト(2026年5月、Hackaday)では、エントロピー源としてヴィンテージのネオン管を使用しています。通電したネオン管の予測不可能な放電レートを光学的に計測し、そのアナログ読み取り値を Raspberry Pi Pico W で処理して SHA-256 の64ビット値を生成します。物理現象を活用して乱数を得る、ホビイストや研究現場における見事な実例です。ただしコメント欄でも指摘されているように、こうしたシステムを正しく特性評価するのは簡単ではなく、電源や環境要因を介した結合が実効エントロピーを低下させる可能性があります。
オンラインツールとエントロピー:知っておくべきこと
ほとんどのオンライン乱数ジェネレータは、真のハードウェア源ではなくPRNGを使用しています。例えば、Wheel of Names は Math.random() ではなく、ブラウザベースのCSPRNGである crypto.getRandomValues() を使っていると明記しています。「真の乱数」を謳うツールは、どのエントロピー源を使っているかを明示すべきです。サイトがハードウェアエントロピー(Random.org の大気ノイズなど)を使っているのか、アルゴリズムベースのPRNGなのかを常に確認しましょう。
用途に合ったランダムジェネレータの選び方
適切なジェネレータの選択は、パフォーマンス、再現性、セキュリティ、公平性の間のトレードオフに依存します。グループ活動でランダムに選ぶための視覚的で手軽な手段が必要なら、dogenerator.com の ランダムルーレット がインタラクティブな回転体験を提供し、選択を楽しく透明にします。
シミュレーションとゲーム向け:パフォーマンスと再現性を重視
モンテカルロ・シミュレーション、ビデオゲーム、プロシージャル・コンテンツ生成では、Mersenne Twister や Xoroshiro128+ のような高速なPRNGが効果を発揮します。固定シードによる再現性により、デバッグや実行間で一貫した結果が得られます。
暗号とセキュリティ向け:Math.random() に頼ってはいけない
JavaScript の Math.random()(他言語の類似関数も同様)は、通常は Xorshift128+ のようなPRNGであり、暗号学的には安全ではありません。Wheel of Names が明確にしているように、彼らは意図的に Math.random() を避け、ブラウザの crypto.getRandomValues()(OS内の高エントロピー源から取り出すCSPRNG)を使用しています。セキュリティ関連のあらゆる用途では、常にCSPRNGを使いましょう。
公平な意思決定向け:オンライン乱数ジェネレータの評価
教師、ストリーマー、コンテスト主催者には、透明で検証可能なジェネレータが必要です。次のようなツールを探しましょう。
– アルゴリズムを開示している(例:CSPRNGかPRNGか)
– 独立した乱数監査を提供している(Wheel of Names の「Run 10,000 Spins」機能など)
– プライバシー規制(GDPR/CCPA に相当する各国の規制)を遵守し、入力されたデータを保存しない

オンライン乱数ジェネレータの品質を検証する方法(実践ガイド)
すべての乱数ジェネレータが同じくらい信頼できると思われがちですが、それは誤りです。品質の確認方法を紹介します。
統計的乱数検定を理解する
カイ二乗検定、Diehard tests、TestU01 のような専門的検定は、並びの中に非ランダム性を示すパターンがないかを確認します。PsychicScience.org のジェネレータには、等確率性と独立性に関するカイ二乗検定が組み込まれています。純粋な偶然で約10回に1回は検定が失敗すると想定しておきましょう。それは正常です。

オンライン乱数ジェネレータをテストする実践チェックリスト
- アルゴリズムの開示を確認する – サイトは
Math.random()かcrypto.getRandomValues()のどちらを使うと明記しているか? - 組み込みの乱数監査を探す – Wheel of Names は 「Run 10,000 Spins」 機能を提供しています。2026年時点で、同プラットフォームは 4億6200万回以上のルーレット回転 と 128万時間以上の回転 アクティビティを報告しています。
- 小さなサンプルでテストする – 100個の数値を生成し、交互の並びのような明らかなパターンがないか確認する。
- 独立した検定を実行する – 技術的な知識があれば、Dieharder や TestU01 のようなツールを使う。
なぜプライバシーポリシーを確認すべきか
オンラインジェネレータを、特にコンテストや機密性の高い選択に使う場合は、サイトがデータを保存・再利用していないことを確認しましょう。Wheel of Names は GDPR(一般データ保護規則)および CCPA(カリフォルニア州消費者プライバシー法)に準拠し、プライバシー優先のローカルストレージを提供していると述べています。明確なプライバシーポリシーの存在は良い兆候です。
実践での乱数ジェネレータの使い方:ツールとAPI
プログラミングAPI:どれをいつ使うか
| 用途 | 推奨API | 備考 |
|---|---|---|
| 汎用(Python) | random モジュール(Mersenne Twister) |
高速、再現可能、安全ではない |
| 暗号(Python) | secrets モジュールまたは os.urandom |
CSPRNG |
| JavaScript ブラウザ | crypto.getRandomValues() |
CSPRNG |
| JavaScript Node.js | crypto.randomBytes() |
CSPRNG |
| Java | SecureRandom |
CSPRNG、Random はPRNG |
| Unix/Linux | /dev/urandom または /dev/random |
CSPRNG(ノンブロッキング) |
| Windows | CryptGenRandom |
CSPRNG |
特定の言語で乱数生成を実装したい開発者向けに、dogenerator.com は専用ガイドを用意しています。Python 乱数ジェネレータ チュートリアルでは random と secrets モジュールを深く掘り下げ、Java 乱数ジェネレータ ガイドでは Random と SecureRandom の比較を解説します。C++ 開発者は、C++ 乱数ジェネレータのリソースで現代的な <random> ヘッダのテクニックを探求できます。
みんなのためのオンライン乱数ジェネレータ
- Wheel of Names – CSPRNG を備えたビジュアルスピナー、重み付けエントリ、複数ホイール、ストリーミング対応。
- Random.org – 大気ノイズによる真の乱数、整数や数列を提供。
- Generate-Random.org – CSPRNG による数値、整数、小数、素数、NIST SP 800-90A 準拠。
- PsychicScience.org – カイ二乗検定内蔵の無料乱数。
高度な変換:Fisher-Yates と Box-Muller
Fisher-Yates シャッフルは、一様分布する乱数整数を使って配列をランダムに並べ替えます。Box-Muller 変換は、2つの一様乱数を正規分布するペアに変換します。どちらも、一様な源から非一様な分布を生成するための基本的なテクニックです。
ランダムジェネレータに関するよくある誤解
誤解:Math.random() は暗号学的に安全である。
それは違います。JavaScript の Math.random() は Xorshift128+ のようなPRNGを使っており、予測可能です。セキュリティ用途には crypto.getRandomValues() を使いましょう。
誤解:すべてのオンライン乱数ジェネレータは同じである。
アルゴリズム、エントロピー源、透明性の点で異なります。Math.random() を使うものもあれば、CSPRNG を使うもの、Random.org のように物理エントロピーを使うものもあります。常に確認しましょう。
誤解:time() をシードにすれば暗号用途にも十分である。
現在のシステム時刻をシードとして使うと予測可能です。攻撃者は狭い時間枠でシードを推測できます。CSPRNGは、ハードウェアのタイミングやユーザー入力など、複数の情報源から得られる高エントロピーのシードに依存しています。
結論
擬似乱数ジェネレータと真の乱数ジェネレータの違いを理解することは、公平な選択、シミュレーション、暗号のいずれの目的でも適切なツールを選ぶ鍵となります。日常的な用途で乱数を生成したい場合、信頼できる ナンバーランダムジェネレータ は、単純な数値選びから複雑な分布まで幅広く対応します。オンラインの乱数ジェネレータを使う際は、常にアルゴリズムを確認し、独立した乱数検査(Wheel of Names の「Run 10,000 Spins」機能など)を探し、データが保存・再利用されないようプライバシーポリシーを確認しましょう。開発者はセキュリティ関連のあらゆる用途で Math.random() を使ってはならず、暗号化にはCSPRNGに頼るべきです。これらの指針に従えば、情報に基づいた選択ができ、よくある落とし穴を避けられます。
FAQ
様々なオンライン乱数ジェネレータはどのように乱数性を保証していますか?
ほとんどは、ユーザーの操作やシステムエントロピーのような予測不可能な値でシードされた、十分にテストされたPRNGアルゴリズム(Mersenne Twister など)を使っています。一部は(Random.org の大気ノイズのような)ハードウェアエントロピー源を使って真の乱数を実現しています。最良のツールは独立した検証手段(Wheel of Names の「Run 10,000 Spins」機能など)を提供し、アルゴリズムについて透明です。
暗号学的な目的に Math.random() を使えますか?
いいえ、絶対に使えません。JavaScript の Math.random()(他言語の類似関数も同様)は通常 Xorshift128+ のようなPRNGであり、暗号学的には安全ではありません。暗号用途には、ブラウザなら crypto.getRandomValues()、Java なら SecureRandom のようなCSPRNGを常に使いましょう。Math.random() をセキュリティ用途に使うと、アプリケーションが予測可能な攻撃にさらされます。
現代のプログラミングにおける最も一般的な乱数生成アルゴリズムは何ですか?
汎用としては、Python と R の Mersenne Twister(MT19937)、シミュレーションやゲームで速度重視の Xorshift/Xoroshiro があります。暗号用途では、Unix系システムの /dev/urandom や Windows の CryptGenRandom のようなCSPRNGがあります。最適なアルゴリズムは、具体的なタスクに求められるパフォーマンス、再現性、セキュリティのトレードオフ次第です。
コメントを残す