Rubyのif文・for文・while文とは?条件分岐と繰り返しを解説

PR Ruby

Rubyのif文・for文・while文とは?条件分岐と繰り返しを解説

💡 この記事でわかること

  • 制御構文とは何か(プログラムの流れを変えるしくみ)
  • if / elsif / else による条件分岐と、後置if・unless・caseの書き方
  • while文・until文で処理を繰り返す方法と、無限ループの注意点
  • Rubyでは for文より each を使うのが基本だということ
  • 範囲オブジェクト・times・break・next の使い方

1. 制御構文とは?

制御構文とは、
👉 プログラムの実行の流れをコントロールするための書き方です。

プログラムは基本的に上から下へ順番に実行されますが、実際には「条件によって処理を変えたい」「同じ処理を何度も繰り返したい」という場面がよくあります。それを実現するのが次の2つです。

  • 条件分岐(if文・case文):条件に当てはまるかどうかで処理を切り替える
  • 繰り返し(while文・each・for文など):同じ処理を何度も実行する

💡 Rubyでは、これらのまとまり(ブロック)の終わりを end で表します。PHPやJavaScriptのような波かっこ { } は使わず、条件を囲む丸かっこ ( ) も基本的に付けません。基本文法をまだ確認していない場合は、先に読んでおくとスムーズです。

👉 Rubyの基本文法(puts・変数・式展開)についての記事はこちら


2. if文(条件分岐)

基本の形

age = 20

if age >= 18
  puts "成人です"   # 条件が true のときだけ実行される
end

👉 if 条件 と書き、実行したい処理を次の行から書いて、最後に end で閉じます。丸かっこや波かっこは不要です。end の閉じ忘れはRubyで一番よくあるエラーなので、if を書いたらすぐ end も書いてしまうのがおすすめです。

if / elsif / else

score = 75

if score >= 80
  puts "合格"
elsif score >= 60
  puts "再テスト"
else
  puts "不合格"
end

# 実行結果: 再テスト

👉 条件は上から順に判定され、最初に当てはまった1つのブロックだけが実行されます。追加の条件は elsif、「そのほか」の処理は else に書きます(どちらも省略できます)。

💡 「そうでなければ、もし〜」は elsif ですelseif(PHP)でも else if(JavaScript)でもなく、e の付かない elsif という1語なので、他の言語の経験がある方は書き間違いに注意してください。

条件式の書き方(比較・論理演算子)

age = 25
member = true

if age >= 20 && member
  puts "割引対象です"
end
  • ==(等しい) / !=(等しくない)
  • > >= < <=(大小の比較)
  • &&(かつ) / ||(または) / !(否定)

👉 「等しい」の比較は == です。= 1つは代入なので、if x = 5 と書くと条件判定にならず、思わぬ動きになります

💡 if文で「偽」として扱われるのは falsenil の2つだけです0 や空文字 "" は「真」として扱われるため、他の言語の感覚で if count のように書くと意図しない動きになることがあります。

👉 Rubyのデータ型(真偽値・nil・型変換)についての記事はこちら


3. 後置if と unless

👉 処理が1行だけのときは、if を後ろに書くことができます。「〜する、もし〜なら」という英語に近い読み方になり、Rubyらしい書き方としてよく使われます。

score = 90

puts "合格です" if score >= 60   # end は不要

また、「条件が false のとき」に処理したい場合は、if の代わりに unless が使えます。if !(条件) と同じ意味です。

logged_in = false

unless logged_in
  puts "ログインしてください"
end

# 後置でも書ける
puts "ログインしてください" unless logged_in

💡 unlesselse を付けたり、複雑な条件と組み合わせたりすると、かえって読みにくくなります。「〜でなければ〜する」というシンプルな場面だけで使い、条件が複雑なときは素直に if を使いましょう。


4. case文(複数の値で分岐)

👉 1つの値をいくつかの候補と見比べて処理を分けるときは、case 文を使うとすっきり書けます。他の言語の switch にあたるものです。

signal = "黄"

case signal
when "青"
  puts "進む"
when "黄"
  puts "注意"
when "赤"
  puts "止まる"
else
  puts "不明な信号です"
end

# 実行結果: 注意

👉 Rubyの case は、当てはまった when のブロックだけを実行し、自動的に終了します。JavaScriptなどで必要な break は不要です。when "青", "緑" のようにカンマで区切れば、複数の値をまとめて1つの when で受けられます。


5. while文・until文(条件が続く限りの繰り返し)

while文は、「条件が true である間、ずっと繰り返す」ときに使います。繰り返す回数が事前に決まっていない場合に向いています。

count = 1

while count <= 3
  puts count
  count += 1   # ← これを忘れると無限ループになる
end

# 実行結果: 1 2 3

👉 while文では、ループの中で「条件がいつか false になる処理」を必ず入れます。上の例では count += 1(count = count + 1 と同じ)で数を増やしているため、4になった時点で条件が false になり、ループが終わります。

