{"id":80052,"date":"2024-03-28T16:15:18","date_gmt":"2024-03-28T07:15:18","guid":{"rendered":"https://freelance.indieverse.co.jp/media/?p=80052"},"modified":"2025-11-01T16:34:39","modified_gmt":"2025-11-01T07:34:39","slug":"ruby-each","status":"publish","type":"post","link":"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-each","title":{"rendered":"【Ruby】eachメソッドの使い方の基礎から応用まで現役エンジニアが解説します"},"content":{"rendered":"<p>この記事では、</p>\n<ul>\n<li>Rubyのeachメソッドの基本的な使い方を学びたい。</li>\n<li>eachメソッドを使った配列やハッシュの操作方法を知りたい。</li>\n<li>eachメソッド以外のRubyの繰り返し処理メソッドについて学びたい。</li>\n<li>eachメソッドの実際の活用例を具体的に知りたい。</li>\n<li>eachメソッドの応用方法やバリエーションを知りたい。</li>\n</ul>\n<p>という悩みを抱えている向けに、</p>\n<ul>\n<li>Rubyのeachメソッドの基礎的な利用方法</li>\n<li>eachメソッドを配列、範囲、ハッシュで活用する</li>\n<li>各種eachメソッドの応用的な使い方</li>\n</ul>\n<p>について解説していきたいと思います。</p>\n<h2>Rubyのeachメソッドを使ってコレクションを操作する方法</h2>\n<p>Rubyにおいて、コレクション（配列やハッシュなど）を操作する際には<code>each</code>メソッドが非常に便利です。このメソッドを用いることで、コレクションに含まれる各要素に対して同じ操作を繰り返し適用することができます。</p>\n<h2>Rubyでeachメソッドを理解しよう</h2>\n<h3>eachメソッドとループ処理の基本</h3>\n<p>Rubyで配列やハッシュに対して繰り返し処理を行う最も一般的な方法が<code>each</code>メソッドです。使い方は非常にシンプルで、次のように書きます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[1, 2, 3].each do |number|\r\n   puts number\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このコードは、配列内の各要素を出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>1\r\n\r\n2\r\n\r\n3</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>配列の各要素が<code>number</code>変数に代入され、<code>do</code>から<code>end</code>までのブロック内の処理が繰り返されます。</p>\n<h3>eachメソッドの多様な活用法</h3>\n<p><code>each</code>メソッドは、配列だけでなくハッシュに対しても使用できます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>{ apple: 'リンゴ', orange: 'オレンジ', melon: 'メロン' }.each do |key, value|\r\n   puts \"#{key}は日本語で#{value}です。\"\r\nend</code></pre>\n</div>\n<p>このコードは各キーバリューペアを出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>appleは日本語でリンゴです。\r\n\r\norangeは日本語でオレンジです。\r\n\r\nmelonは日本語でメロンです。</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このようにして、<code>each</code>メソッドを用いることで、Rubyにおける様々なコレクションの操作が可能になります。</p>\n<h2>eachメソッドを配列、範囲、ハッシュで活用する</h2>\n<h3>配列を操作するeachメソッドの例</h3>\n<p>Rubyにおける配列は、複数の要素を順序付けて格納することができるコレクションです。配列を扱う際に、<code>each</code>メソッドを使用して、配列内の各要素に対して繰り返し処理を適用することが一般的です。次の例では、<code>each</code>メソッドを使用して配列の各要素を一つずつ出力します。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>fruits = [\"リンゴ\", \"オレンジ\", \"メロン\"]\r\n\r\nfruits.each do |fruit|\r\n   puts fruit\r\nend</code></pre>\n</div>\n<p>このコードを実行すると、以下のように配列内の各要素が出力されます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>リンゴ\r\n\r\nオレンジ\r\n\r\nメロン</code></pre>\n</div>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-array\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2024/03/pexels-kevin-ku-577585-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">Rubyの配列操作完全マニュアル | 追加 / 更新 / 削除 / 繰り返しの方法について現役エンジニアが解説</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">Rubyの配列操作を基礎から解説。作成・取得・追加・更新・削除・繰り返しの書き方...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n<h3>範囲オブジェクトでeachメソッドを使う具体例</h3>\n<p>Rubyでは、<code>..</code>や<code>...</code>を使用して範囲オブジェクトを生成することができます。これらの範囲オブジェクトにも<code>each</code>メソッドを適用することができます。次の例では、1から5までの範囲オブジェクトを生成し、その範囲内の各数字を出力します。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>(1..5).each do |num|\r\n   puts num\r\nend</code></pre>\n</div>\n<p>このコードを実行すると、1から5までの数字が順番に出力されます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>1\r\n\r\n2\r\n\r\n3\r\n\r\n4\r\n\r\n5</code></pre>\n</div>\n<h3>ハッシュを扱うeachメソッドの応用</h3>\n<p>ハッシュはキーと値のペアで構成されるコレクションです。<code>each</code>メソッドはハッシュに対しても使用でき、キーと値のペアそれぞれに対して繰り返し処理を行うことができます。以下の例では、<code>each</code>メソッドを使用して、ハッシュの各要素のキーと値を出力します。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>fruits_price = { apple: 100, orange: 200, melon: 300 }\r\nfruits_price.each do |key, value|\r\n    puts \"#{key}の価格は#{value}円です。\"\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このコードの実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>appleの価格は100円です。\r\n\r\norangeの価格は200円です。\r\n\r\nmelonの価格は300円です。</code></pre>\n</div>\n<p>これらの例からもわかるように、Rubyの<code>each</code>メソッドは配列、範囲、ハッシュなど様々なコレクションに対して柔軟に活用することができ、Rubyプログラミングの基礎的な部分をなす重要なメソッドです。</p>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-hash\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2022/11/code-g7e399f5d0_1280-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">【Ruby】 hashの使い方完全マニュアル | 追加, 更新, 削除, 高度な利用方法について現役エンジニアが解説します</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">RubyのHashの使い方を基礎から応用まで解説。配列との違い、追加・更新・削除、key...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n<h2>eachのバリエーションと応用</h2>\n<h3>each_sliceやeach_with_objectなどの応用例</h3>\n<p>Rubyには<code>each</code>メソッドのバリエーションとして<code>each_slice</code>や<code>each_with_object</code>など、より高度な繰り返し処理を行うためのメソッドがあります。これらのメソッドを活用することで、コードをより効率良く記述することができます。</p>\n<p>例えば、<code>each_slice</code>メソッドは集合を指定したサイズの「スライス」（部分配列）に分割し、それぞれのスライスに対してブロックを実行します。次の例では、1から10までの数値を含む配列を3つずつのスライスに分割し、各スライスを出力しています。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>(1..10).each_slice(3) do |slice|\r\n   p slice\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このコードを実行すると、以下のように配列が3つずつのグループに分割されて出力されます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[1, 2, 3]\r\n\r\n[4, 5, 6]\r\n\r\n[7, 8, 9]\r\n\r\n[10]</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>一方、<code>each_with_object</code>メソッドは各要素に対する処理と共に、あるオブジェクト（例えば、空のハッシュや配列）を引き渡し、そのオブジェクトをブロック内で更新できます。結果として、更新されたオブジェクトが返されます。次の例では、配列の各要素をキーとし、その要素の長さを値とするハッシュを作成しています。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>words = [\"apple\", \"orange\", \"melon\"]\r\nlengths = words.each_with_object({}) do |word, hash|\r\n   hash[word] = word.length\r\nend\r\np lengths</code></pre>\n</div>\n<p>このコードを実行すると、以下のハッシュが出力されます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>{\"apple\"=&gt;5, \"orange\"=&gt;6, \"melon\"=&gt;5}</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>これらのメソッドを使いこなすことで、Rubyでの繰り返し処理の幅が大きく広がります。</p>\n<h2>eachに関連するメソッド</h2>\n<h3>reverse_eachについて</h3>\n<p><code>reverse_each</code>メソッドは、<code>each</code>メソッドと同様に繰り返し処理を行いますが、コレクションの要素を逆順に処理します。これにより、特に配列や範囲オブジェクトでの処理順序を逆転させる際に便利です。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[1, 2, 3].reverse_each do |number|\r\n   puts number\r\nend</code></pre>\n</div>\n<p>このコードは、配列内の要素を逆順に出力します。実行結果は以下のようになります。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>3\r\n\r\n2\r\n\r\n1</code></pre>\n</div>\n<h3>each_with_indexの役割と使い方</h3>\n<p><code>each_with_index</code>メソッドは、<code>each</code>メソッドと同じように繰り返し処理を行いますが、追加で各要素のインデックスもブロックに渡します。これにより、要素だけでなく、その要素の位置も知ることができます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[\"リンゴ\", \"オレンジ\", \"メロン\"].each_with_index do |fruit, index|\r\n   puts \"#{index}: #{fruit}\"\r\nend</code></pre>\n</div>\n<p>このコードは、配列の各要素とそのインデックスを出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>0: リンゴ\r\n\r\n1: オレンジ\r\n\r\n2: メロン</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このように、<code>each</code>メソッドのバリエーションを理解し活用することで、Rubyプログラミングの柔軟性と表現力を高めることができるでしょう。</p>\n<h2>一緒に理解しておきたい繰り返し処理のメソッド</h2>\n<p>Rubyのプログラミングでは、<code>each</code>メソッドだけでなく、他にも多くの繰り返し処理を行うメソッドが用意されています。これらのメソッドを適切に使い分けることで、より効率的なコードを書くことができます。</p>\n<h3>select, filter</h3>\n<p><code>select</code>（または<code>filter</code>）メソッドは、ブロックの条件に一致する要素だけを取り出して新しい配列を返します。これにより、特定の条件でフィルタリングした結果を得ることができます。<code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>numbers = [1, 2, 3, 4, 5]\r\neven_numbers = numbers.select { |number| number.even? }\r\np even_numbers</code></pre>\n</div>\n<p>このコードは、偶数のみをフィルタリングして出力します。実行結果は以下の通りです。</p>\n<p><code> [2, 4]</code></p>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-select\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2024/03/28401413_m-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">【Ruby】 selectメソッド完全マニュアル | 基礎から応用・filterとの違いについても解説</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">Rubyのselectメソッドを基礎から解説。配列・ハッシュの絞り込み、select!やwith_i...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n<p>&nbsp;</p>\n<h3>reject, reject!</h3>\n<p>逆に、<code>reject</code>メソッドは、ブロックの条件に一致する要素を除外した配列を返します。<code>reject!</code>メソッドは<code>reject</code>と同様の動作をしますが、元の配列自体を変更する点が異なります。<code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>numbers = [1, 2, 3, 4, 5]\r\nnumbers.reject! { |number| number.even? }\r\np numbers</code></pre>\n</div>\n<p>このコードは、偶数を除外した配列を出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[1, 3, 5]</code></pre>\n</div>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-reject\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2024/03/やりがい-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">【Ruby】rejectメソッドの使い方 | reject!やdelete_ifとの違いについても解説</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">Rubyのrejectメソッドの基本と配列・ハッシュでの活用例、selectとの違い、reject!...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n<h3>sort</h3>\n<p><code>sort</code>メソッドは、配列の要素をソートして新しい配列を返します。ブロックを与えることで、カスタムのソート条件を定義することもできます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>words = [\"melon\", \"apple\", \"orange\"]\r\nsorted_words = words.sort\r\np sorted_words</code></pre>\n</div>\n<p>このコードは、アルファベット順にソートされた配列を出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[\"apple\", \"melon\", \"orange\"]</code></pre>\n</div>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-sort\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2022/11/code-g7e399f5d0_1280-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">Rubyのsortメソッドの使い方 | sort_byとの違いも解説</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">現役Rubyエンジニアがsortとsort_byの違いと使い分けを解説。配列・文字列・ハッシ...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n<h3>map</h3>\n<p><code>map</code>メソッド（別名: <code>collect</code>）は、配列の各要素に対してブロックを実行し、その結果を新しい配列として返します。これにより、配列の各要素を変換した結果を得ることができます。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>numbers = [1, 2, 3]\r\nsquared_numbers = numbers.map { |number| number ** 2 }\r\np squared_numbers</code></pre>\n</div>\n<p>このコードは、各要素を2乗した結果を出力します。実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>[1, 4, 9]</code></pre>\n</div>\n<p>これらのメソッドを習得することで、<code>each</code>メソッドだけでなく、より幅広くRubyの繰り返し処理を扱うことができるようになります。</p>\n<p><a href=\"edit\">Enumerable#map</a></p>\n<a href=\"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-map\" target=\"_blank\" class=\"related-article-container\">\n\t\t\t\t\t<span class=\"related-article__label\">合わせて読みたい</span>\n\t\t\t\t\t<div class=\"related-article__image\" style=\"background-image:url(https://freelance.indieverse.co.jp/media/wp-content/uploads/2022/11/coding-gfd810a303_1280-150x150.jpg)\"></div>\n\t\t\t\t\t<div class=\"related-article__content\">\n\t\t\t\t\t\t<div class=\"related-article__title\">【Ruby】mapメソッドの使い方は？eachとの違いや発展的な使い方について現役エンジニアが解説</div>\n\t\t\t\t\t\t<div class=\"related-article__description\">Rubyのmapメソッドの基本の使い方から応用、eachとの違い、配列操作を効率化するco...</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n","protected":false},"excerpt":{"rendered":"<p>Rubyのeachメソッドの基礎から応用までを現役エンジニアが解説。配列・範囲・ハッシュの繰り返し処理やeach_slice、each_with_objectの具体例まで網羅します。</p>\n","protected":false},"author":105,"featured_media":80039,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[190],"tags":[286],"class_list":["post-80052","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby","tag-ruby"],"aioseo_notices":[],"meta_description":"Rubyのeachメソッドの基礎から応用までを現役エンジニアが解説。配列・範囲・ハッシュの繰り返し処理やeach_slice、each_with_objectの具体例まで網羅します。","_links":{"self":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts"}],"about":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/types/post"}],"author":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/users/105"}],"replies":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/comments?post=80052"}],"version-history":[{"count":8,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80052/revisions"}],"predecessor-version":[{"id":93444,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80052/revisions/93444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/media/80039"}],"wp:attachment":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/media?parent=80052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/categories?post=80052"},{"taxonomy":"post_tag","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/tags?post=80052"}],"curies":[{"name":"wp","href":"https://api.w.org/{rel}","templated":true}]}}