カテゴリ: Ruby 更新日: 2026/01/15

Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方

走査と反復処理:each・each_key・each_value・each_pair の基本
走査と反復処理:each・each_key・each_value・each_pair の基本

先生と生徒の会話形式で理解しよう

生徒

「Rubyのハッシュの中にたくさんのデータを入れたのですが、これらを一つずつ順番に取り出して表示する方法はありますか?」

先生

「もちろんありますよ!『繰り返し処理(反復処理)』という機能を使えば、どれだけ大量のデータがあっても自動で順番に処理できます。」

生徒

「一つずつ手作業で書かなくていいんですね!でも、名前(キー)だけ欲しいときや、中身(値)だけ欲しいときはどうすればいいんでしょう?」

先生

「それを見事に解決するのが、eachやeach_keyといったメソッドです。使い分けのコツを一緒に学んでいきましょう!」

1. 走査と反復処理とは?プログラムの「繰り返し」を理解する

1. 走査と反復処理とは?プログラムの「繰り返し」を理解する
1. 走査と反復処理とは?プログラムの「繰り返し」を理解する

Rubyのハッシュ(Hash)に保存されたデータを一つずつ順番に見ていくことを、プログラミング用語で走査(そうさ)と言います。また、同じような動作を何度も繰り返すことを反復処理(はんぷくしょり)やループと呼びます。

プログラミング未経験の方に例えると、これは「名簿を上から順番に読み上げる作業」に似ています。名簿(ハッシュ)には「出席番号(キー)」と「名前(値)」がセットで書かれていますよね。先生が一人ずつ順番に呼んでいく作業、それがまさにイテレーション(繰り返しの別の呼び方)なのです。これを使えば、データが10個でも1万個でも、わずか数行のコードで処理を完結させることができます。Rubyの基本の中でも、非常に強力で便利な機能です。

2. 基本中の基本!eachメソッドで全てのデータを取り出す

2. 基本中の基本!eachメソッドで全てのデータを取り出す
2. 基本中の基本!eachメソッドで全てのデータを取り出す

Rubyのハッシュで最も使われるのが each メソッドです。これはハッシュの中に格納されている「キー(名前)」と「値(データ)」をペアのまま、最初から最後まで順番に取り出してくれます。

使い方は、ハッシュに対して .each do |キー, 値| と書き、その後に繰り返したい処理を書くだけです。do から end までの間に書かれた内容が、データの数だけ実行されます。この縦棒 | | で囲まれた部分は、今取り出しているデータを一時的に入れておく「コップ」のようなものだと考えてください。変数の知識を活かして、好きな名前をつけることができます。


# フルーツの値段を管理するハッシュ
prices = { "りんご" => 150, "バナナ" => 100, "みかん" => 80 }

# eachを使って一つずつ表示する
prices.each do |fruit, price|
  puts "#{fruit}は一粒#{price}円です"
end

りんごは一粒150円です
バナナは一粒100円です
みかんは一粒80円です

3. キーだけが欲しい時に使う「each_key」

3. キーだけが欲しい時に使う「each_key」
3. キーだけが欲しい時に使う「each_key」

ハッシュの中身(値)には興味がなく、名前(キー)だけを順番に並べたい時があります。そんな時に便利なのが each_key メソッドです。名簿の例で言えば、名前は飛ばして「出席番号だけを順番に読み上げる」ような状態です。

each を使って値の部分を無視することも可能ですが、each_key を使うことで「私は今、キーだけを扱っています」という意図が他のプログラマー(あるいは未来の自分)に伝わりやすくなり、可読性(読みやすさ)が向上します。Rubyの文法では、このように目的に合った専用の道具を選ぶことが推奨されています。


# ユーザーのIDリスト
users = { id_001: "佐藤", id_002: "鈴木", id_003: "田中" }

# ID(キー)だけを順番に表示する
users.each_key do |id|
  puts "登録されているID: #{id}"
end

登録されているID: id_001
登録されているID: id_002
登録されているID: id_003

4. 値だけをまとめて処理する「each_value」

4. 値だけをまとめて処理する「each_value」
4. 値だけをまとめて処理する「each_value」

今度は逆に、キーは見ないで中身のデータ(値)だけを処理したい場合です。これには each_value メソッドを使います。例えば、商品の在庫数だけを順番に取り出して、全部でいくつあるか合計を計算したい時などに非常に役立ちます。

