カテゴリ: Ruby 更新日: 2026/03/12

RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう

cycle/repeat/zip:循環処理と複数列の同時走査テクニック
cycle/repeat/zip:循環処理と複数列の同時走査テクニック

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

生徒

「Rubyで同じ処理をずっと繰り返したり、二つのデータをセットにして扱いたいときはどうすればいいですか?」

先生

「Enumerableという仕組みにある、cycleやzipというメソッドを使うと、驚くほど簡単に書けますよ。」

生徒

「Enumerableって何だか難しそうですね。初心者でも使いこなせますか?」

先生

「大丈夫です。身近な例えを使いながら、一歩ずつプログラミングの基礎から解説していきますね!」

1. Enumerableとメソッドの基本を知ろう

1. Enumerableとメソッドの基本を知ろう
1. Enumerableとメソッドの基本を知ろう

Rubyというプログラミング言語には、データの集まりを便利に扱うためのEnumerable(エニュメラブル)というモジュールがあります。これは、配列(複数のデータを入れる箱)などを操作するための共通の道具箱のようなものです。

プログラミングを始めたばかりの方にとって、データの一つひとつを取り出して処理する「繰り返し処理」は非常に重要です。通常はeachという命令を使いますが、今回学習するcyclezipを使うと、さらに高度な「循環」や「同時並行」の処理が可能になります。

2. cycleメソッドで無限ループと循環処理

2. cycleメソッドで無限ループと循環処理
2. cycleメソッドで無限ループと循環処理

cycleメソッドは、配列の中身を最後まで表示したら、また最初に戻って繰り返すという動作をします。例えば、信号機の「赤、青、黄」という並びをずっと繰り返したい場合や、一週間(月曜日から日曜日まで)の表示をループさせたい時に役立ちます。

引数に数字を渡すと、その回数だけ繰り返して終了します。何も渡さないと無限に繰り返されるため、プログラムを止める処理が必要になりますが、決まったパターンを何度も使いたい時には非常に強力な武器になります。


colors = ["赤", "青", "黄"]
# 3回繰り返して表示する
colors.cycle(2) do |color|
  puts color
end

赤
青
黄
赤
青
黄

3. プログラミングにおけるループの安全性

3. プログラミングにおけるループの安全性
3. プログラミングにおけるループの安全性

cycleを回数指定なしで使うと、コンピュータは永遠に処理を続けてしまいます。これを無限ループと呼びます。初心者の方が誤って無限ループを実行してしまった場合は、キーボードの「Ctrlキー」を押しながら「C」を押すことで、強制的に停止させることができます。

安全に使うためには、先ほどの例のように回数を指定するか、条件によって処理を中断する仕組みを組み込むことが大切です。プログラムが固まってしまったように見えても焦らず、停止コマンドを覚えておきましょう。

4. zipメソッドで複数の配列を合体させる

4. zipメソッドで複数の配列を合体させる
4. zipメソッドで複数の配列を合体させる

次に、zipメソッドについて学びましょう。これは、二つ以上の配列を「ファスナー(ジッパー)」のように組み合わせて、一つのペアにする技術です。例えば、「名前のリスト」と「点数のリスト」を順番通りに組み合わせて、セットで表示したい場合に便利です。

バラバラに管理されているデータを、関連付けて処理することができるため、名簿作成や集計作業などで頻繁に利用されます。データの数が合わない場合は、足りない部分に「空(nil)」が入るという特徴があります。


names = ["田中", "佐藤", "鈴木"]
scores = [80, 95, 70]

# 名前と点数をセットにする
names.zip(scores) do |name, score|
  puts "#{name}さんの点数は#{score}点です"
end

田中さんの点数は80点です
佐藤さんの点数は95点です
鈴木さんの点数は70点です

5. cycleとzipを組み合わせた応用テクニック

5. cycleとzipを組み合わせた応用テクニック
5. cycleとzipを組み合わせた応用テクニック

cyclezipを一緒に使うと、さらに面白いことができます。例えば、長い名簿に対して「Aチーム、Bチーム、Cチーム」というラベルを順番に割り振っていくような処理です。名簿が100人いても、チーム名は3つを循環させて割り当てることができます。

