Ruby eachメソッドを初心者でも使える!知っていると便利な知識やfor文との違いも

プログラミング言語Rubyのeachメソッドを、Ruby初心者向けに解説します。

Rubyのeachメソッドは、for式(for文)と似ており、繰り返し処理を行うメソッドです。

※プログラミング言語Rubyでは、あまりfor式は使われません。for式に関する詳しい説明は、for式について解説した記事をご覧ください。

本記事では、Ruby eachメソッドの基本的な使い方から、知っておくと便利な知識まで丁寧に解説します。

本記事を読み終える頃には、Ruby eachメソッドの基本が理解できているでしょう。ぜひ最後まで読んで、Ruby eachメソッドを理解してください。

公開日:2021年3月25日

Ruby eachメソッドとは?どんな書き方?

まずは、Ruby eachメソッドをどのような時に使用するか解説します。

eachメソッドは、非常に簡単に言うと、繰り返し処理を行いたい時に使用します。

Rubyの中では、繰り返し処理を行う対象は、以下の3つになります。

  • 配列の要素

配列は、同じ種類の要素が複数含まれるデータの事です。例えば、「名前」という配列に、「前田」「佐藤」「鈴木」という要素を持たせることが可能です。

※配列があまり理解できていない人は、配列について詳しく解説した記事をご覧ください。

  • 範囲オブジェクト

範囲オブジェクトとは、範囲の開始位置と、終了位置で定義できるオブジェクト(操作対象)の事です。例えば、110の数値や、azのような文字が範囲オブジェクトです。

  • ハッシュの要素

ハッシュは「キー」と「値」を要素の組み合わせとして持ったオブジェクトです。配列の場合要素を指定する場合は、配列のインデックス番号を使いますが、ハッシュでは「キー」を指定することで、「値」が取得できます。「キー」と「値」を複数の組み合わせで持つことが多いので、その要素に対して繰り返し処理を行います。

Ruby eachメソッドの基本的な書き方・具体例

eachメソッドの基本的な書き方は以下のようになります。

では、eachメソッドを3つのやり対象に対して、具体例をあげて紹介します。下記のソースコードをご覧ください。

eachメソッドの具体例(配列の要素)】

【出力結果】

まず、ソースコードの1行目でfruitsという配列オブジェクトを用意しています。

そして、配列オブジェクトfruitsの要素(メロン・ブドウ・リンゴ)を順番に変数fruitに代入し、putsで出力しています。

配列の名前はfruitsで複数形、eachメソッド内での変数はfruitで単数形になっていることに注意してください。

また、eachメソッド内で使用したfruitという変数は「ブロックパラメータ」と呼ばれているので、ぜひ覚えておきましょう。

 eachメソッドの具体例(範囲オブジェクト)】

【出力結果】

rangeオブジェクトに、15まで(1, 2, 3, 4, 5)の要素を、「1..5」の記述で設定しています。範囲オブジェクトは、「範囲開始..範囲終了」の記述方法で指定することが可能です。ちなみに、「..」を「」にすることで、範囲終了の値は含まない指定となります。

その後、rangeオブジェクトに、eachメソッドを実行し、rangeの要素を、putsで出力しています。

eachメソッドの具体例(ハッシュの要素)】

【出力結果】

ハッシュの要素として、pointに、「国語:60」、「数学:80」、「英語:70」をキーと値の組み合わせとして定義します。

eachメソッドでは、ブロックパラメータを |「キー」, 「値」| のように設定するのが注意点です。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

Ruby eachと併せて知っておきたいeach_with_indexメソッド

繰り返し処理には、eachメソッドを使うと便利であることは、これまでにお伝えしてきました。しかし、eachメソッドでは、配列などの要素は扱えますが、「何番目の要素」に対する処理なのかがわかりません。配列の要素とともに要素の番号(添字)も扱いたいときは、each_with_indexメソッドを使うと便利です。

Ruby eachメソッドの基本的な書き方・具体例」で挙げた、配列の例をeach_with_indexメソッドに変更してみましょう。

【出力結果】

配列の要素が、ブロックパラメータの fruitに入り、要素番号はiに入ります。

また、i0から始まるため、putsには、{i+1}することで、1番目からの出力となるようにしています。

