💡 この記事でわかること
- 制御構文とは何か(プログラムの流れを変えるしくみ)
- 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文で「偽」として扱われるのは false と nil の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💡 unless に else を付けたり、複雑な条件と組み合わせたりすると、かえって読みにくくなります。「〜でなければ〜する」というシンプルな場面だけで使い、条件が複雑なときは素直に 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
end6. 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から始まる)
endfor文もあるが、あまり使わない
for i in 1..3
puts i
end
# 実行結果: 1 2 3👉 Rubyにも for はありますが、実際のコードではほとんど使われません。each や times のほうが読みやすく、Rubyらしい書き方だからです。他の言語の資料で for を見かけても、Rubyでは each に読み替えて問題ありません。
8. break と next
break:ループを途中で抜ける
(1..10).each do |i|
break if i == 5 # 5になったらループを終了
puts i
end
# 実行結果: 1 2 3 4next:残りをスキップして次の回へ
(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 と { } のブロック記法
each や times の do 〜 end の部分はブロックと呼ばれ、波かっこ { } で書くこともできます。動作は同じです。
# この2つは同じ意味
[1, 2, 3].each do |n|
puts n
end
[1, 2, 3].each { |n| puts n }👉 1行で書けるときは { }、複数行にわたるときは do 〜 end を使うのが一般的な使い分けです。まずは do 〜 end で書き方を覚えて、短い処理のときに { } を使うようにすれば大丈夫です。ここでの { } はブロックであり、条件分岐やループのブロックを囲むものではない点に注意してください(Rubyの if・while は end で閉じます)。
10. 制御構文 早見表
| 構文 | 使う場面 | ポイント |
|---|---|---|
| if / elsif / else | 条件によって処理を分ける | 丸かっこ不要、end で閉じる。追加条件は elsif |
| 後置if / unless | 1行だけの条件つき処理 | 処理 if 条件。unless は「〜でなければ」 |
| case / when | 1つの値を複数候補と見比べる | 当てはまった 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でできることが一気に広がります。