【Ruby】レッスン2-03:case文で条件分岐をシンプルに記述しよう

一つ前のページではif文による分岐処理について学習しました。
今回は case文による分岐処理 について見ていきましょう。
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:オブジェクト指向編
Rubyの文法|case文で分岐処理を効率化しよう

「case文」は条件に応じて異なる処理を実行するRubyの分岐処理です。
特定の値や条件に応じて複数の処理を選択する際に利用され、特にif文では記述が煩雑になる場合に有用です。
Rubyでは条件分岐を簡潔に書く方法としてcase文が提供されています。
case文とは?複雑なif文を簡潔に書き換える方法
case文は条件に応じて異なる処理を行うための制御構造で、if文と異なり特定の値に基づいて処理を分岐させることに優れています。
Rubyのcase文では判定したい変数や値を一度だけ指定し、その値に応じた複数の条件をwhen
キーワードで列挙します。
複数の条件がある場合、if文で書くとコードが長くなりがちですが、case文を使えば簡潔に記述できるため、可読性が向上します。
case文の基本構文と使い方をマスターしよう
case文の基本構文は次の通りです。
case 判定したい値 when 値1 # 値1の場合の処理 when 値2 # 値2の場合の処理 else # どの条件にも当てはまらない場合の処理 end
- case 判定したい値:
case
の後に分岐条件となる変数や値を指定します。 - when 値: それぞれの条件を
when
で指定し、その下にその条件が満たされたときの処理を記述します。 - else:
else
節はどの条件にも当てはまらない場合の処理です。この部分は省略可能ですが、予期しない場合の対応として書いておくと安心です。
Rubyではこのようにcase文を使うことで、特定の値に対する複数の条件を簡潔にまとめて書くことができます。
スコア別ランク表示プログラムで使い方を確認
それではcase文を使用した具体的な例を見てみましょう。
以下のプログラムでは、あるスコア(点数)に応じてランク(A, B, C)を表示します。
score = 85 case score when 90..100 puts "A" when 70..89 puts "B" else puts "C" end
- case score: 分岐条件の対象となる変数
score
を指定します。 - when 90..100:
90
から100
の範囲内にscore
がある場合、puts "A"
が実行されます。 - when 70..89:
70
から89
の範囲内であれば、puts "B"
が実行されます。 - else: 上記のいずれの条件にも該当しない場合、
puts "C"
が実行されます。
このプログラムではscore
が85
のため、条件when 70..89
に一致し、「B」が出力されます。
case文は範囲指定ができるため、このように数値の範囲によって異なる処理を行う場合にも適しています。
まとめ|case文の利点
case文はRubyにおける柔軟で簡潔な分岐処理方法です。
複数の条件を使った場合にコードが煩雑になりやすいif文に比べ、case文を使うことでコードが見やすく整理されます。
条件が複数ある分岐では積極的にcase文を活用し、可読性の高いコードを目指しましょう。
練習問題|case文で曜日を判定するプログラムを書こう

