【Ruby】レッスン1-05:乱数の使い方をマスターしよう

一つ前のページでは文字列操作について学習しました。
今回は 乱数生成 について見ていきましょう。
Lesson1:基礎文法編
・Lesson1-1:Ruby学習の入り口|初めてコードを書いてみよう
・Lesson1-2:変数と定数を理解しよう
・Lesson1-3:四則演算をしよう
・Lesson1-4:文字列を操作しよう
・Lesson1-5:乱数を生成しよう ◁今回はココ
・確認問題1-☆1:ランダムパスワードを生成しよう
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
Rubyの乱数生成|サイコロなどに活用できる仕組みとは?

プログラミングではゲームやデータ分析など、さまざまな場面で乱数(ランダムな数値)が利用されます。
Rubyには乱数を簡単に生成する方法があり、ここではその基本的な方法を紹介します。
この記事を通して簡単に乱数を生成し、シミュレーションなどに応用できるようになります。
乱数とは何か?その意味と役割を知ろう
乱数とは特定の範囲内で無作為に選ばれた数値のことです。
例えば1から6の範囲でランダムに数値を取得すると、サイコロの出目のような結果を得られます。
Rubyではrand()
メソッドを使うことで数値を無作為に取得し、様々な場面で活用できます。
randメソッドの使い方|範囲・型ごとの使い分け
Rubyで乱数を生成するにはrand()
メソッドを使います。
このメソッドは次のように使用することで、指定した範囲内の数値をランダムに取得します。
puts rand() # 0以上1未満の小数を生成 puts rand(10) # 0以上10未満の整数を生成 puts rand(1..6) # 1から6までの範囲内の整数を生成
引数(カッコの中)に数字を入れなければrand()
は0以上1未満の小数を生成します。
引数に整数を渡すと、0以上その数値未満の整数を生成し、特定の範囲を指定する場合はrand(範囲)
という形式で使用できます。
使用例:サイコロの出目をシミュレーション
では具体的な例としてサイコロの出目をシミュレーションしてみましょう。
以下のコードを実行すると、1から6までのランダムな数値が表示され、サイコロを振った結果をシミュレーションすることができます。
# サイコロの出目をシミュレーションするプログラム puts "サイコロを振ります..." dice_roll = rand(1..6) # 1から6の範囲で乱数を生成 puts "出た目は#{dice_roll}です!"
このコードではrand(1..6)
によって1から6までの乱数が生成され、サイコロの出目として表示されます。
このようにrand()
を活用することでシンプルに乱数を生成できます。
randの基本を押さえてランダム処理を始めよう
Rubyの乱数生成メソッドrand()
を使うと、簡単にランダムな数値を得られます。
このメソッドは特にシミュレーションやゲームで役立ちますので、しっかり覚えておきましょう。
第3章でメソッドについてさらに詳しく学習する予定ですが、ここではこの基本的な使い方をまずは覚えておいてください。
練習問題:ランダムな数値と合計を表示するプログラムを作ろう

