Rubyのエラーメッセージundefined methodの解決方法【初心者向け】

初心者向けにRubyのエラーメッセージundefined methodの解決方法について解説しています。ここではundefined methodが出る原因と対処法、実際に起こりがちな状況について見ていきます。いくつかの例を見ながら解決法を覚えましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyのエラーメッセージundefined methodの解決方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

エラーメッセージundefined methodの解決方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

エラーメッセージundefined methodが現れる原因

プログラミングはエラーをどう読み取りそれをどうやって解決していくのかが、上達のポイントです。今回はそんな中で、よく目にする

undefined method

がでる原因を紹介したいと思います。

 

訳しても理解できると思いますが

“定義されていない”

ということが大前提であります。一番の原因はなんといっても

スペルミス“とレシバーが”nil“の場合です。

 

以下からその読み解き方と解決方法を紹介していきます。

 

エラーメッセージundefined methodの解決方法

スペルミスでよくある方法です。

p "Ruby".lenght

#=>  undefined method `lenght' for "Ruby":String (NoMethodError)

 

こちらを訳してみますと

“RubyのStringクラスにおいてはlenghtというメソッドは定義されておりません。”

つまりlenghtが間違っているということであります。

 

この場合はスペルミスを疑いましょう。よーく見ると、lenghtではなくlenghtですよね。こういうスペルミスは開発現場でもよくあることです^^;

 

次に

put "Ruby"

#=> undefined method `put' for main:Object (NoMethodError)

 

putなんていうメソッドはObjectのmainにないですよ!!

と出ています。難しく考えずにputというメソッドがないと言っているのも同じですから、putに問題があるとまず疑います。

 

これもスペルミスですね。putではなくputsです。

 

最後ですが、こちらがちょっとややこしいです。

a = ["orange", "apple"]
p a[0].length
p a[1].length
p a[2].length

#=> 6

#=>5

#=> undefined method `length' for nil:NilClass (NoMethodError)

 

と出るかと思います。

“orange”の文字数は6と”apple”の文字数は5と出ますが

a[2]はnilです。何も入っておりません。

 

レシーバーが何もないのに、この文字数を返すメソッドlengthを書いても、何もない(NilClass)にlengthメソッドは使えませんよ!!

となるわけであります。

 

この場合は

a = ["orange", "apple", "melon"]

 

と、a[2]に入る要素を追加すれば、nilではなくなるので

 

p a[2]

 

としてもエラーが出ずに表示されることとなります。このようにして、解決していくとエラーの読み取りも上達していくかと思います。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

筆者プロフィール

町田 耕

学生時代は会計学専攻。塾講師勤務を経て、企業のCFOとして会社経営に携わる。

会社経営から一線を退いた後、インフラエンジニアの妻の勧めでプログラミングを

独学で始め、プログラミングセミナーなど転々としながら、開発案件に携わるようになる。

現在、フリーランスとして活動しながらテックアカデミーのメンターも勤めている。

 

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。