使い方
サイコロの種類(d4・d6・d8・d10・d12・d20・d100)と個数を選んで、振るボタンを押すだけ。各サイコロは `crypto.getRandomValues` と棄却サンプリングを使って独立に振っており、出目は厳密に一様分布になります。d20 で 17 が出る確率も 1 が出る確率もまったく同じです。各サイコロの出目を個別に表示するのでマスターから「d20 は何だった?」と聞かれたときにも答えやすく、ゲームシステムでよく使う合計値も同時に表示します。1度に最大10個まで振れるので、能力値決定の 3d6、4d6 で最低を捨てるキャラ作成、5e の有利/不利の 2d20、1d100 のパーセンタイル判定など、定番ケースはほぼカバーできます。
計算式
N はサイコロの個数(本ツールでは 1〜10)。S はサイコロの面数(4・6・8・10・12・20・100 のいずれか)。ほとんどの面数では 2^32 が S の倍数になっていないため、単純に `byte mod S` を取ると一部の出目だけ確率がわずかに高くなる「モジュロバイアス」が発生します。S の最大倍数を超える「あまり」の領域に落ちたバイトは破棄して引き直すことで、分布を厳密に一様に保ちます。1回あたりの棄却確率は最大でも S/2^32 なので、実用上は待ち時間ゼロで動作します。
計算例
- D&D の能力値:3d6 を振る → 出目 [4, 6, 2] → 合計 = 12。
- 5e の有利:2d20 を振る → [11, 18] → 高い方を採用 = 18。
- パーセンタイル判定:1d100 → 73。「罠が発動するか?(目標値 ≤ 80 で発動)」のような判定に使用。
よくある質問
なぜ d10 は 0〜9 ではなく 1〜10 になるのですか?
多くのゲームシステムでは d10 の出目を 1〜10 として扱います。0〜9 という解釈は十の位と一の位の2個の d10 を使う「パーセンタイルダイス」専用の読み方で、両方が「0」のときに 0、「00,0」のときに 100 と読みます。一般用途(2d10 の能力値、d10 系システムのダメージ計算など)に合わせて本ツールは 1〜10 を採用しています。パーセンタイル判定が欲しい場合は d100 を選べば 1〜100 が直接返るので、2個を組み合わせる必要はありません。
複数種類のサイコロを同時に振ることはできますか(例:1d20 + 4d6)?
本ツールでは一度に1種類のサイコロしか振れません。1d20 + 4d6 のように混ぜたい場合は、まず d20 を振り、結果をメモしてから種類を d6・個数を 4 に変えて振り直してください。将来的には「1d20+4d6+3」のような標準ダイス記法を一括で解釈する複合ロール・モードを追加することも考えられますが、現状はよくある用途(1種類・固定個数・必要なら合計)をシンプルに使えるよう優先しています。
「公平」と Math.random() ではどう違うのですか?
ゲーム用途であれば Math.random() でも実用上は十分公平で、最新ブラウザの実装はそれなりに良くできています。それでも crypto.getRandomValues を使っているのは2つの理由からです。(1)「乱数が偏っているのでは?」という疑念を完全に取り除けること、(2) 宝くじの番号選びやトーナメントの抽選など「予測不可能性」が重要な用途でも安心して使えること。コスト面では1回あたり数バイトを読むだけなので実質ゼロです。
セッションをまたいで結果を記憶しますか?
記憶しません。ページを開くたびに履歴は空の状態から始まり、リロードやページ遷移で結果は消えます。これは意図的な設計で、本ツールは「その場限りの短い乱数」が主目的です。キャンペーンの記録や統計解析のように継続的なログが必要なら、ノートや専用 VTT のほうが向いています。プライバシー面の利点として、結果はサーバーに送られないため、誰にもあなたの出目は見えません。