case文による条件分岐をしっかりと身に着けるため、練習問題に挑戦しましょう。
入力に応じた曜日を表示するプログラムを作成
ユーザーから入力された数値(1~7)を曜日に変換し、その曜日を表示するプログラムを作成しましょう。
例えば1が入力された場合は「月曜日」、2が入力された場合は「火曜日」のように表示します。
1~7以外の数値が入力された場合は「無効な入力です」と表示します。
以下の要件に従ってコードを作成してください。
- ユーザーに1から7の数値を入力させること。
case文
を使用して、数値に基づいて曜日を判定すること。- 1 → 「月曜日」
- 2 → 「火曜日」
- 3 → 「水曜日」
- 4 → 「木曜日」
- 5 → 「金曜日」
- 6 → 「土曜日」
- 7 → 「日曜日」
- 1から7以外の数値が入力された場合には、「無効な入力です」と表示すること。
- 判定結果を画面に表示すること。
ただし、以下のような実行結果となること。
1から7の数値を入力してください: 3 入力された数値に対応する曜日は:水曜日です
【ヒント】自力で解くのが難しい人へ
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:文字列「1から7の数値を入力してください:」を出力
2:変数day_numberにユーザーからの入力を整数に変換して代入
3:case文で変数day_numberに基づき分岐処理を開始
□ 1の場合、文字列「月曜日」を返す
□ 2の場合、文字列「火曜日」を返す
□ 3の場合、文字列「水曜日」を返す
□ 4の場合、文字列「木曜日」を返す
□ 5の場合、文字列「金曜日」を返す
□ 6の場合、文字列「土曜日」を返す
□ 7の場合、文字列「日曜日」を返す
□ それ以外の場合、文字列「無効な入力です」を返す
4:「入力された数値に対応する曜日は:#{day_name}です」と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# ユーザーに数値を入力させる puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i # gets.chomp.to_i はユーザーからの入力を受け取り、改行を除去し、整数に変換します。 # 数値に基づいて曜日を判定する =begin 【穴埋め問題1】 ここでcase文を使って、day_numberに応じた曜日名をday_nameに代入するコードを書いてください。 1は"月曜日"、2は"火曜日"のように対応させ、範囲外の場合は"無効な入力です"としてください。 =end # 繰り返し処理を追加する =begin 【穴埋め問題2】 ここでユーザーが正しい範囲の数値を入力するまで繰り返し処理を行うコードを書いてください。 =end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# ユーザーに数値を入力させる puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i # gets.chomp.to_i はユーザーからの入力を受け取り、改行を除去し、整数に変換します。 # 数値に基づいて曜日を判定する day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end # 判定結果を表示する puts "入力された数値に対応する曜日は:#{day_name}です"
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
ユーザーからの入力
puts "1から7の数値を入力してください:" day_number = gets.chomp.to_i
puts
は画面にメッセージを表示するメソッドです。「1から7の数値を入力してください」と表示します。gets
はユーザーの入力を受け取るメソッドです。このままでは文字列のままなので、chomp
で改行を取り除き、to_i
で整数に変換しています。case文
による分岐処理day_name = case day_number when 1 "月曜日" when 2 "火曜日" when 3 "水曜日" when 4 "木曜日" when 5 "金曜日" when 6 "土曜日" when 7 "日曜日" else "無効な入力です" end
case文
は指定した値に基づいて処理を分岐させるために使用します。ここではday_number
の値が1から7までの範囲に対応する曜日を返します。else
は指定された範囲外の値が入力されたときに実行されるコードです。
1から7以外の数値が入力された場合、「無効な入力です」と表示されます。例えば
day_number
が1であれば「月曜日」、2であれば「火曜日」を表示します。結果の表示
puts "入力された数値に対応する曜日は:#{day_name}です"
puts
を使って、計算結果を表示します。#{}
は、文字列の中に変数を埋め込むために使用され、ここではday_name
の内容が表示されます。
FAQ|case文の使い方と基本理解
- Q1. Rubyのcase文で複数の値を1つのwhenにまとめる方法はありますか?
-
はい、複数の値を1つのwhenで扱いたい場合は、カンマで区切って列挙することができます。
例:when 1, 2, 3
のように書くことで、1または2または3のいずれかに一致した場合の処理をまとめて記述できます。
- Q2. Rubyのcase文で範囲(Range)を指定する際の注意点は?
-
範囲を指定する場合は
90..100
のようなRangeオブジェクトを使用します。ただし、範囲の境界を含むかどうかには注意が必要です。..
は上限を含み、...
は含みません。意図に合った形式を使いましょう。
- Q3. Rubyのcase文で文字列の比較もできますか?
-
はい、case文では数値だけでなく文字列の比較も可能です。たとえば
case name
としてwhen "Alice"
やwhen "Bob"
のように書くことで、文字列ベースの分岐処理が簡単に行えます。文字列の完全一致で評価される点に注意してください。