💡 条件がずっと true のままだと、処理が終わらない「無限ループ」になります。ターミナルで実行が止まらなくなったときは、Ctrl + C で強制終了できます。

「条件が false である間くり返す」場合は、while の代わりに until が使えます。unless と同じ考え方です。

count = 1

until count > 3   # count が 3 より大きくなるまで繰り返す
  puts count
  count += 1
end

6. each(Rubyでは繰り返しの主役)

👉 配列などの要素を1つずつ処理するときは、each を使うのがRubyの基本です。他の言語の for文にあたる役割を、Rubyでは each が担っています。

fruits = ["りんご", "みかん", "ぶどう"]

fruits.each do |fruit|
  puts fruit
end

# 実行結果: りんご みかん ぶどう

👉 配列.each do |変数| と書くと、要素が1つずつ 変数(ここでは fruit)に入って、do から end までの処理が繰り返されます| | で囲む部分は、1回ごとに受け取る値の名前です。

💡 配列そのものの作り方や操作は、別の記事で詳しく解説する予定です。ここでは「配列を回すなら each」と覚えておけば十分です。


7. 決まった回数の繰り返し(範囲・times)

範囲オブジェクト(1..5)

1..5 のように .. でつないだものを範囲オブジェクトと呼びます。「連続した数のまとまり」を表し、each と組み合わせて「決まった回数」の繰り返しに使えます。

(1..5).each do |i|
  puts i
end

# 実行結果: 1 2 3 4 5

👉 1..5 は「5を含む」、1...5(ドット3つ)は「5を含まない(1〜4)」です。ドットの数で終わりの扱いが変わる点に注意してください。

n.times(0からn-1回)

「ただ○回繰り返したい」だけなら、数値に .times を付けるのが一番簡単です。

3.times do
  puts "こんにちは"
end
# こんにちは が3回

3.times do |i|
  puts i   # 0 1 2(0から始まる)
end

for文もあるが、あまり使わない

for i in 1..3
  puts i
end

# 実行結果: 1 2 3

👉 Rubyにも for はありますが、実際のコードではほとんど使われませんeachtimes のほうが読みやすく、Rubyらしい書き方だからです。他の言語の資料で for を見かけても、Rubyでは each に読み替えて問題ありません。


8. break と next

break:ループを途中で抜ける

(1..10).each do |i|
  break if i == 5   # 5になったらループを終了
  puts i
end

# 実行結果: 1 2 3 4

next:残りをスキップして次の回へ

(1..5).each do |i|
  next if i.even?   # 偶数のときは puts をスキップ
  puts i
end

# 実行結果: 1 3 5

👉 break はループそのものを終了、next はその回だけスキップして繰り返しは続行、という違いです。他の言語で「その回だけスキップ」に使う continue は、Rubyでは next という名前です。while文の中でも同じように使えます。


9. do...end と { } のブロック記法

eachtimesdo 〜 end の部分はブロックと呼ばれ、波かっこ { } で書くこともできます。動作は同じです。

# この2つは同じ意味
[1, 2, 3].each do |n|
  puts n
end

[1, 2, 3].each { |n| puts n }

👉 1行で書けるときは { }、複数行にわたるときは do 〜 end を使うのが一般的な使い分けです。まずは do 〜 end で書き方を覚えて、短い処理のときに { } を使うようにすれば大丈夫です。ここでの { } はブロックであり、条件分岐やループのブロックを囲むものではない点に注意してください(Rubyの ifwhileend で閉じます)。


10. 制御構文 早見表

構文使う場面ポイント
if / elsif / else条件によって処理を分ける丸かっこ不要、end で閉じる。追加条件は elsif
後置if / unless1行だけの条件つき処理処理 if 条件unless は「〜でなければ」
case / when1つの値を複数候補と見比べる当てはまった when だけ実行。break 不要
while / until条件が続く限りの繰り返し更新処理を忘れると無限ループ
each配列などの全要素を繰り返すRubyの繰り返しの基本。配列.each do |x|
範囲.each / n.times決まった回数の繰り返し1..5 は5を含む / 1...5 は含まない
break / nextループの流れを制御break は終了、next はその回だけスキップ

11. まとめ

  • if / elsif / else:丸かっこ不要、end で閉じる。追加条件は elsif(1語)
  • 後置if・unless:1行の処理は puts "OK" if 条件 のように短く書ける
  • case / when:1つの値を複数の候補と比べるときに便利。break は不要
  • while / until:条件が続く限りの繰り返し。無限ループに注意
  • each:Rubyの繰り返しの主役。for はほぼ使わない
  • break / nextでループの流れを制御(continue ではなく next)

👉 まずは「if文で条件分岐」「each で配列の繰り返し」の2つを、実際にコードを書いて動かしてみましょう。この2つが使えるようになると、Rubyでできることが一気に広がります。

-Ruby
-, , , ,