パソコンを触ったことがない方には、「引き出しのラベルは見ずに、中の服だけを全部取り出して洗濯機に入れる作業」を想像してください。データ型が数値であれば計算に、文字列であれば表示にと、値の種類に合わせて自由自在に反復処理を組み立てることができます。


# お小遣い帳のようなハッシュ
wallet = { food: 500, transport: 200, book: 1000 }
total = 0

# 金額(値)だけを取り出して合計を出す
wallet.each_value do |money|
  total += money
end

puts "合計金額は#{total}円です"

合計金額は1700円です

5. eachとeach_pairは何が違うの?

5. eachとeach_pairは何が違うの?
5. eachとeach_pairは何が違うの?

Rubyのハッシュの解説を読んでいると、each_pair というメソッドが出てくることがあります。結論から言うと、each と each_pair は全く同じ動きをします。

「pair(ペア)」という言葉が示す通り、キーと値のペアを扱うことを強調したい時に使われますが、Rubyの世界では短い each の方が圧倒的に好まれて使われています。プログラミング未経験の方は、「同じ意味の言葉が二つあるんだな」くらいに思っておけば大丈夫です。Rubyの記法としては、基本的には each を選んでおけば間違いありません。

6. ハッシュを空にする?操作中の注意点

6. ハッシュを空にする?操作中の注意点
6. ハッシュを空にする?操作中の注意点

反復処理を行っている最中に、そのハッシュの中身を書き換えたり、消したりすることは避けましょう。これをやってしまうと、コンピュータが「次はどこを処理すればいいんだっけ?」と混乱してしまい、予期せぬエラーが発生したり、処理が途中で終わってしまったりすることがあります。

もしデータを削除したい場合は、一度 select メソッドなどで新しいハッシュを作るか、繰り返しの外で操作するのがプログラミングのコツです。安全にデータを走査するためには、ルールを守って「見るだけ」にするのが基本です。

7. Enumerableとイテレーションの関係

7. Enumerableとイテレーションの関係
7. Enumerableとイテレーションの関係

今回紹介したメソッドは、Rubyの Enumerable(エニュメラブル) という強力な機能の一部です。「数え上げることができる」という意味で、配列やハッシュなど、たくさんのデータが集まったものに対して共通で使える便利な道具箱のようなものです。

この Enumerable を理解すると、ただ繰り返すだけでなく「特定の条件に合うものだけ探す(select)」や「中身を一斉に作り変える(map)」といった、より高度なデータ操作ができるようになります。まずは each で基礎を固め、少しずつこの不思議な道具箱の中身をのぞいていきましょう。オブジェクト指向の楽しさがここに詰まっています。

8. ハッシュが空だった場合はどうなる?

8. ハッシュが空だった場合はどうなる?
8. ハッシュが空だった場合はどうなる?

もしデータが一つも入っていない空のハッシュ {} に対して each を実行したとしても、Rubyはエラーを出しません。単に「繰り返す中身がないので、何もせずに終わる」だけです。これは非常に優れた設計で、わざわざ「中身があるかな?」と if 文でチェックしなくても、安全にプログラムを動かし続けることができます。

制御構造を学ぶ際に、この「空の状態」をどう扱うかは重要ですが、Rubyの反復処理はその点でも初心者にとって非常に優しい作りになっています。安心して色々なデータを流し込んでみてください。


# 空っぽのハッシュ
empty_hash = {}

# 実行しても何も起きない(エラーにならない)
empty_hash.each do |k, v|
  puts "見つかりました!"
end

puts "処理が終わりました"

処理が終わりました

9. 実践!ハッシュ走査を組み合わせてアプリを作る

9. 実践!ハッシュ走査を組み合わせてアプリを作る
9. 実践!ハッシュ走査を組み合わせてアプリを作る

最後に、学んだことを組み合わせてみましょう。名簿から特定の条件(例えば年齢が20歳以上など)の人だけを表示するプログラムも、each比較演算子 を組み合わせれば簡単に作れます。このように、小さな機能をつなぎ合わせて大きな目的を達成するのがソフトウェア開発の醍醐味です。

今回学んだ eacheach_keyeach_value を使い分けることで、あなたのRubyコードはより美しく、そして効率的になります。まずはキーボードで実際にコードを打ち込み、画面に文字が並ぶ感動を味わってください。それがプログラマーへの第一歩です!

カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方