エラーメッセージと友達になる
目次
エラーメッセージは敵ではない
Hello, Worldに潜むコンパイルエラー
エラーメッセージの読み方
エラーが起きたときのググり方
warningもエラーと思う
エラーメッセージは敵ではないkls
プログラミング初心者がつまずくであろう、端末上に表示される「謎のエラー」。多くの場合謎ではない(ときどき本当に謎のエラーが出る。寝て起きると直ってる。)が、初心の目にはそう写ってしまう。でも心配してほしくない。どこかの誰かが言っていたけれど、コンパイルエラーを含むエラーは実行する前にバグを教えてくれるありがたい存在なのだ。つまり、プログラム側からバグを解消する「ヒント」が与えられている。(余談の余談だが、本当に怖いのはエラーが出ない不具合だ。)
エラーが出たときはとりあえず、一呼吸おく。その後にメッセージを読んでみる。大概英語で書かれているのでなんとか読めると思う(苦手な人はGoogle翻訳を使っても問題ない)。案外解決方法がストレートに書かれている。
また、大量のエラーが出力されることがある。くじけてはいけない。とりあえず1つ目のエラーを解決してみよう。一気にメッセージが減るケースがある(C言語は特にそう)。
Hello, Worldに潜むコンパイルエラー
第1回で書いたHello, World!。世界に挨拶するだけでもコンパイルエラーを出してしまうとなかなかたどり着くのが難しい。そこで筆者が考えつく限りのコンパイルエラーを発生させたHello, World!プログラムを以下に示す。コピペしてみてエラーを出しながらHello, World!にたどり着いてみてほしい。(もしかしたら上回生もハマるかもしれない。)
code:bug_world.c
int mian() {
printf("Hello, World!\n")
return 0;
エラーメッセージの読み方
エラーメッセージは言語によって千差万別だが、基本的には同じである。ここでは基本的な部分を記述する。
エラーメッセージは以下の内容が含まれることが大半である。
プログラムの行数(親切だったら何文字目かどうかも書かれている)
エラーの理由
該当するプログラム
C言語を例にあげてみよう。
https://gyazo.com/f7c0f67b29c05a53bb5104af5d411a17
先程のbug_worldのエラーの1つだ。C言語のエラーは 「ファイル名:行数:何文字目か:エラーの種類:理由」と表示され、2行目に概要箇所が表示されている。とりあえず5行目を見てみよう。特にエラーはなさそうだ。errorメッセージ(ヒント)は } がないと怒っている。5行目の周辺に閉じカッコが足りてないか探してみる。するとmain関数に対応する閉じカッコがないことがわかるだろう。noteメッセージに「 int main() { にマッチするもの」と書かれているので、それもヒントにするとより簡単に解決できる。
エラーメッセージにはブロックがある。これは一連のエラーメッセージなのか、別のエラーメッセージを区別する。
一覧のエラーメッセージは段下げによって表現される。下の行から上の行に向かって、よりエラーが発生したピンポイントの場所を教えてくれる。つまり、一番上の行がまさにエラーが発生した場所である。以下はJava言語での例である。Main.javaファイルの18行目でエラーが発生していることがわかる。
https://gyazo.com/c35f10d7a47f0f118c77c0599f00c1e3
エラーが起きたときのググり方
未知のエラーと遭遇したとき、一番頼りになるのがグーグル先生だ。とりあえずエラー文で検索してみよう。ここで全部をコピペすると期待した結果は得られにくい。理由だけをコピペして検索するようにしよう。上記のC言語のエラーの例では、「c言語 expected '{'」と調べると比較的引っかかりやすい(このエラーは簡単すぎてうまく引っかからなかった)。またメッセージに変数名を含めたものがあるとき、変数名は削除して検索しよう(変数名は人によって違うのだ。ファイル名も然り。)。
とはいえこれは経験がモノを言うので、とりあえずググりまくろう!あのデキるエンジニアもググりながらプログラミングしているぞ!
warningもエラーと思う
errorは物理的にプログラムが動かないので直すのだが、warningは放置しても動いてしまうので直さない人がたまにいる。これはもったいない。バグを未然になくす機会を逸している。warningは基本的に「バグになり得るから直したほうがいいよ」という忠告だ。メッセージの内容を理解して許容しているのであれば良いのだが、プログラミングを学習する段階ではwarningもエラーだと思っておくと良いだろう。