プログラミングでエラーが出てしまったけど、自力で解決できる方法を知りたい…
自力ではどうしてもエラーが解決できないから、どうにか解消して先に進む方法を教えてほしい
本記事はプログラミングのエラーに関するこのような悩み・疑問点を解消できるような記事になっています。
- 自力でプログラミングのエラーを解決するための手順
- 自力でどうしてもプログラミングのエラーが解決できない場合の対処方法・解決方法
- プログラミングのエラー対処時の注意点
僕自身、プログラミングに触れはじめて数年経ちますが、今でもプログラムを触ればほぼ毎回エラーに悩まされます。
とはいうものの、数年プログラミングをしているうちにエラーにもなれ、多くのエラーは時間をかけず解決できるようになりました。
本記事を最後まで読んでいただければ、初心者や未経験者でもプログラミングのエラーを高確率で解決できるようになります。
↓↓月額2980円でエラー質問し放題!現役エンジニアが平均30分で回答!↓↓
プログラミングにおけるエラーの対処・解決方法3つ
まず、プログラミングのエラーを解決・対処する主な3つの方法について簡単にお話しします。
自力でエラーを解決する
最初に紹介するのは自力でエラーを解決する方法です。基本中の基本です。
- エラーメッセージを読む
- エラーの内容やエラーが発生している場所を把握
- エラーの原因や理由を突き止める
- エラーの原因や理由を解決する方法を探る
- コードを修正してエラーを解消する
後ほど詳しく解説しますが、このような手順を踏むと自力でもエラーを解決できる可能性が高まります。
プログラミングを今後していく中で自力でエラーを解決できないといけない場面は多々あると思うので、時間がかかってもいいので自力で解決する練習をしておきましょう。
プログラミングのエラー解決サイトを使う
次に紹介する方法はプログラミングのエラー解決サイト・質問サイトなどを使う方法です。
エラー解決サイトには「Q&A掲示板タイプ」と「メンターに教えてもらうタイプ」の2種類があり、例えば以下のようなサービスがオススメです。
- 侍エンジニアPlus…Q&A掲示板型とメンター型の両方
- teratail…Q&A掲示板型
- MENTA…メンター型
後ほど紹介しますが、侍エンジニアPlus、teratail、MENTAなどプログラミングの質問をしたり、サポートが受けられるサービスはたくさん存在します。
ただし、エラー解決サイトは自力でエラーを解決しようとして無理だった場合に使うようにしましょう。
エラーが出ない別の方法を模索する
プログラミングのエラー解決サイトで質問してみてもエラーを解決できない場合も出てくるでしょう。
このような時は別の方法がないかを模索してください。
東京から大阪へ行く手段が1つだけでなく複数あるのと同じく、プログラミングでも目的を達成する手段は複数あることが多いです。
プログラミングのエラー解決のための3ステップ
プログラミングのエラーを解決・対処する方法3つについて簡単に紹介しましたが、以下のような順でエラーの解決を試みてください。
- まずは自力で解決を試みる
- どうしても自力で解決できなければプログラミング質問サイトなどを使ってみる
- ①、②を試しても無理なら別の方法を模索してみる
初心者や未経験者だとエラーが出たら自力で解決しようとせずにすぐに人に聞こうとする人も少なくありませんが、まずは必ず自力での解決をためしてください。
プログラミングを今後していく中でエラーには何度も出くわします。
毎回毎回、人に聞いていたら手間がかかるし、答えが得られるとも限らないので、自力でエラーを解決できる力をつけるべきだからです。
自力でプログラミングのエラーを解決する手順
まずは、自力でエラーを解決する方法について解説していきます。プログラミング未経験者や初心者は間違った順番でエラーを解決しようとしている場合が多いです。
あなたがしているエラー解決の順序が大きくずれていないかチェックしてください。
エラーメッセージをしっかり理解する
まず、第一にすることはエラーメッセージをしっかりと読んで理解することです。エラーメッセージからは以下のようなことが分かります。
- どのようなエラーが起きているのか
- エラーが起きている箇所(プログラミング言語によっては表示されない場合あり)
エラーを解決するためには、起きているエラーの内容やエラー発生箇所を把握する必要があるので、エラーメッセージを理解することは必須なのです。
しかし、ここでネックになるのが、エラーメッセージが英語であることでしょう。
「英語はほとんど読めないかな…」というプログラミング学習者もいると思いますが、大丈夫です。Google翻訳かDeepL翻訳を使うとエラーメッセージの内容が把握できます。
もちろん、英語は読めたに越したことはないです。英語が読めない方は、中高生レベルの英文法や英単語をこの際簡単に勉強しておくとエラーの解決にかかる時間が短くなるでしょう。
どんなエラーが発生しているのか内容を把握する
エラーメッセージを読んでどのようなエラーが発生しているのか、その内容を理解してください。
どのようなエラーが起こっているのか把握しないことにはエラーの解消のしようがないからです。
pythonでの例をあげます。(pythonを知らない方でも簡単なコードなのでなんとなくわかるはずです)
#coding:utf-8 a = 4 b = "3" res = a + b print(a + b)
このコードは実行すると以下のようなエラーメッセージが出ます。
Traceback (most recent call last): File "error_sample.py", line 4, in res = a + b TypeError: can only concatenate str (not "int") to str
「
」という最後の行にどのようなエラーが出ているのかが書かれています。
日本語訳すると「文字列型には文字列型でしか連結はできない」という意味で、「文字列型と違う型を連結しようとしていることでエラーが起きている」ことが分かります。
このように、エラーメッセージを読んでどんなエラーが起きているのかを把握してください。
発生しているエラーの内容がわからなければ検索する
エラーメッセージを読んでエラーの内容を把握してくださいと書きましたが、エラーメッセージ読んだだけでエラーの内容がわかる簡単なエラーばかりではありません。
エラーメッセージを読んでもエラーの内容がわからない場合はGoogleなどでエラーメッセージをそのまま検索してやることが有効です。
例えば先ほどの例のエラーメッセージにある「
」をGoogleでそのまま検索してみましょう。
検索すると、このようにエラー内容について解説してくれている記事が出てくることが多く、これらを読むとエラー内容を理解することができます。
検索しても英語の記事しか出てこない場合もありますが、この場合はページ丸ごとGoogle翻訳にかけてやるといいでしょう。
エラーの発生場所を特定する
どんなエラーが起きているか把握できたら、次にそのエラーがどこで発生しているものなのかを特定しましょう。
プログラミング言語によってはどの行でエラーが発生しているのかエラーメッセージで教えてくれ、それを見れば一瞬でエラー発生箇所がわかります。
もう一度さっきと同じコードを例に出してみます。
#coding:utf-8 a = 4 b = "3" res = a + b print(a + b)
上記のコード実行時のエラーメッセージは以下のよう。
Traceback (most recent call last): File "error_sample.py", line 4, in res = a + b TypeError: can only concatenate str (not "int") to str
エラーメッセージの2行目と3行目に注目してください。元のコードの4行目の「res = a + b」としているところでエラーが出ていると知らせてくれています。
しかし、プログラミング言語によってあエラー内容だけ表示され、どの行やどの処理でエラーが起こっているのかわからない場合があります。
この場合はエラー内容をもとにエラーの起こっていそうな処理に目星をつけて自力で調べていく必要があります。
エラー場所の具体的な特定方法については少し下の「エラー発生場所やエラー原因・理由の具体的な特定方法」で解説しています。
エラー発生の原因・理由を特定する
エラー内容とエラーの発生場所を特定できれば、エラー発生の原因・理由を特定しましょう。
なお、ここで注意しないといけないのは必ずしもエラーの発生場所がエラーを引き起こしている原因ではないということです。
エラー発生場所にエラーが発生しているのは結果であって、その結果を引き起こす原因がどこかそれ以前のコードにあるのです。具体例を見ていきます。
#coding:utf-8 a = 4 b = "3" res = a + b print(a + b)
このコードは本記事すでに3回目の登場ですが、4行目でエラーが発生しているのは実は2行目に原因があります。「b = “4”」と4が文字列型になっているのがエラーの原因です。
エラー発生場所やエラー原因・理由の具体的な特定方法
エラーの発生場所やエラーの原因・理由を突き止めるにはプログラムの流れを追っていく必要がありますが、1からコードを書き直してチェックしていくのは時間や手間がかかりすぎます。
そこで、エラーの発生場所やエラー原因・理由を探る場合に有効な3つの方法を紹介します。
- printデバッグ
- コメントデバッグ
- デバッガを使う
それぞれについて簡単に解説していきます。
printデバッグ
printデバッグとは変数に代入されているデータや関数を呼び出したときの戻り値などを画面に出力して確かめる方法です。
変数や関数の戻り値のデータを確認することで、どこまでが正常に動いていてどこからおかしな動作をしているのか突き止めることができます。
printデバッグはエラーの原因・理由の方に役立ちます。
コメントデバッグ
コメントデバッグでは、プログラムのある行より下を全てコメントアウトしてしまう方法です。コメントアウトしてエラーが出なければコメントアウトした部分にエラーの発生場所が含まれています。
「二分探索方」を用いれば頭を使わなくても効率よくエラーの発生場所を突き止めることができます。
コメントデバッグはエラーの発生場所の特定の方に役立ちます。
デバッガを使う
デバッガとはプログラム上のバグやエラーを発見・修正するためのソフトです。ただし、自動でミスを発見・修正してくれるわけではありません。
具体的にはプログラムを実行途中で一旦停止して、変数の値を確認したり、コードを1行ずつデータの状態などをみながら実行したりできます。
デバッガはprintデバッグやコメントデバッグよりも簡単かつ便利なので、積極的にデバッガを使って慣れておくことを推奨します。
エラーを修正する
エラーの発生原因や理由がわかれば、あとは修正するだけです。
修正して再度プログラムを実行して正常に動くか試してみてください。
1度の修正ではエラーが解消されない場合も多く出くわすと思いますが、根気強く以下の流れを繰り返すしかありません。
エラー内容の把握→エラー発生場所の特定→エラーの原因・理由の特定→修正
自力でエラーに対処するときは時間を決める
自力でエラーを解決しようと取り組むことは素晴らしいことです。
しかし、初心者や未経験者だとどうしても1人ではエラーを解決できない場合なども存在し、このような場合、長期間エラーの解決に取り組むのは労力も時間も無駄です。
なので、「●日同じエラーに悩まされ続けて解消できないなら諦めてエラー解決サイトを使う」などのように自力解決を諦める指標を作ることをオススメします。
プログラミングのエラー解決サイトを使う方法
特に初心者や未経験者ですと、自力ではエラーが解決できない場合は少なくないと思います。
自力ではエラーを解決できなかった人に向けて、エラー解決サイトを使う方法を紹介していきます。
エラー解決サイトの2タイプ
まず、プログラミングのエラー解決サイトは主に以下の2つに分けられます。
- Q&A掲示板型のエラー解決サイト
- メンター型のエラー解決サイト
Q&A型とはYahoo!知恵袋のような質問を投稿すると、どこかの誰かが回答してくれるサービスです。
一方でメンター型は、現役エンジニアがメンターとしてついてチャットやビデオ通話などでオンラインレッスンやエラー解決を一緒に進めてくれるようなサービスです。
Q&A掲示板型 | メンター型 | |
---|---|---|
回答の得られやすさ | 回答が得られない場合あり | 回答はほぼ確実にもらえる |
回答の信憑性・信頼性 | 回答の質が低い場合あり | 回答の質も一定は担保される |
料金 | 基本的に無料 | 基本的に有料 |
Q&A型サイトは無料の反面、質問しても回答がもらえなかったり、回答が来たとしてもエラー解決に結びつかないトンチンカンな回答が来る場合もあります。
一方、メンター型の場合、料金は有料ですが回答自体はほぼ確実にもらえ、回答の質も一定は担保されます。これが有料の強みでもあります。
主なプログラミングのエラー解決サイト
ここでは、プログラミングのエラー解決に特に有用なエラー解決サイトを5つ紹介していきます。
侍エンジニアプラス
はじめに紹介するのは「侍エンジニアPlus」というQ&A型サービスとメンター型サービスの両面の特徴をあわせ持った素晴らしいサービスです。
- Q&A掲示板で技術的な悩みからキャリアや転職の悩みまで質問・相談可能
- Q&A掲示板では質問してから平均30分で現役エンジニアから回答がもらえる
- 月に1回まで無料で現役エンジニアとのオンラインレッスンで不明点を質問可能
- 30~40種類以上のオンライン教材で勉強することもできる
一般にQ&A型サービスには「回答が付かない」or「回答の質が低い」という確率もあり、疑問や不明点の解決につながらない可能性が高いです。
しかし、侍エンジニアPlus内のQ&A掲示板では、確実にすばやく回答が付き、現役エンジニアが回答してくれるので回答の質も担保されています。
また、月に1回まで無料で現役エンジニアとオンラインレッスンも可能なので、文字で伝えにくいことでも画面を共有してメンターと一緒に疑問点・不明点を解決していけます。
さらに、質問や不明点の解決に利用できるだけでなく、30種類以上ものプログラミングを学べるコースも用意されており同時に教材も揃うというメリットもあります。
↓↓月額2980円!!他のプログラミングスクールの約1.5%の値段!?↓↓
普通のプログラミングスクールだと1~3ヶ月で20万円超えるとかザラにあるから、大げさだけど月額2980円とかもうほぼ無料と変わらないじゃん…
teratail
- 回答率が85%(2021年時点)を超えており、かなり高い
- 日本の企業が作っているサービスのため、日本人が使いやすい
- 初心者にもやさしい(「初心者マーク」をつけて質問可能)
- 日本人のITエンジニアが最も多く登録している(150万人超え)
プログラミング初心者や未経験者がプログラミングのQ&A掲示板を使いたいと思ったとき、まず初めに利用すべきはこの「teratail」でしょう。
プログラミングの質問にはある程度コツや作法が存在しますが、これらを知らないド素人でも質問したら何らかの回答がつきやすいです。(皆さんとても親切です)
スタックオーバーフロー
「スタックオーバーフロー」もかなり有名なプログラミングのQ&A掲示板で、紹介しているのは海外の「stack overflow」の日本語版です。
ただし、プログラミング初心者よりかは中級者以上の方が多い印象で、曖昧な質問などをしてしまうと回答者から怒られてしまうこともあります(笑)
MENTA
- 自分から教えてほしい内容と料金を提示してメンターを募集することが出来る
- 1か月単位での契約
- メンターや教えてもらえる内容が豊富
「MENTA」はメンター型のエラー解決サービスです。
MENTA以外にもメンター型のサービスは存在するものの、それらと比較してMENTAにはメンターの登録者数がかなり多いです。
メンターの数が多いということは、それだけあなたに合ったメンターも見つかりやすいということです。
coconala
- メンターや教えてもらえる内容が豊富
- プログラミングだけでなく、Webマーケティングやライティング、デザイン分野についての案件が豊富
- 1か月単位でなく、単発でのサービス購入が可能
- 教えてもらうだけでなく、自分の専門外の分野に関して外注するという使い方も可能
「coconala(ココナラ)」もメンター型のサービスですが、単発での購入が可能なのが特徴です。
「契約期間が1か月~なのは長すぎるし1回だけ質問したい」という方はMENTAよりcoconalaがオススメです。
適切な回答を得やすいプログラミングのエラーの質問方法
自力での解決は難しいから、エラー解決サイトで人に質問してエラーを解決したいという人は、エラーの質問の仕方に気を付ける必要があります。
なぜなら、質問の仕方が悪いと、適切な回答が得られなかったり、そもそも回答が全くつかない可能性もあるからです。
【大前提】プログラミングの質問をする前に自力で解決を試みる
プログラミングの鉄則:わからないことがあればまず検索して自力で解決を試みる
この記事内でも何度か書いていますが、まずは質問をする前に自力で解決を試みてください。
エラーをまずは自力で解決する癖をつけないと、今後プログラミングをやっていくのは難しいでしょう。
プログラミングで何が分からないのか質問をする前に把握
人に質問する前に、そもそも自分が何に対して質問・疑問を抱いているのか整理できていない人が多いです。
このような状態で、質問をしても、あなたの悩みを解決できる回答が返ってくる可能性は低いですし、そもそも相手に、あなたが何に困っているのか把握してもらえないです。
なので、自分がどこまで理解していて、どこからが分からなくて質問して聞きたいことなのかを整理しておきましょう。
1回の質問で伝わるよう分かりやすく
特に、Q&A型プログラミング質問サービスにおいては、自分の質問内容を1回で相手に伝わるように書くように意識しましょう。(書き直したりもできますが、お互い面倒だからです笑)
質問を書いている自分は質問内容を理解できているのは当然ですが、他の人から見て「自分の書いた質問の文章は理解できるか、誤解されないか」と考えることが重要です。
また、質問に答えてもらえるための最低限の情報を文章中に含められているかもチェックしましょう。
【Q&A型サービスのみ】タイトルに質問の要件を書く
(メンター型サービスを使う場合は、ここは読み飛ばしてください。)
まず、初めに適切な質問タイトルを設定する必要があり、タイトルには要件を過不足なく、簡潔に書くようにしましょう。
具体的には、あなたが質問したい内容を端的にまとめて、タイトルにしてください。抽象的すぎるタイトルや、逆に具体的で長すぎるタイトルは不向きです。
質問に回答しに来る人は、まず「タイトル」をみて回答するかどうか判断するから、タイトルは本当に大事!
【Q&A型サービスのみ】正しいタグを設定する
(メンター型サービスを使う場合は、ここは読み飛ばしてください。)
多くのQ&A型サイトでは、自分の質問にタグをつけることが出来ます。
自分の質問に関係あるタグはできるだけつけた方が、色々な人の目に留まって回答がつきやすくなります。
ですが、色々な人の目に触れるからと言って、まったく関係ないタグをつけても効果はない薄いですし、逆に迷惑なのでやめておきましょう。
はじめに何を実現したいのかを書く
質問詳細の欄に、まず自分が何を実現したいのかを明確に書くようにしましょう。これには以下のような効果があります。
- あなたが何を実現しようとしている途中でエラーや問題点が発生したのか伝わる
- ゴールが明確になる
これを書かないと、あなたが何を実現したいのか、つまりゴールが相手に伝わらないので、あなたが得たい回答は得られる確率が低くなります。
プログラミング中に発生したエラーを具体的に書く
エラーが発生して、解決できずに質問をすることは結構多いと思います。
こういう場合は出たエラーメッセージや実行ログを質問文に記載する、もしくはスクリーンショットを貼るようにしましょう。
文章に「エラーが出た」と書くだけでは、どのような種類のエラーが出たのか伝わらず、意味のある回答が得られないかもしれません。
エラーが出るまでに自分がしたことやソースコードを書く
エラーや問題点が出るまでに自分が何をしたか、どんなコードを書いて出たのかを記載しましょう。
ソースコードを書くことによって、言葉で伝えるよりも何をしているのか分かりやすいことが多いです。
また、こうすることでソースコードのどこがどう間違っているか、具体的に指摘してもらいやすいです。
エラーを解決するために自分が試したことを書く
質問をするまでに、おそらくあなたは検索したり本を調べて、自力で解決を試みていると思います。
自力で解決しようと試みた過程で何をしたのか、そしてどのように解決できなかったのか?(どんなエラーが出たのかなど)を記載しましょう。
これを記載することで、回答者がエラーや問題点の原因を推測するヒントにもなりますし、自分が1度試してダメだった解決策を回答で提示されることもなくなります。
あなたのプログラミングをしている環境を書く
ご存じかもしれませんが、プログラムを実行する「環境」によってプログラムを実行した際の挙動が異なることがあります。
- あなたの使っているOS
- 使っているプログラミング言語やフレームワーク、そのバージョンなど
- 使っているエディタやブラウザ、マシンの種類など
例えば、WindowsユーザーがMacでの解決策を手に入れても役に立たない場合が多々あります。
環境を記載しておくことでこのような、ミスを事前に防ぐことが出来ます。
【Q&A型サービスのみ】エラー解決後は解決するためにしたことを書いておく
(メンター型サービスを使う場合は、ここは読み飛ばしてください。)
問題解決後は、回答者に感謝とそのお礼を伝えるとともに、どのようにして問題を解決できたのかを記載し伝えましょう。
そうすることで、回答者も自分の回答が役に立ったことが実感でき、気分が良くなるというだけでなく、今後あなたと同じエラーに悩まされる人がでてきた時に役立ちます。
エラー解消に取り組む際に気を付けること
エラーを解消しようとする際に気を付けるべきことについて紹介していきます。
エラーは1つずつ解消していく
プログラムを実行して発生するエラーは1つだけとは限りません。複数のエラーが起こることも全く珍しくありません。
エラーが複数起こったときは、まとめて全部解消しようとするのではなく、1つずつ解消していくようにしてください。
始めの状態に戻せるようにしておく
エラーを解消しようとコードを改変したりしているうちに、別のエラーやバグが発生して元の状態より面倒な状態に陥ってしまうことも少なくありません。
そこで、スタート地点(はじめの状態)のバックアップなどを作っておくと、いつでも「振り出しに戻る」ことが出来て便利です。
プログラミングのエラー対処・解決方法まとめ
記事が長くなってしまいましたので、エラーの対処方法・解決方法についておさらいしておきましょう。
まず、プログラミングにおけるエラー対処・解決のためには以下のような3ステップを踏みましょう。
【1.まずは自力で解決を試みる】
エラー内容の把握→エラー発生場所の特定→エラーの原因・理由の特定→修正
自力でエラーを解消するときにはこの4つのサイクルをエラーが解消されるまで繰り返します。
【2.エラー解決サイトを利用する】
プログラミング質問サイトなどを利用すると、エラーの解決に大いに役立つ場合が多いです。
プログラミング質問サイトはQ&A掲示板型とメンター型の2つに大別できます。例えば以下のようなサービスがオススメです。
- 侍エンジニアPlus…Q&A掲示板型とメンター型の両方
- teratail…Q&A掲示板型
- MENTA…メンター型
Q&A型は無料の反面、回答の質に期待できなかったりそもそも回答が付かない可能性もあります。
一方で、メンター型は基本有料ですが、回答はほぼ必ずもらえ、その質も一定担保されます。
【3.別の方法を模索する】
上記のどの方法を試してもエラーが解決できない場合は、目的を達成するための別の方法や手段がないか模索しましょう。
プログラミングのエラーは正直、イライラするし気分が良いものではありません。
しかし、どんな凄腕のエンジニアもエラーは通る道で、あなたがバカだからエラーに遭遇し、困っているわけではありません。気負わず根気よくエラーと付き合っていきましょう。
コメント