当ブログではPRや広告を掲載しています

【初心者向け】Rubyの undefined method エラーの読み方

プログラミング
この記事はこんな人向け
  • Ruby on Rails を学び始めた
  • プログラミング初心者
  • “Rails エラー” でググっても意味がわからない
スポンサーリンク

こんなエラーよく出ませんか?

こういうエラーが出て、「そうか、”length” ってメソッドが無いのか。他の方法をググってみよう」と初心者の頃は考えがちですよね。

そして調べてみても、”length” というメソッド自体は存在しており、不正な記述でもないので、意味不明になってしまうんですね。

“undefined method” は “for” の次がミソ

プログラミングを学習していると、「エラー文をよく読みましょう」というアドバイスを受けますよね。
自分では読んでいるつもりでも、そもそも英語よくわかんないし。。意味不明な単語とか出てくるし。。って感じだと思います。(僕もそうでした。。)

上の画像のエラーは “undefined method” で、このエラーの読み方は “for” の後に記載されている “nil:NilClass” が重要なんです。

やりがちなエラーの解釈

初心者のうちは、”length” がそもそも存在しないと誤解してしまって、Railsとの齟齬が生じてしまっているケースが多いです。
以下のような感じですね。

  • 誤:「”length” が使えない。変数の型とかが悪い? “NilClass” はよくわからないので無視。」
  • 正:「”nil” の変数に対して “length” メソッドを使おうとしている。変数が “nil” となってる原因を調査する必要がある。」

“nil:NilClass” とは

この場合、”length” が “NilClass” に対してダメだよ、と言われているので、“length” を使おうとしている変数の “str” が “NilClass” ということになります。

つまり、”str” の変数が NULL になってしまっているんです!

このケースは変数でしたが、渡されていない “params” に対して色々なメソッドを使おうとしても同じエラーが起きるケースはやりがちなので、気をつけましょう。

エラーの解消

ではここから、”undefined method” を解決していく手順を解説していきます。

①変数がNULLとなる原因を探す

上の画像では、5行目でエラーとなり、“str” の変数がNULLになっていることが原因とわかりました。
ではこの “str” はなぜNULLになってしまうのか、を考えます。

すると4行目に、

str = nil

の記述がありますね。
ここで変数を強制的にNULLにしていたので、空っぽの変数に対して “length”(文字列の長さを取得) が使えずにエラーとなってたんですね。

②変数がNULLにならないように対処する

原因がわかったので、次にコードを編集してエラーを解消していきます。

今回のケースでは変数を強制的にNULLにする行を入れていたので、単純にこれを消します。
そして、”length” が正常に動作するかの確認として、コンソール(ターミナル)画面に “length” の結果を出力するコードを入れ込みます。

p srt.length

編集後のコードはこんな感じです。

これで top のルートにアクセスして、プログラムを動かしてみましょう。

動かすと、コンソールで以下のようになり、赤ラインで示してあるように “length” が正常に動作して、”あいうえお” の文字列の長さを表示できています。

まとめ

エラー文も初見ではよくわからず理解するのが困難かもしれませんが、いちど性質を理解してしまえば、エラーが出るたびにググる必要がなくなります

今回のは “undefined method xxx for nil:NilClass” でしたので、理解するのも難しくなかったかもしれません。

初心者のうちは、色々なエラーを経験して傾向を掴んでいく道を通らなくてはいけません。
解決するためだけにググるよりも、エラー文を理解して対処できる力を身につければ、苦しい道も短くなります

最初は心が折れそうになりますが、ぜひ頑張って進んで次の景色を見れると面白いですよ!

コメント