Rubyで乱数を生成する8つの方法!初心者でもわかる徹底ガイド

Rubyで乱数を生成する方法のイラストRuby
この記事は約7分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、Rubyで乱数を生成する方法が手のひらに乗るほどわかります!

Rubyでプログラミングを始めたばかりの初心者の方、ちょっとしたゲームやアプリを作ってみたい方、必見です!

乱数を上手に扱えるようになれば、プログラムの幅がグンと広がります。

●Rubyとは

Rubyは、初心者でも簡単に始められて、プロフェッショナルなプログラムも書ける言語です。

Rubyは1995年に松本行弘さんによって生み出されました。

○Rubyの特徴

Rubyは「プログラミング言語として、人間らしい表現ができる」ことが特徴です。

直感的に理解しやすく、コードがスッキリとしています。また、Webアプリケーション開発にもよく使われます。

●乱数とは

乱数は、予測不可能な数値です。

コンピュータプログラムの中でよく使われます。

例えば、サイコロを振るゲーム、ランダムな広告表示などがあります。

○乱数の用途

乱数は様々な場面で使われます。

ゲームの敵キャラの行動、ランダムなクーポンの生成、データセキュリティーなど、乱数の活用は無限大です!

●Rubyで乱数を生成する方法

Rubyで乱数を使いこなすための8つの方法をご紹介します。

○サンプルコード1:Kernel#randメソッド

このコードではKernel#randメソッドを使って乱数を生成するコードを紹介しています。

この例では0以上1未満の小数を生成しています。

# 0以上1未満の乱数を生成
random_number = rand
puts "生成された乱数は#{random_number}です。"

実行結果は「生成された乱数は0.8723227484563(実際の数値は毎回異なります)です。」のようになります。

○サンプルコード2:Random#randメソッド

このコードではRandom#randメソッドを使って整数の乱数を生成します。

この例では1から10の間の整数を生成しています。

# Randomクラスを使って1から10の間の整数の乱数を生成
random_number = Random.rand(1..10)
puts "生成された乱数は#{random_number}

です。"

実行結果は「生成された乱数は5(実際の数値は毎回異なります)です。」のようになります。

○サンプルコード3:Random.new_seedメソッド

このコードではRandom.new_seedメソッドを使って新たなシード値を生成します。

この例では生成したシード値を用いて乱数を生成しています。

# 新たなシード値を生成
seed = Random.new_seed
random_generator = Random.new(seed)
random_number = random_generator.rand(1..100)
puts "生成された乱数は#{random_number}です。"

実行結果は「生成された乱数は38(実際の数値は毎回異なります)です。」のようになります。

○サンプルコード4:Array#sampleメソッド

このコードではArray#sampleメソッドを使って配列からランダムに要素を選び出すコードを紹介しています。

この例では、文字列の配列から1つの要素をランダムに取り出しています。

# 配列からランダムに要素を選び出す
array = ["りんご", "みかん", "ぶどう"]
random_fruit = array.sample
puts "選ばれたフルーツは#{random_fruit}です。"

実行結果は「選ばれたフルーツはぶどう(実際の結果は毎回異なります)です。」となります。

○サンプルコード5:Rangeオブジェクトと乱数

このコードではRangeオブジェクトと乱数を組み合わせて特定の範囲の整数をランダムに生成するコードを紹介しています。

この例では、1から100までの範囲からランダムな整数を生成しています。

# 1から100までの範囲からランダムな整数を生成
random_number = (1..100).to_a.sample
puts "生成された乱数は#{random_number}です。"

実行結果は「生成された乱数は42(実際の数値は毎回異なります)です。」のようになります。

○サンプルコード6:Kernel#srandメソッド

このコードではKernel#srandメソッドを使って乱数生成の種を設定するコードを紹介しています。

この例では、種を設定してから乱数を生成しています。

# 乱数生成の種を設定
Kernel.srand(12345)
random_number = rand(1..100)
puts "生成された乱数は#{random_number}です。"

実行結果は「生成された乱数は69です。」となります。

Kernel#srandメソッドを使うと、同じ種から始めれば同じ乱数が生成され、結果が再現可能になります。

○サンプルコード7:Random#bytesメソッド

このコードではRandom#bytesメソッドを使ってランダムなバイト列を生成するコードを紹介しています。

この例では10バイトのランダムなバイト列を生成しています。

# ランダムなバイト列を生成
random_bytes = Random.new.bytes(10)
puts "生成されたバイト列は#{random_bytes}です。"

実行結果は「生成されたバイト列は\x15\x8B\x7F…\x5B(実際のバイト列は毎回異なります)です。」のようになります。

○サンプルコード8:乱数を用いたゲームプログラム作成

このコードでは、乱数を使ったシンプルなゲームプログラムの作成方法を紹介しています。

この例では、1から100までの範囲で秘密の数を設定し、プレイヤーがその数を当てるゲームを作成しています。

# 乱数を使ったゲームプログラム
secret_number = rand(1..100)
puts "1から100までの数を当ててください。"
guess = gets.chomp.to_i
if guess == secret_number
  puts "おめでとうございます!正解です!"
else
  puts "残念、不正解です。正解は#{secret_number}でした。"
end

このコードを実行すると、「1から100までの数を当ててください。」というメッセージが表示され、ユーザーが数値を入力します。

その入力が秘密の数と一致すれば「おめでとうございます!正解です!」と表示され、一致しなければ「残念、不正解です。正解は#{secret_number}でした。」と表示されます。

●乱数生成の注意点と対処法

Rubyで乱数を扱う際には、いくつか注意点があります。

一つは、乱数は「擬似的なランダム」であるという点です。

つまり、乱数生成器は一見ランダムに見えますが、実際には予測可能なパターンを持っています。

これは、同じシード(種)を用いて乱数生成器を初期化すれば、同じ乱数のシーケンスが生成されることからわかります。

これを防ぐには、乱数生成器のシードを時間などのランダムな値で初期化する方法があります。

また、乱数生成器は一般的に均等な確率分布を持つとは限らないため、統計的な分析に使用する場合には注意が必要です。

Rubyの標準ライブラリには、正規分布など他の確率分布に基づいた乱数を生成するメソッドも提供されています。

●乱数生成のカスタマイズ方法

Rubyでは、乱数の生成方法をさまざまにカスタマイズすることが可能です。

例えば、Kernel#randメソッドには範囲を指定することができ、この範囲内の乱数が生成されます。

また、Array#sampleメソッドを用いれば、配列の中からランダムな要素を選択することができます。

さらに、Randomクラスを使用すれば、乱数生成器のインスタンスを作成して、そのシードを制御することができます。

これにより、必要に応じて乱数のシーケンスを再現することが可能となります。

まとめ

Rubyを使って乱数を生成する方法を初心者向けに詳しく解説しました。

乱数はプログラムのさまざまな場面で役立ちます。

シンプルなゲームの作成から、統計的な分析、さらにはテストデータの生成など、乱数の活用範囲は広範囲にわたります。

Rubyには乱数を生成し、その挙動を制御するための多くのメソッドや機能が提供されています。

これらを使いこなすことで、あなたのRubyプログラミングスキルはさらに深まるでしょう。