よもやま話β版

よもやま話を書きます。内容はぺらぺら。自由に書く。

エラーが出たらまずしっかり読もうの話

(初学者向けです。)

プログラミングをやっていると、エラーメッセージに必ず出会う。 最初はエラーメッセージが出たら、「とにかくよくわからない」と感じ、条件反射で脳みそが止まってしまう……ということもあるだろう。 そこをグッとこらえて、ぜひ次のことに取り組んでみてもらいたい。

1. 怖がらずにちゃんと読む

エラーメッセージを「ただのなんかよく分からない文字が流れていくもの」と解釈せず、何とか読もうとしてみてほしい。 なんならGoogle検索やDeepLにそのまま貼り付けてもいいと思う。
エラーメッセージは何のために出力されているのかというと、エラーを解決する手がかりとして出ているのだ。 なので、大抵の場合は、「次にどうすべきか」という親切な案内が出ていることが多い。
エラーが出ている該当のファイルや行番号が指し示されている場合もある。
大事なことなのでもう一度言うが、怖がらずによく読んでみてほしい。

2. 頻出単語をなんとなく把握しておく

エラーメッセージを読むのに慣れてくると、結構「当たりがち」な単語が多いことにも気づく。 例えば次のような単語は良く出てくるので、慣れると一体何がまずかったのか、なんとなく鼻が利くようになる。

  • undefined, not defined 未定義
    • 変数名をtypoしたりしていて、何かしらの呼び出しに失敗しているかもしれない。
  • arguments 引数
    • メソッド(関数)を使う時に渡す引数の内容だか数だかに誤りがあったかもしれない。
  • expected / unexpected 予期した / 予期しなかった
    • なにか機能の呼び出しを失敗したかもしれない。
  • variable 変数
    • 変数の使い方か型かに何か問題があったかもしれない。
  • exception 例外
    • (これは正直なんでもありな時に出てくる単語なので、あんまり見たくない...。)

3. 独自の単語を抜いて調べる

例えば、 Book というクラスを独自に作っていたとする。エラー文の中に "Book" という表記が出てきた場合は、それは自分が使っている(命名した)Bookのことを指す。
インターネットの向こうに "Book" という語句の入ったエラーを見た人はいないので、エラー文の中の "Book" は無視して調べるようにしたい。

Book.new
#=> uninitialized constant Book (NameError)
# 着目すべきは単語「Book」以外の "uninitialized constant" "NameError" のあたり。
# Bookを定義したはずだけどうまく読み込めていないかも?

Coffee.new
#=> uninitialized constant Coffee (NameError)
# 今度はCoffeeというものは無いよ と伝えている

番外. エラーメッセージの無いバグが一番恐ろしい

エラーメッセージは怖くない。何故なら問題をちゃんと伝えようとしてくれているからだ。一番恐ろしいのは、さも正しいような顔で振る舞っているが、予定外の問題を起こすバグだ。 人間、誰しも間違えるので、バグを埋め込んでしまうことはある。そんな中でも、出来るだけ問題に気付きやすくなるために、自動テストや、レビューといった文化があったりする。恐ろしい想定外を未然に防ぐためにも、自動テストやレビューはおろそかにせずに取り組んでいきたい。

まぁどんな時でもバグは出るときは出る。エラーやバグが出るのは悪いことじゃなくて、それらを解決しようとしない姿勢を取ってしまった時、それはevilだなと思う。
最善を尽くしていこう 💪