Rubyで繰り返し処理をする方法はいくつかありますが、回数を指定して繰り返し処理を書きたいときはstepを使うと便利です。

たとえば、5回実行したいときはこんな感じ。1.step(5)とすることで、1から始まって5まで繰り返してくれます。

ブロックの{ |n| puts n }ではnにカウントアップした数値が入っているのでそれを使えます。

今回はただputsで表示しているだけ。

1.step(5) { |n| puts n }

こんな感じで出力されます。

irb(main):001:0> 1.step(5) { |n| puts n }
1
2
3
4
5
=> 1

これだけだとあんまり便利な気がしないですね。stepは二番目の引数にカウントアップの単位を指定することができます。

たとえば0.step(100, 5)とすると、0から5刻みで100まで繰り返し処理を実行してくれます。繰り返しの回数は20回で、ブロック引数には5ずつ足し込まれた値が入ってくる形ですね。

eachとかwhileでやると自分で変数とか用意しないといけないですが、stepを使うとその必要がなくなります。

irb(main):003:0> 0.step(100, 5) { |n| puts n  }
0
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
=> 0

さらに、stepは日付でも可能です。これがかなり便利です。

以下の例は2022年1月1日から始まって、20日刻みで今日の日付までカウントアップする例です。

今日の日付がピッタリと20日刻みにハマらないときは、その手前までが対象になります。

Date.new(2022, 1, 1).step(Date.current, 20) { |d| puts d  }
2022-01-01
2022-01-21
2022-02-10
2022-03-02
2022-03-22
2022-04-11
2022-05-01
2022-05-21
2022-06-10
2022-06-30
2022-07-20
2022-08-09
2022-08-29
2022-09-18
2022-10-08
2022-10-28
2022-11-17
2022-12-07
2022-12-27
2023-01-16
=> Sat, 01 Jan 2022

eachとかでやってもできますが、より読みやすいコードを書くことができる場合があるので、コードを書くときは使い所を探りながらやっていきたいです。

この記事の環境情報

  • Ruby 3.1.2
  • メガネ(本体)を新調したい