【Ruby】レッスン3-05:エラーメッセージを読めるようになろう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:エラーメッセージ

この記事の練習問題を解くために必要な知識:
基礎文法と制御構造(レッスン1~2)、メソッドの定義と呼出しデフォルト引数とキーワード引数メソッドの戻り値真偽値を返すメソッドエラーメッセージ例外処理

<<前のページ Ruby記事一覧 次のページ>>

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)

エラーメッセージの読み方と対処法

エラーメッセージを解釈するための基本的な手順とポイントを解説します。

  1. エラーの種類を確認する
    まずエラーメッセージの先頭部分にはエラーの種類(例えば、SyntaxErrorやNameError)が表示されます。
    エラーの種類を理解することでどのような間違いがあるかを大まかに把握できます。
  2. エラーメッセージの内容を読む
    エラーメッセージには具体的にどの部分でエラーが発生しているかが示されています。
    行番号が表示されるので、エラーメッセージをもとにコードの該当箇所を確認しましょう。
  3. エラーが発生している箇所を特定し、修正を試みる
    エラーが発生している箇所にどのようなミスがあるかを調べ、修正します。
    例えばSyntaxErrorであれば開き括弧と閉じ括弧が対応しているか、不要なスペースや記号がないかなどをチェックします。
  4. エラーが解決しない場合は検索する
    エラーメッセージがわからない場合は、そのメッセージでインターネット検索するのも有効です。
    特に初心者の方には他の人が同じエラーをどのように解決したかを調べることが役立ちます。

エラーメッセージの例

以下に典型的なエラーメッセージとその対処法を示します。

def divide(a, b)
  a / b
end

divide(10, 0)
# => ZeroDivisionError: divided by 0

この場合「ZeroDivisionError」が表示されています。

このエラーはゼロで割り算を試みたときに発生するエラーです。このエラーを回避するには、事前に割る数がゼロでないか確認する必要があります。

まとめ

エラーメッセージはプログラムに何らかの問題が発生したときに、その原因を示してくれる貴重な情報源です。

エラーメッセージを読み解く力をつけることで、プログラミングの効率が格段に向上します。

最初はエラーメッセージに戸惑うかもしれませんが、少しずつ内容を理解し、適切に対処できるようになれば、よりスムーズにプログラムを作成できるようになるでしょう。

エラーメッセージの練習問題:エラーを修正しよう

以下のコードをコピーして実行しましょう。

そうすると複数のエラーが発生しますので、エラーメッセージを見て内容を特定し、修正して正しいコードを書きましょう。

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つ渡しました

正解コードの解説

非常にシンプルな問題なので解説はありません。

難しいと感じる場合はこのページ上部の解説を見返してみましょう。

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Rubyのテキスト&問題集トップへ戻る
    トップページへ戻る