each_with_indexについて解説した記事も合わせて読むと、Ruby eachメソッドについての理解がさらに深まるので、ぜひご覧ください。

for文との違いは?

for文も繰り返し処理の際に使用しますが、each文の違いは、変数のスコープ(変数の有効範囲)です。

サンプルコードを使い、実行結果とともに具体例を見た方が理解しやすいため、先にサンプルコードを紹介します。

for文の場合】

【出力結果】

each文の場合】

【出力結果】

for文の場合、2行目に使用されたi6行でも使用可能であるため、その時のiの値が出力されます。一方、each文の場合、2行目で使用されたieach文の中でした使用できないため、6行目のiは変数が宣言されていないというエラーが出力されます。

この使用できる範囲がfor文とeach文の違いです。

理解を深めたい方は、for文について解説した記事も合わせてご覧ください。

 

Ruby eachメソッドを範囲で使ってみよう

Ruby eachメソッドは、「範囲」でも使用することができます。

範囲は、配列やハッシュ(連想配列)と同じく、集まりを表すオブジェクトです。したがって、範囲でもeachメソッドが使用できます。

範囲は、最初の要素と最後の要素を..(ピリオド2個)で繋げて表現します。

【範囲の例】

これで、rangeという変数に1~20までの数字が順番に代入されました。

では、範囲でeachメソッドを使ってみます。下のソースコードをご覧ください。

【範囲でeachメソッドを使う例】

【出力結果】

変数(ブロックパラメータ)であるnumberに1~3までの数字が順番に代入されてputsされました。

Ruby eachメソッドを範囲で使う解説は以上です。

 

Ruby eachメソッドをハッシュで使ってみよう

最後に、Ruby eachメソッドをハッシュ(連想配列)で使う方法を紹介します。

※ハッシュ(連想配列)があまり理解できていない人は、配列について解説した記事の「5:ハッシュ(連想配列)について」をご覧ください。

ハッシュ(連想配列)のキーと値を順番に取り出す時にも、eachメソッドが使えます。

変数(ブロックパラメータ)を2つ用意することで、キーと値を順番に取り出せます。

では、ソースコードの例をご覧ください。

【ハッシュ(連想配列)でeachメソッドを使う例】

【出力結果】

※#{}は変数展開といいます。#{}の中に式や変数を入れると、その式や変数が文字列の中に展開されます。

【変数展開の例】

【出力結果】

今回はkey、valueという2つの変数(ブロックパラメータ)を用意しました。

keyという変数には配列itemsのキー(鉛筆・消しゴム・ノート)が順番に代入されます。

valueという変数には、配列itemsの値(100・50・200)が順番に代入されます。

Ruby eachメソッドをハッシュ(連想配列)で使う解説は以上です。

 

いかがでしたか?Ruby eachメソッドの基本が理解できましたか?

プログラミング言語Rubyを学習した後は、Ruby on Railsというフレームワークを使ったWEBアプリケーションの開発にチャレンジしてみてください!

Ruby on Railsでも、今回学習したeachメソッドは大変よく使うので、eachメソッドは必ず理解しておきましょう。

Udemyおすすめ講座

はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう

はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう

4.6(1,891 件の評価)

13,602 人の受験生

作成者: 中村 祐太 Yuta Nakamura(ウェブ開発, 生成AI, ChatGPT, AWS)
Proglus (プログラス)(プログラミング入門)

Rails7対応。汎用性が高くPythonやPHPと同様に人気のある Rubyを使ってWebアプリケーション開発に挑戦しよう。基礎からAWSでの開発環境構築、Renderを使ってインターネットに公開するまでを体系的に学べる

\無料でプレビューをチェック!/

講座を見てみる

評価:★★★★★
他の言語と比べて環境構築やバージョン管理などで躓くことが多く苦手意識のあるRubyですが、無事完了出来て良かったです。アプリ開発のレクチャーでもコードの記述ミスに何度か引っかかりました。個人的にはRenderを使って、ウェブサービス公開を体験できたのが良かったです。ありがとうございました。

評価:★★★★★
HTML・CSS・JavaScript・Ruby等Progateで一通りやってから受講しましたが、一度はつまづいてしまったRailsを使った学習をとりあえず最後までやることが出来ました。動画の最後にもありましたが完成したアプリを自分なりに編集したりして学習を続けたいと思います。