乱数生成をしっかりと身に着けるため、練習問題に挑戦しましょう。
「乱数生成」の練習問題
1から100までの数値を入力して、それにランダムに生成された1から100の数値を加算するプログラムを作成しましょう。
このプログラムではユーザーから入力された数値と、ランダムに生成された数値がそれぞれ表示され、その合計が最終的に表示されます。
以下の要件に従ってコードを完成させてください。
puts
を使用して「1から100までの数字を入力してください:」というメッセージを表示すること。gets.to_i
でユーザーからの入力を整数として取得し、変数user_number
に格納すること。puts
を使用して、「あなたが入力した数字は user_number です。」と表示すること。rand(1..100)
で1から100の範囲で乱数を生成し、変数random_number
に格納すること。puts
を使用して、「ランダムに生成された数字は random_number です。」と表示すること。- 変数
user_number
とrandom_number
を加算し、その結果を変数sum
に格納すること。 puts
を使用して、「あなたが入力した数字とランダムな数字の合計は sum です。」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
1から100までの数字を入力してください: > 25 あなたが入力した数字は 25 です。 ランダムに生成された数字は 73 です。 あなたが入力した数字とランダムな数字の合計は 98 です。
【ヒント】自力で解くのが難しい人へ
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:ユーザーに「1から100までの数字を入力してください:」と出力
2:変数user_numberにユーザーからの入力値を整数として代入
3:変数user_numberの値を「あなたが入力した数字は user_number です。」として出力
4:変数random_numberに1から100の範囲で乱数を生成して代入
5:変数random_numberの値を「ランダムに生成された数字は random_number です。」として出力
6:変数sumにuser_numberとrandom_numberの合計を代入
7:変数sumの値を「あなたが入力した数字とランダムな数字の合計は sum です。」として出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# ユーザーに1から100までの数字の入力を促す puts "1から100までの数字を入力してください:" # ユーザーが入力した数字を整数として取得し、変数 user_number に格納 user_number = gets.to_i # 入力された数字を表示 puts "あなたが入力した数字は #{user_number} です。" =begin 【穴埋め問題1】 ここで、1から100までのランダムな数字を生成し、それを変数 random_number に代入するコードを書いてください。 =end # 生成されたランダムな数字を表示 puts "ランダムに生成された数字は #{random_number} です。" # 入力された数字とランダムな数字の合計を計算 sum = user_number + random_number # 二つの数字の合計を表示 puts "あなたが入力した数字とランダムな数字の合計は #{sum} です。"
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# ユーザーに1から100までの数字の入力を促す puts "1から100までの数字を入力してください:" # ユーザーが入力した数字を整数として取得し、変数 user_number に格納 user_number = gets.to_i # 入力された数字を表示 puts "あなたが入力した数字は #{user_number} です。" # 1から100の間でランダムな数字を生成し、変数 random_number に格納 random_number = rand(1..100) # rand(1..100) は1から100までの範囲で乱数を生成します # 生成されたランダムな数字を表示 puts "ランダムに生成された数字は #{random_number} です。" # 入力された数字とランダムな数字の合計を計算 sum = user_number + random_number # 二つの数字の合計を表示 puts "あなたが入力した数字とランダムな数字の合計は #{sum} です。"
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
ユーザーからの入力を受け取る部分
puts "1から100までの数字を入力してください:" user_number = gets.to_i
puts
は、画面に文字列を表示するための命令です。この行では「1から100までの数字を入力してください:」と表示し、ユーザーに数値を入力してもらいます。gets
はユーザーの入力を受け取るための命令で、to_i
はその入力を整数に変換します。これにより、ユーザーが入力した値が整数として変数user_number
に格納されます。
入力した数を表示する部分
puts "あなたが入力した数字は #{user_number} です。"
#{}
は、文字列の中に変数の値を埋め込む「式展開」という機能です。- この行では、ユーザーが入力した数を表示します。
乱数を生成する部分
random_number = rand(1..100)
rand(1..100)
は、1から100までの範囲内でランダムな数(乱数)を生成します。このプログラムの中で「乱数生成」の重要な部分です。rand
メソッドを使うと、指定した範囲からランダムな整数を簡単に生成できます。ここで生成された乱数は、変数random_number
に格納されます。
生成された乱数を表示する部分
puts "ランダムに生成された数字は #{random_number} です。"
- ここでは生成された乱数をユーザーに見せるために表示しています。
- 先ほどの
#{}
を使用して、変数random_number
の値が出力されます。
まとめ
このプログラムを通してRubyでの「乱数生成」と「ユーザー入力」の基本を学びました。
特に rand
メソッドを使って数値をランダムに生成し、それを他の値と組み合わせる方法が理解できたと思います。
基本的な文法を組み合わせるだけでシンプルな計算を含むプログラムを作ることができます。
今後もぜひこの方法を他のプログラムに応用してみてください。
FAQ|Rubyのrandメソッドでランダム処理をマスターしよう
- Q1. Rubyでrand(1..6)とrand(6)の違いは何ですか?
-
rand(6)
は0から5の整数をランダムに生成しますが、rand(1..6)
は1から6の範囲内でランダムに値を出力します。前者は開始値が0で、後者は範囲オブジェクトによって両端が含まれるため、サイコロのようなケースではrand(1..6)
が適しています。
- Q2. 同じ乱数の結果を毎回再現するにはどうすればよいですか?
-
srand(値)
メソッドを使うことで、乱数のシード値を固定できます。同じシードを設定すれば、rand()
の結果も毎回同じになります。これはテストやデバッグ時など、乱数の再現性が必要な場面で便利です。
- Q3. rand()で生成される数値に偏りはありますか?完全にランダムですか?
-
Rubyの
rand()
は擬似乱数(Pseudo-random)を生成します。これは一見ランダムに見えますが、完全な乱数ではなく、一定のアルゴリズムに基づいて出力されます。セキュリティや暗号用途ではRandom.new
やOpenSSLの乱数を検討すべきです。