バナー画像

本記事では、Rubyで繰り返し処理をするときに使うeachを解説します。

eachを使い、配列やハッシュ(Rubyにおける連想配列です)の要素を全て処理するといったことが可能です。またeachの使い方だけでなく、範囲オブジェクトtimesメソッドといったRubyらしい特徴も解説していきます。

本記事を読み終えると、eachを使った基本的な実装、プラスアルファで、繰り返し処理における「Rubyらしい特徴」が理解できていますよ!

Rubyにおけるeachとは?

前述のように、eachとはオブジェクトにおける繰り返し処理に使います。まずは基本構文を見てみましょう。

[基本構文]

# eachの基本構文
オブジェクト.each do |変数|
    # 繰り返したい処理
end

オブジェクトの要素が変数の中に入り「# 繰り返したい処理」にてその変数を利用可能です。それが要素分繰り返されます。

他の言語を習得された方は、いろんな違いがあることに気づかれたことでしょう。順に解説していきます。

カウンタを必要としない

例えば、C言語で処理を10回繰り返す処理は以下になります。

// C言語の繰り返しサンプル
int i;
for( i = 0 ; i < 10 ; i ++ ){
    // 繰り返したい処理
}

上記C言語と比較して、Rubyのeachはカウンタ用の変数は不要、ということに気づかれたでしょうか?

eachが使える対象は広い

基本構文はオブジェクト.eachです。しかしオブジェクトとは具体的には何?という疑問がでてきましたか?

.eachの前の「オブジェクト」とは、配列やハッシュ(連想配列)、さらにRubyの特徴でもある範囲オブジェクトなどがきます。つまり、何が来ても.eachをつければよい、というのは使いやすいですね。

オブジェクト指向の考え方をすでにマスターした方は、eachが使える対象は?というよりも、扱うオブジェクトはeachメソッドを持つか?と考えたほうがよいでしょう。
[linkPotefuri word=フリーランス案件をお探しの方はこちら ]

配列にeachを使う

配列のすべての要素を処理してみましょう。

arrayという、要素を10個持つ配列を想定します。要素の中は以下とします。

array[0] = ‘zero’
array[1] = ‘one’
array[2] = ‘two’
array[3] = ‘three’

以下のコードを実行します。

# 配列にeachを使う
array = ['one', 'two', 'three', 'four']
array.each do | value |
    puts value
end

[実行結果]

zero
one
two
three

arrayの中身がitemに入り、「puts item」でitemの中身が出力されました。

ところで、要素だけでなくインデックス(要素の順番を示す番号)も欲しいという場合はどうすればよいでしょうか?

Rubyでは、each_with_indexという便利なメソッドがあり、これを使うと簡単にインデックスを取得できます。

# 配列にeach_with_indexを使う
array = ['one', 'two', 'three', 'four']
array.each_with_index do |item, index|
    puts index.to_s + ' ; ' + item
end

[実行結果]

0 : zero
1 : one
2 : two
3 : three

itemで配列の中身、indexで番号を受け取ることができました。
[linkPoteCan word=3ヶ月間のRuby実践研修プログラムはこちら ]

ハッシュにeachを使う

配列は要素の順番をあらわすインデックスは数値です。ハッシュはインデックスを数値以外で設定できます。ハッシュの中身を以下とします。

hash[‘one’] = ‘value1’
hash[’two’] = ‘value2’
hash[’three’] = ‘value3’

上記hashをeachですべて処理しましょう。

# ハッシュにeachを使う
hash = {'one'=>'1', 'two'=>'2', 'three'=>'3', 'four'=>'4'}
hash.each do |item, index|
    puts index + ' ; ' + item
end

[実行結果]

0 ; one
1 ; two
2 ; three
3 ; four

今度はindexとvalueという2つの変数で、ハッシュの中身を受け取っています。それをputsで出力しました。

範囲オブジェクト、timesメソッド

よりRubyらしいというか、Rubyの特徴的なものを紹介します。

範囲オブジェクト

繰り返し回数が決まっている場合は、範囲オブジェクトが使えます。以下は5回繰り返す例です。

# 範囲オブジェクトでeachを使う
range = 0..5
range.each do |key|
   puts key
end

[実行結果]

0
1
2
3
4
5

範囲オブジェクトは開始値..終了値と記述するだけで生成できます。さらにそれに.eachをつけると繰り返し処理が出来上がります。

Rubyには範囲オブジェクトというものがある、ということをお分かりいただけたでしょうか?

ここでは触れませんが、範囲オブジェクトは先頭や終了の要素を取得するなどなど、便利なメソッドがたくさんあります。興味のある方はコチラを見てみてください。

timesメソッド

本記事eachとは異なるものですが、繰り返しつながりでもう一つ、timesメソッドを紹介します。

繰り返し回数が決まっている場合は、timesメソッドも使えます。

# timesメソッドで繰り返す
3.times do
   puts '繰り返す処理'
end

[実行結果]

繰り返す処理
繰り返す処理
繰り返す処理

回数指定で繰り返し処理を実装できました。

ここで重要なのは、Rubyで数値.timesで繰り返し処理ができる、ではなく「数値すらオブジェクト」ということです。ラッパークラス的なものを使わずに、数値オブジェクトのメソッドを簡単に呼び出せます

例えば「10.to_s」とすれば文字列化できるし、「14.5.round」とすれば小数点以下を四捨五入できます。
[linkPoteCan word=Rubyへのスキルチェンジを目指すなら! ]

応用例:ファイルの一覧を取得する。

最後に、今まで解説してきたことを利用して、特定フォルダのファイルを一覧表示させてみます。

# ファイルの一覧を表示する
dir = Dir.open('C:¥temp')
dir.each do |f_name|
    puts f_name
end

これだけでOKです。
Dirクラスのopenメソッドを使いファイルの一覧を取得し、それをeachで全要素を順番に表示しています。

まとめ

いかがでしたか?

eachによる繰り返し処理の実装と、その他プラスアルファのRubyの特徴をお分かりいただけたでしょうか?

本記事をスタートとして、Rubyに興味を持っていただければ幸いです。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。