だんだんとエラーが解けるようになってきた もそ。
まだ解けない問題はあるものの、目の付け所や解説がわかるようになってきました!やったね!
とはいえ喜ぶにはまだちょっと早いので、来週のテストに向けて粛々とエラー問題を解いていこうと思います。
今日はエラーの解き方のコツについて書いていきます。
そもそもな話、この記事を書いてからエラー解説をするべきだったなと思います。
でもそんなことも分からないぐらい、私自身エラーとどう向き合うべきか、まったくわかっていなかったんですよね。
カリキュラムを理解できている≠エラーが解ける
ではありません。
むしろ解けなくて当たり前です。
エンジニアですらバグの解消で一ヶ月とか悩んだりしています(※某ポチ氏のことです)
なので「エラーの見つけ方がサッパリ分からない」という方は、ぜひこの記事の内容を思い出してエラー解決にチャレンジしてください。
##エラー表示が分かりにくい件
まずはこちらのエラー画面を見てみましょう。
もうこの赤と白の画面が出てきただけで、「はぁ〜〜〜」と溜息をつきたくなる気持ち、めっちゃわかります。。
さて本題にまいりましょう。
このようなエラー画面が出てきたとき、皆さんはまずどの部分からチェックしますか?
英語が得意な方だったら、冷静に一行目から読んでいくかと思います。
でも大体の方は、
「うわ、英語出てきた...」
「とりあえずコードの記述指定してくれてるっぽいし、その部分から見てみるか」
...こんな感じでファイルをやみくもに探していませんか?
これは未だに私もやってしまうのですが、ちょっと待ってください!
エラーが起こっている記述の多くは、画面で指定されたコードの部分ではありません。
ではこの画面が何を示しているかというと、
「プログラム読み込んでいろいろ処理してたんやけど、ここの記述読み込んだ途端に何やおかしなったわー」
みたいな感じです。
(エセ関西人なので、アイデンティティを忘れないように今後も定期的に関西弁をつっこんでいきます)
身近な例で例えるならボタンの掛け違えをイメージしてもらうとわかりやすいかと思います。
##どう考える?
先ほどのボタンの掛け違いでたとえると、エラー画面はボタンの掛け違いを報告しているのと同じなのです。
プログラミングの場合は処理の流れがわかっていれば、どこでボタンの掛け違い(=エラー)を起こしたかを推理することができます。
しかもエラーの種類によっては、エラー画面の英文で答えを教えてくれていたりします。
ここで冒頭で紹介したエラー画面を見てみましょう。
まずは一文目の英文を翻訳してみましょう。
ActiveRecordは、MVCの中のモデルクラスに相当する記述のエラーを示しています。
※RailsGuide参照
「TweetsControllerのshowアクションの記述を読み込んだときに、"StatementInValid"が起きた」と言っているわけです。
"StatementInValid"が何のことを言っているのか分からない...と思ったところで、二行目を読んでみましょう。
「MySQL2のエラー::pictweetの開発環境下にある、commentsテーブルが存在しないよ」という意味です。
こうやって丁寧に英文を読んでいくだけでも、かなり原因がわかりますよね。
で、なんでこのエラーが起きているとわかったかというと、赤ボックスで示されたコードの部分を処理しようとしたから。
def show
@tweet = Tweet.find(params[:id])
@comments = @tweet.comments.includes(:user)
end
このコードにあるcommentsはテーブルを表しています。
つまりcommentsテーブルを読み込んで情報を情報を取り出そうとしたら、そもそもcommentsテーブルがなかったということです。
一見むずかしそうに感じますが、エラー画面が出ていれば解決の糸口を見つけることができます。
エラーの種類については、こちらの方の記事がとても素晴らしいので、併せて読んでみてくださいね。
--
最近はポチとルーティングやHTTPメソッドの話ができたりと、少しずつプログラミングを習得しつつあります。
目下の目標はポチと仕事ができるぐらいのレベルになることなので、めげずに頑張ろうと思います。
...続く。