或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

Rubyで乱数生成

Rubyの乱数生成メモです。

rand関数

Rubyで乱数生成をするにはrandメソッドを使います。

10.times do
  puts rand(1000)
end

このプログラムは、0~999までの範囲の乱数を10回出力します。

ただ、この乱数は擬似乱数と呼ばれるものであり、乱数生成に使われる種(シード)を元に算出されている数になりますので、純粋にランダムな数が生成されているわけではないということに注意が必要です。

擬似乱数の偏りについて説明しだすと長くなりすぎるので詳細はWikipediaのほうを参照。

擬似乱数 - Wikipedia


因みに、srandメソッドを使うことで乱数の種を明示的に与える事が可能です。

srand(3)
10.times do
  puts rand(1000)
end

実行結果

874
664
249
643
952
968
256
789
659
714

種を指定した方のプログラムは何回実行しても同じ結果を返します。

SecureRandomクラス

所謂、安全な乱数を生成したい場合はSecureRandomクラスを使います。

require 'securerandom'
p SecureRandom.random_number(10000)
p SecureRandom.hex(16)
p SecureRandom.base64

乱数以外にも、ランダムな文字列、base64文字列の生成に使えます。

ただし、実行速度は擬似乱数のほうと比べると結構遅いです。