このように、一つのデータを固定し、もう一つのデータをループさせて組み合わせる手法は、実務的なアプリケーション開発でもよく使われるテクニックです。配列の要素数が異なっていても、柔軟に対応できるのがRubyの強みです。


members = ["山田", "飯田", "上田", "岡田", "榎田"]
teams = ["A班", "B班"].cycle

# 班を順番に割り当てる
members.each do |member|
  puts "#{member}さんは#{teams.next}です"
end

山田さんはA班です
飯田さんはB班です
上田さんはA班です
岡田さんはB班です
榎田さんはA班です

6. 配列以外のEnumerable:Rangeの活用

6. 配列以外のEnumerable:Rangeの活用
6. 配列以外のEnumerable:Rangeの活用

Rubyでは配列だけでなく、数値の範囲を表すRange(レンジ)というオブジェクトも同じように操作できます。例えば1..10と書くと、1から10までの数字の集まりを意味します。これに対してもcycleなどのメソッドを適用することが可能です。

データの集まりという点では配列と同じですが、メモリ(コンピュータの記憶領域)を節約できるというメリットがあります。大量の数値を扱う際に、わざわざ大きな配列を作らなくて済むため、効率的なプログラミングが可能になります。

7. データを変換するmapとの違い

7. データを変換するmapとの違い
7. データを変換するmapとの違い

初心者の方が混同しやすいのが、データを順番に取り出すだけの処理と、データを加工して新しいリストを作る処理の違いです。cyclezipはデータの取り出し方に特徴がありますが、加工が目的の場合はmapというメソッドを併用します。

例えば、zipで合体させた二つのデータを、特定の文字列に加工して保存し直すといった流れです。このように、複数のメソッドを繋げて使う(メソッドチェーン)ことができるのが、Rubyの非常に楽しく便利な部分です。

8. 実践的な練習:スケジュール表の作成

8. 実践的な練習:スケジュール表の作成
8. 実践的な練習:スケジュール表の作成

最後に、より実用的な例として、日付と当番の組み合わせを作ってみましょう。毎日変わる掃除当番や、シフト表などの作成に活用できます。プログラミングは、こうした日常のちょっとした作業を自動化するためにあります。

下記のコードでは、曜日の配列を循環させ、日付の配列と組み合わせています。一見複雑に見えるかもしれませんが、ここまでに学んだcycleの概念を応用しているだけなので、ゆっくり読み解いてみてください。


days = [1, 2, 3, 4, 5]
staffs = ["佐藤", "鈴木"].cycle

days.each do |day|
  current_staff = staffs.next
  puts "#{day}日の担当は#{current_staff}さんです"
end

1日の担当は佐藤さんです
2日の担当は鈴木さんです
3日の担当は佐藤さんです
4日の担当は鈴木さんです
5日の担当は佐藤さんです

9. 学習を効率的に進めるコツ

9. 学習を効率的に進めるコツ
9. 学習を効率的に進めるコツ

プログラミングを学ぶ上で大切なのは、一度にすべてを暗記しようとしないことです。今回紹介したcyclezipも、「そんな便利な道具があったな」と頭の片隅に置いておくだけで十分です。実際にコードを書いてみて、エラーが出たら修正する、という繰り返しが上達への近道です。

また、Rubyには公式のリファレンスマニュアルという説明書があります。最初は難しく感じるかもしれませんが、慣れてくるとこれほど頼もしい味方はありません。今回学んだメソッドの名前を検索して、他にもどんな使い方ができるか調べてみるのも良いでしょう。

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyの文法超入門:式と文・endの役割をやさしく解説
New2
Rails
Nodeは本当に不要?Railsのimportmap最小構成とjsbundling構成の違いと選び方
New3
Rails
Rails開発で使うデータベースの選び方とSQLite・MySQL・PostgreSQLの初期設定
New4
Ruby
Ruby環境構築の最終チェック!セットアップ失敗あるあると確認リスト
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.4
Java&Spring記事人気No4
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう
No.5
Java&Spring記事人気No5
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.6
Java&Spring記事人気No6
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.7
Java&Spring記事人気No7
Ruby
Rubyのany? all? none? one? を完全攻略!条件判定を劇的に短く書く方法
No.8
Java&Spring記事人気No8
Rails
asdfで複数言語を一元管理:Ruby/Node/psql をまとめてセットアップ