サイコロ

d4 から d100 まで、好きなサイコロを1個から複数個まで振れます。各出目と合計を表示。

使い方

サイコロの種類(d4・d6・d8・d10・d12・d20・d100)と個数を選んで、振るボタンを押すだけ。各サイコロは `crypto.getRandomValues` と棄却サンプリングを使って独立に振っており、出目は厳密に一様分布になります。d20 で 17 が出る確率も 1 が出る確率もまったく同じです。各サイコロの出目を個別に表示するのでマスターから「d20 は何だった?」と聞かれたときにも答えやすく、ゲームシステムでよく使う合計値も同時に表示します。1度に最大10個まで振れるので、能力値決定の 3d6、4d6 で最低を捨てるキャラ作成、5e の有利/不利の 2d20、1d100 のパーセンタイル判定など、定番ケースはほぼカバーできます。

計算式

N 個・S 面サイコロそれぞれについて: byte ← crypto.getRandomValues(Uint32Array(1))[0] byte ≥ floor(0xffffffff / S) × S なら棄却(棄却サンプリング) 出目 ← (byte mod S) + 1 合計 ← Σ 各出目

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 のほうが向いています。プライバシー面の利点として、結果はサーバーに送られないため、誰にもあなたの出目は見えません。

関連計算機