この記事では、未経験からエンジニアを目指して日々勉強されている方向けに、プログラミング学習でエラーに遭遇した時の対処方法を紹介します。
私も日々のエンジニアとしての仕事でエラーに遭遇しながら仕事をしています。
本記事では私のエンジニアとしての思考プロセスも合わせて紹介しますので、皆さんのプログラミング学習の参考になれば嬉しいです。
エラー解決のプロセス
プログラミングでエラーに遭遇した時の解決のプロセスは以下のようなプロセスになります。
- エラーの原因を特定する
- エラーの解決方法を探す
- 検索した解決方法を試し、エラーが解決するか別のエラーメッセージに変わるかを検証する
の3つが主なプロセスになります。
それぞれ順番に解説していきます。
エラーの原因を特定する
エラーを解決するためには、エラーの原因を特定しないと始まりません。
そのために一番大事なことはエラーメッセージを良く読むことです。
基本的にエラーメッセージには以下の情報が書かれています。
- プログラムのどの場所(行)でエラーが起きたか
- エラーメッセージ(エラーの直接の原因)
ここでエラーメッセージの例を見てみましょう。
例えば以下のプログラム(Python)を実行するとエラーになります。
def div(a, b):
result = a / b
return result
def main():
x = div(5, 2)
print(x)
y = div(3, 0) # 0除算によるエラーが発生する
print(y)
if __name__ == '__main__':
main()
エラーメッセージとしては以下のメッセージがコンソールに出力されます。
Traceback (most recent call last):
File "error_sample.py", line 14, in <module>
main()
File "error_sample.py", line 9, in main
y = div(3, 0) # 0除算によるエラーが発生する
File "error_sample.py", line 2, in div
result = a / b
ZeroDivisionError: division by zero
まずプログラムのどの場所(行)でエラーが起きたかですが、上のエラーメッセージから、
error_sample.py
の2行目のdiv関数の中がエラーが起きた場所になります。
そしてその上のエラーメッセージから9行目のmain関数からdiv関数を呼び出していることもわかります。
また、エラーの原因はZeroDivisionError: division by zero
というメッセージから0で割り算をしていることが原因と分かります。
このようにエラーメッセージに何が書いてあるかを把握してメッセージを読めば、エラーの場所と原因がエラーメッセージから読み取れます。
エラーの種類
エラーには大きく2種類あります。
SyntaxError(シンタックスエラー、文法エラー)とRuntimeError(ランタイムエラー、実行時エラー)の2種類です。
前者のシンタックスエラーはプログラミングの文法(書き方)が間違っている時のエラーです。
後者のランタイムエラーはプログラムの文法上は正しいが処理の内容や実行時の状況(データ)に不正がある場合に発生します。
エラーが発生した場合、まずはシンタックスエラー(文法の間違い)なのかランタイムエラー(処理の間違い)なのかを特定するようにしましょう!
エラーの解決方法を探す
エラーの原因がわかったら今度は解決方法を探します。
基本的にはgoogle検索で検索する(ググる)のが主な探し方になります。
シンタックスエラーの場合の解決方法の探し方
シンタックスエラーの場合のミスは
- 文法ミス
- : や ) などの記号のつけ忘れ
といったケアレスミスがほとんどです。
エラーメッセージからエラーの場所を特定し、ケアレスミスが無いかを確認しましょう。
ケアレスミスが無いかを確認しても分からない場合は、文法を確認しながらエラーが起きた場所を書き直すというのも有効です。
ランタイムエラーの場合の解決方法の探し方
ランタイムエラーの場合もまずはケアレスミスが無いかの確認が第一にやることです。
- 定義していない変数を参照しようとしている(変数名のタイポ(打ち間違い))
- ファイル名やURLなどを間違えている
といったことが良くミスとして発生しやすいです。
次にケアレスミスが無い場合は、エラーメッセージでググります。
例えば、先程のエラーの例であれば、「python ZeroDivisionError: division by zero
」といったキーワードで検索します。
stack overflow や Qiita、個人ブログなどの記事が見つかるかと思うので、
まずはその記事に書いてある内容を良く読んで、使えそうであれば解決方法を試してみます。
解決しない場合は以下のいずれかのパターンだと思うので、パターンに応じて変えましょう。
エラーが解消されず、エラーメッセージにも変化なし
1つ目はエラーが解消されずにエラーメッセージにも変化がない場合です。
この場合は、上記の記事だけでなく複数の記事を参照して別の解決方法が無いかを探します。
検索で記事が見つからない場合は公式¥ドキュメントを参照するか、メンターや先輩社員など質問できる人がいれば質問しましょう。
エラーは解消されないが、エラーメッセージが変わった場合
2つ目はエラーは解消されないが、エラーメッセージに変化があった場合です。
その場合は、変わったエラーメッセージで再度ググります。
ググって使えそうな記事があればその解決方法を試します。
エラー解決は基本は上記の繰り返しになります。
スムーズにエラーを解決するためにできること
エラーに遭遇した時にスムーズに解決できるように日頃からできることは3つあります。
- エラーメッセージを正しく読む癖をつける
- プログラミング、コンピュータサイエンスの基礎を身につける
- 正しい質問の仕方を身につける
の3つです。順番に解決していきます。
エラーメッセージを正しく読む癖をつける
私が駆け出しエンジニアの方のメンターをしていて感じたのは、エラーに遭遇した際に、
- そもそもエラーメッセージを読んでいない
- エラーメッセージの内容を理解していない
の2つが非常に多かったです。
エラーメッセージは英語で書かれていて最初はびっくりするかもしれませんが、初めに書いた通り、
- プログラムのどの場所(行)でエラーが起きたか
- エラーメッセージ(エラーの直接の原因)
が書かれているので、しっかり読みましょう。
英語に対する苦手意識があるのであれば、エラーメッセージをgoogle翻訳で日本語に訳しても良いので、とにかくエラーメッセージをちゃんと読んで理解するようにしましょう。
プログラミング、コンピュータサイエンスの基礎を身につける
2つ目はそもそもエラーを解決するための基礎知識が足りていない場合です。
エラーメッセージの意味が分からない、検索して読んだ記事の内容が分からないという場合は、
プログラミング言語の文法やコンピュータサイエンスに関する基礎知識が不足している場合が多いです。
プログラミングの文法や基本情報レベルのコンピュータサイエンスの知識を身につけるようにしましょう。
正しい質問の仕方を身につける
検索してもどうしても分からない、期限があっていつまでには解決しないといけないという場合は、メンターや先輩社員などに質問して助けを求めることもあると思います。
その際に正しい質問の仕方を身につけていないと、適切な答えが得られなかったり人によっては厳しいことを言われて辛い思いをするので、以下のポイントを抑えて質問するようにしましょう。
質問のポイント1 タイトルで何が聞きたいか明らかにする
- 「○○で△△というエラーが出るので解決したい」
- 「○○が実行できないので実行出来るようにしたい」
- 「△△と○○の違いを知りたい」
といった形で質問のタイトルで何が聞きたいかが簡潔に分かるようにしましょう。
質問のポイント2 期待する動作を明確にする
- プログラムのエラーが解消され正常に終了すること
- エラーが解消し、データベースに意図したデータが保存されること
といった形でどのような状態になれば問題が解決した状態になるかを明確にしましょう。
質問のポイント3 自分で調べたこと、解決を試みたことを知らせる
エラーの解決の過程で自分で試したことを知らせるようにしましょう。
- xxxの記事に書いてある方法を試しましたがエラーメッセージは変わりませんでした
といった形で書いてあると質問を受けた方も別のアプローチから解決方法を探せれるので時間の短縮になります。
質問のポイント4 エラーメッセージの全文、ソースコード一式を渡す
質問を受けた人が手元でエラーが出るプログラムを実行して検証出来るように、質問をする際はソースコード一式を渡すようにしましょう。
プログラムファイル全体又はGithubリンクを送る、使用しているライブラリなどがある場合そちらも知らせる
このようにすると質問を受けた方も手元で検証しつつ回答できるので時間の短縮になります。
また、エラーメッセージを送る際も、コンソールに出力されたメッセージをそのままコピペして送るようにしましょう。
自分で判断して省略したりすると、解決のための重要な情報が抜け落ちたりして二度手間になることがあります。
まとめ
この記事ではプログラミング学習を始めた人がつまづきがちなエラーの解決方法について、現役エンジニアのアプローチも含めてお伝えしました。
プログラミングを勉強して無事に転職してもエンジニアの仕事は日々新たなエラーの解決がお仕事です。
是非エラー解決のスキルを身に付けて学習をスムーズに進められるようにしましょう。