【Ruby】レッスン2-06:until文による繰り返し処理を理解しよう

一つ前のページではwhile文による繰り返し処理について学習しました。
今回は until文による繰り返し処理 について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
・Lesson2-1:比較演算子と論理演算子を理解しよう
・Lesson2-2:if文による分岐処理を理解しよう
・Lesson2-3:case文による分岐処理を理解しよう
・Lesson2-4:for文による繰り返し処理を理解しよう
・Lesson2-5:while文による繰り返し処理を理解しよう
・Lesson2-6:until文による繰り返し処理を理解しよう ◁今回はココ
・Lesson2-7:繰り返しを制御しよう
・確認問題2-☆1:ハイアンドロー ゲームを作ろう
・確認問題2-☆2:数当てゲームを作ろう
・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:メソッド編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
until文の基本と使い方|Rubyでの繰り返し処理入門

Rubyには条件が満たされるまで繰り返し処理を行う「until文」が用意されています。
条件が「false」の間に処理を実行するため、通常の「while文」とは逆の動きをします。
この節ではuntil文の基本的な使い方と具体例について学びます。
until文の動作原理とは?
until文は指定した条件が「true」になるまで処理を繰り返す制御構造です。
繰り返し処理を逆の条件で制御したいときに役立ちます。
条件が「false」の間はループを続け、条件が「true」になった時点でループが終了します。
until文の基本構文と記述例
until文の構文は以下の通りです。
until 条件式 # 実行する処理 end
ここで「条件式」が「false」の間は、# 実行する処理
が繰り返し実行されます。
条件式が「true」になるとuntil文の処理は終了し、次のコードに進みます。
until文でカウントアップを実装しよう
以下にuntil文の具体的な使用例を示します。
この例では1から10までの数を出力し、10に到達した時点でループが終了するまでの動作を示しています。
i = 1 until i > 10 puts i i += 1 # iを1ずつ増加させる end
このコードでは変数i
が10より大きくなるまでputs i
でi
の値を出力し、i
に1を加え続けます。
i
が11になるとi > 10
の条件が「true」になり、until文が終了します。
使い方の注意点とまとめ
until文は条件が「false」の間に処理を行うため、通常のwhile文とは逆の動作をする点に注意が必要です。
条件によってループが終了しない可能性もあるため、ループが正しく終了するように条件式と処理内容を工夫しましょう。
until文を使いこなすことで繰り返し処理に柔軟性が増し、コードを簡潔に表現できるようになります。
練習問題|until文でユーザー指定のカウントを表示しよう

until文による繰り返し処理をしっかりと身に着けるため、練習問題に挑戦しましょう。
until文で繰り返し処理を実装する練習問題
ユーザーが指定した数までカウントアップを行うプログラムを作成してください。
指定された数値まで1ずつ増加させていき、最後に「カウントが終了しました!」というメッセージを表示します。
カウントにはuntil文を使用してください。
以下の要件に従ってコードを完成させてください。
print
文を使用して、「カウントを終了する数を入力してください: 」というメッセージを表示すること。- ユーザーが入力した値を整数として受け取り、変数
end_num
に代入すること。 - 変数
i
を1に初期化すること。 - until文を使用して、
i
がend_num
を超えるまで以下の処理を繰り返すこと。puts
文でi
の値を出力する。i
に1を加える。
- 繰り返し処理が終了した後、「カウントが終了しました!」というメッセージを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
カウントを終了する数を入力してください: 5 1 2 3 4 5 カウントが終了しました!
【ヒント】自力で解くのが難しい人へ
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:ユーザーにカウントを終了する数を入力してもらうためのメッセージを表示
2:ユーザーが入力した値を整数に変換し、変数end_numに代入
3:変数iを1に初期化
4:until文によるループの開始
□ 変数iの値を出力
□ 変数iに1を加算
5:カウントが終了したことを示すメッセージを出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 終了する数をユーザーに入力してもらう print "カウントを終了する数を入力してください: " end_num = gets.to_i # 入力された値を整数に変換して変数end_numに代入 # 変数iを1に初期化 i = 1 # until文を使用して、変数iがユーザー指定のend_numを超えるまで繰り返し処理を行う =begin 【穴埋め問題1】 ここでuntil文を使用して、変数iがユーザー指定のend_numを超えるまで繰り返し処理を行い、変数iを出力し、iに1を加えるコードを書いてください。 =end # カウントが終了したことを示すメッセージを出力 puts "カウントが終了しました!"
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# 終了する数をユーザーに入力してもらう print "カウントを終了する数を入力してください: " end_num = gets.to_i # 入力された値を整数に変換して変数end_numに代入 # 変数iを1に初期化 i = 1 # until文を使用して、変数iがユーザー指定のend_numを超えるまで繰り返し処理を行う until i > end_num puts i # iの値を出力(1からend_numまでの数字が順に表示される) i += 1 # iの値を1ずつ増加させる end # カウントが終了したことを示すメッセージを出力 puts "カウントが終了しました!"
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
ユーザー入力と変数の初期化
print "カウントを終了する数を入力してください: " end_num = gets.to_i # 入力された値を整数に変換して変数end_numに代入
print "..."
:ユーザーに「カウントを終了する数を入力してください: 」というメッセージを表示します。gets.to_i
:ユーザーの入力を取得し、整数に変換して変数end_num
に代入します。これにより、プログラムはユーザーが何回カウントアップしたいかを確認します。i = 1
変数
i
を1に初期化します。この変数
i
はカウントを表すために使用します。繰り返し処理(until文)
until i > end_num puts i # iの値を出力(1からend_numまでの数字が順に表示される) i += 1 # iの値を1ずつ増加させる end
until i > end_num
:until文は、「条件がtrue
になるまで」繰り返し処理を実行します。ここでは「i
がend_num
を超えるまで」という条件で繰り返しが続きます。puts i
:カウントの現在の値であるi
を出力します。この行により、ユーザーが指定した数に到達するまで1ずつ増加するi
の値が表示されます。i += 1
:i
の値を1増やす操作です。これにより、次のループでi
が更新され、最終的にend_num
の条件に到達するまで繰り返されます。終了メッセージ
puts "カウントが終了しました!"
最後に「カウントが終了しました!」というメッセージを出力し、プログラムの終了を知らせます。
このメッセージはuntil文のループを抜けた後に実行されます。
まとめ
このコードを通じてuntil文の「条件がtrue
になるまで繰り返す」という特徴を学びました。
Rubyの繰り返し処理の使い方を理解することで、様々な条件に応じた柔軟な処理が可能になります。
ぜひ他の繰り返し処理とも比較して、プログラムの構造を理解していきましょう。
FAQ|Rubyのuntil文の使い方
- Q1. Rubyのuntil文とif文を組み合わせることはできますか?
-
はい、可能です。until文の内部で条件分岐を行いたい場合、if文を組み合わせて使用できます。たとえば、カウント中に特定の値に達したときだけ別処理を挟む、といった制御が可能です。
- Q2. until文のループが終了しないときの対処方法は?
-
until文が無限ループに陥る場合は、ループ条件が永遠に「false」のままになっている可能性があります。変数の更新処理が正しく行われているか、条件式が正確かどうかを確認しましょう。
- Q3. Rubyでuntil文を使うときに注意すべきコーディングスタイルはありますか?
-
読みやすさを重視するため、処理が短い場合でも一行で書くのは避け、ブロック形式(
until 条件式 ... end
)で記述するのがおすすめです。また、ループ内の処理が明確に終了に向かって進むよう設計することが重要です。