Rubyでプログラミングを行う際、特定の処理を決められた回数だけ繰り返したい場面は非常に多くあります。

Rubyには直感的に記述できるメソッドが豊富に用意されており、用途に合わせて最適な方法を選択することが可能です。

本記事では、初心者から中級者の方に向けて、Rubyでループ回数を指定する多様な手法を詳しく解説します。

開発効率を高めるための書き分けについても触れていきますので、ぜひ参考にしてください。

timesメソッドによる回数指定の基本

Rubyで最もシンプルにループ回数を指定する方法は、Integerクラスに用意されているtimesメソッドを使用することです。

timesメソッドは、指定した数値の回数分だけブロック内の処理を繰り返します

他のプログラミング言語のような複雑な初期化式を書く必要がなく、コードの意図が明確になるのが特徴です。

timesメソッドの基本的な書き方

以下のコードは、コンソールにメッセージを5回出力する例です。

Ruby
# 5回繰り返す
5.times do
  puts "こんにちは、Ruby!"
end
実行結果
こんにちは、Ruby!
こんにちは、Ruby!
こんにちは、Ruby!
こんにちは、Ruby!
こんにちは、Ruby!

添字(インデックス)を利用する方法

ループの中で、現在何回目の処理なのかという数値を利用したい場合もあります。

その場合は、ブロック引数(|i|など)を定義することで、0から始まるインデックスを取得できます

Ruby
# 0から4までのインデックスを表示
5.times do |i|
  puts "#{i}回目のループです"
end
実行結果
0回目のループです
1回目のループです
2回目のループです
3回目のループです
4回目のループです

範囲を指定して繰り返すuptoメソッドとdowntoメソッド

特定の数値から特定の数値まで、範囲を指定してループさせたい場合にはuptoメソッドやdowntoメソッドが便利です。

数値を増やしながら繰り返すupto

uptoメソッドは、現在の数値から引数で指定した数値まで、1ずつ増やしながら処理を繰り返します。

Ruby
# 3から5まで繰り返す
3.upto(5) do |i|
  puts "現在の値は #{i} です"
end
実行結果
現在の値は 3 です
現在の値は 4 です
現在の値は 5 です

数値を減らしながら繰り返すdownto

カウントダウンのような処理を行いたい場合は、downtoメソッドを使用します。

こちらはレシーバーの数値から引数の数値まで、1ずつ減らしながら実行されます。

Ruby
# 3から1までカウントダウン
3.downto(1) do |i|
  puts "カウント: #{i}"
end
実行結果
カウント: 3
カウント: 2
カウント: 1

増分を自由に指定できるstepメソッド

「2おきに処理したい」「0.5ずつ増やしたい」といった変則的な回数指定を行いたい場合には、stepメソッドが適しています。

stepメソッドは、開始数値.step(終了数値, 増分)という形式で記述します。

増分を省略した場合は、デフォルトで1ずつ増加します。

Ruby
# 1から10まで、2ずつ増やして繰り返す
1.step(10, 2) do |i|
  puts "ステップ値: #{i}"
end
実行結果
ステップ値: 1
ステップ値: 3
ステップ値: 5
ステップ値: 7
ステップ値: 9

このように、奇数のみを抽出したり、特定の倍数で処理を行いたい場合に非常に強力なツールとなります。

Rangeオブジェクトとeachメソッドの組み合わせ

Rubyの代表的な繰り返し処理であるeachメソッドを、範囲(Range)オブジェクトと組み合わせて使う方法も一般的です。

(開始..終了)という記法を用いることで、指定した回数のループを生成できます。

Ruby
# 1から5まで繰り返す
(1..5).each do |i|
  puts "Rangeループ: #{i}"
end
実行結果
Rangeループ: 1
Rangeループ: 2
Rangeループ: 3
Rangeループ: 4
Rangeループ: 5

なお、(1...5)のようにドットを3つにすると、末尾の数値を含まない範囲(1から4まで)となります。

より高度な制御を行うloopメソッド

回数を事前に厳密に決めるのではなく、特定の条件を満たすまで繰り返したい場合にはloopメソッドを使用します。

ただし、そのままでは無限ループになってしまうため、内部でカウンタ変数を用意し、breakを使って終了させる必要があります。

Ruby
count = 0

# 独自に回数をカウントして終了させる
loop do
  count += 1
  puts "loopメソッド実行中: #{count}"
  
  # 3回目でループを抜ける
  break if count == 3
end
実行結果
loopメソッド実行中: 1
loopメソッド実行中: 2
loopメソッド実行中: 3

loopメソッドは、複雑な終了条件が必要な場合や、外部の状態を監視しながらループさせたい場合に有用です。

ループ手法の比較まとめ

状況に応じて最適なメソッドを選択できるように、それぞれの特徴を以下の表にまとめました。

メソッド名主な用途特徴
times単純な回数指定最も簡潔。0からカウントしたい時に最適。
upto / downto特定の数値間の反復開始と終了が明確な場合。カウントアップ/ダウンが容易。
step等間隔の反復「n個飛ばし」や「小数の加算」などが可能。
each (Range)範囲オブジェクトの反復Rubyらしい標準的な書き方。配列への変換も容易。
loop条件による中断回数だけでなく、状態に応じた柔軟なループ制御が可能。

まとめ

Rubyには、ループ回数を指定するための多様なメソッドが備わっています。

単純な回数指定であれば times を使い、数値の範囲が重要な場合は uptoRange を活用しましょう。

さらに細かい制御が必要な場面では steploop を使い分けることで、可読性の高い綺麗なコードを書くことができます。

それぞれのメソッドの挙動を理解し、開発シーンに合わせて最適なものを選択してみてください。