オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。

 

田島悠介

今回は、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] 未経験からWebエンジニアを目指す方法とは

筆者プロフィール

町田 耕

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

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

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

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

 

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。