【Ruby】レッスン3-05:エラーメッセージを読み解く力を身につけよう

一つ前のページでは真偽値を返すメソッドについて学習しました。
今回は エラーメッセージ について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
・Lesson3-1:メソッドの基本を理解しよう
・Lesson3-2:デフォルト引数とキーワード引数を理解しよう
・Lesson3-3:メソッドの戻り値を理解しよう
・Lesson3-4:真偽値を返すメソッドを理解しよう
・Lesson3-5:エラーメッセージを読めるようになろう ◁今回はココ
・Lesson3-6:例外処理を理解しよう
・確認問題3-☆1:石取りゲームを作ろう
・確認問題3-☆2:丁半賭博ゲームを作ろう
Lesson4:コレクション編
Lesson5:オブジェクト指向編
Rubyのエラーメッセージ入門|種類と読み解き方を理解しよう

Rubyを学習していく中で、プログラムがエラーで停止したり意図した通りに動かないことがよくあります。
このような状況で表示される「エラーメッセージ」はエラーの原因を知る手がかりとなり、問題解決を手助けしてくれる重要な情報です。
エラーメッセージを正しく理解し対処方法を学ぶことで、プログラムの修正がスムーズになります。
主なRubyエラーの種類と原因例
Rubyには様々なエラーメッセージが存在します。
以下は代表的なエラーメッセージとその意味です。
1. SyntaxError(構文エラー)
構文エラーはRubyの文法に従わない記述があると発生します。
たとえば括弧の閉じ忘れや不正なキーワードの使用がある場合です。
puts "Hello world" puts "This is Ruby # "閉じられていない引用符 # => SyntaxError: unexpected end-of-input, expecting `end'
2. NameError(名前エラー)
定義されていない変数やメソッドを呼び出そうとしたときに発生します。
Rubyでは大文字小文字が区別されるため、変数名のミスがよくこのエラーの原因になります。
puts username # 定義されていない変数 # => NameError: undefined local variable or method `username'
3. TypeError(型エラー)
異なるデータ型を不正に組み合わせようとしたときに発生します。
例えば数値と文字列をそのまま足し合わせるとこのエラーが発生します。
puts 10 + "5" # => TypeError: no implicit conversion of String into Integer
4. NoMethodError(メソッドエラー)
存在しないメソッドを呼び出そうとしたときに発生します。
例えば配列に存在しないメソッドを使おうとするとこのエラーが出ます。
array = [1, 2, 3] array.non_existent_method # => NoMethodError: undefined method `non_existent_method' for Array
5. ArgumentError(引数エラー)
メソッドに対して不正な数の引数を渡した場合に発生します。
たとえば2つの引数が必要なメソッドに1つだけ渡した場合などです。
def add(a, b) a + b end add(10) # => ArgumentError: wrong number of arguments (given 1, expected 2)
エラーメッセージを読む手順と修正のポイント
エラーメッセージを解釈するための基本的な手順とポイントを解説します。
- エラーの種類を確認する
まずエラーメッセージの先頭部分にはエラーの種類(例えば、SyntaxErrorやNameError)が表示されます。
エラーの種類を理解することでどのような間違いがあるかを大まかに把握できます。 - エラーメッセージの内容を読む
エラーメッセージには具体的にどの部分でエラーが発生しているかが示されています。
行番号が表示されるので、エラーメッセージをもとにコードの該当箇所を確認しましょう。 - エラーが発生している箇所を特定し、修正を試みる
エラーが発生している箇所にどのようなミスがあるかを調べ、修正します。
例えばSyntaxErrorであれば開き括弧と閉じ括弧が対応しているか、不要なスペースや記号がないかなどをチェックします。 - エラーが解決しない場合は検索する
エラーメッセージがわからない場合は、そのメッセージでインターネット検索するのも有効です。
特に初心者の方には他の人が同じエラーをどのように解決したかを調べることが役立ちます。
エラーメッセージの例
以下に典型的なエラーメッセージとその対処法を示します。
def divide(a, b) a / b end divide(10, 0) # => ZeroDivisionError: divided by 0
この場合「ZeroDivisionError」が表示されています。
このエラーはゼロで割り算を試みたときに発生するエラーです。このエラーを回避するには、事前に割る数がゼロでないか確認する必要があります。
エラーメッセージ理解がプログラミング上達の近道
エラーメッセージはプログラムに何らかの問題が発生したときに、その原因を示してくれる貴重な情報源です。
エラーメッセージを読み解く力をつけることで、プログラミングの効率が格段に向上します。
最初はエラーメッセージに戸惑うかもしれませんが、少しずつ内容を理解し、適切に対処できるようになれば、よりスムーズにプログラムを作成できるようになるでしょう。
練習問題|Rubyのエラーを読み取り修正してみよう

エラーメッセージをしっかりと身に着けるため、練習問題に挑戦しましょう。
エラーメッセージの練習問題にチャレンジ
以下のコードをコピーして実行しましょう。
そうすると複数のエラーが発生しますので、エラーメッセージを見て内容を特定し、修正して正しいコードを書きましょう。
puts "Hello, Ruby puts undefined_variable puts 10 + "5" array = [1, 2, 3] array.non_existent_method def add(a, b) a + b end add(10)
難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# SyntaxError puts "Hello, Ruby" # 修正:引用符を閉じました # NameError undefined_variable = "This is a defined variable" puts undefined_variable # 修正:変数を定義しました # TypeError puts 10 + "5".to_i # 修正:文字列を整数に変換しました # NoMethodError: array = [1, 2, 3] # 修正:存在するメソッドを呼び出します(例としてsumメソッド) puts array.sum # ArgumentError def add(a, b) a + b end add(10, 20) # 修正:引数を2つ渡しました
- 正解コードの解説
-
非常にシンプルな問題なので解説はありません。
難しいと感じる場合はこのページ上部の解説を見返してみましょう。
FAQ|Rubyのエラーメッセージ対応でよくある質問
- Q1. Rubyで「SyntaxError」が表示されたときは、まずどこを確認すべきですか?
-
SyntaxErrorは構文上の誤りを示すため、まずはエラーメッセージ内に記載されている行番号と内容を確認しましょう。特に括弧の閉じ忘れ、記号の誤用、キーワードのミスなどが原因のことが多いです。コード全体を落ち着いて見直すことで修正がスムーズになります。
- Q2. NameErrorが出た場合、変数やメソッドのどこに注意すればいいですか?
-
NameErrorは定義されていない変数・メソッドの使用時に発生します。スペルミスや大文字・小文字の違い、定義前に呼び出している場合が主な原因です。また、ローカル変数とインスタンス変数の混同にも注意が必要です。
- Q3. Rubyで「ZeroDivisionError」が起きるのを防ぐにはどうすればよいですか?
-
ゼロによる除算は事前チェックで防止できます。割り算を行う前に除数がゼロでないことを
if
文で確認し、エラーを未然に防ぎましょう。例:if b != 0 then a / b end
。ユーザー入力を扱う場合は特にこのチェックが重要です。