プログラミング学習で挫折する最大の原因は、文法の難しさではなく「エラーが解決できずに心が折れる」ことです。逆に言えば、エラーの調べ方さえ身につけば、学習の継続率は劇的に上がります。
この記事では、エラーメッセージの読み方から、検索・AI・質問の使い分けまで、「詰まったときの動き方」を体系化します。これはプロのエンジニアが毎日やっている、それ自体がプログラミングの中核スキルです。
大前提:エラーは敵ではなくヒント
エラーメッセージは「動きませんでした」という苦情ではなく、「どこで・何が・なぜだめだったか」を教えてくれる診断書です。赤い文字の羅列に怯えず、読む技術を覚えましょう。
ステップ1:エラーメッセージを読む

多くの言語で、エラーは「発生場所(ファイル・行番号)→問題のコード→エラーの種類と説明」の構造をしています。最終行のエラー種別(NameError、SyntaxErrorなど)と説明文が核心です。英語でも構文は単純なので、「is not defined=定義されていない」のように単語を拾えば十分読めます。
- SyntaxError:書き方の間違い(閉じ括弧・コロン忘れが定番)
- NameError / undefined:その名前の変数・関数が存在しない(打ち間違いが8割)
- TypeError:型の不一致(数値と文字列を足そうとした等)
- ImportError / ModuleNotFound:ライブラリが入っていない・名前違い
ステップ2:正しく検索する
読んでもわからなければ検索です。コツは「エラーメッセージをそのまま+言語名」で検索すること。
- 自分のファイル名・変数名など固有部分は削って検索する(例:「NameError: name is not defined Python」)
- 英語のまま検索すると情報量が桁違いに増えます
- Stack Overflowや公式ドキュメントを優先的に読む
- 記事の日付を確認(古い記事は今のバージョンで通用しないことがあります)
ステップ3:AIに聞く
現代の学習者の特権です。AIチャットに「コード全文+エラー全文+やりたいこと」の3点セットを貼って質問すると、原因の説明と修正案が返ってきます。
ただし2つの注意を。①修正案を理解してから適用する(コピペで動いても学びゼロでは同じ穴に落ちます)、②AIの説明も間違うことがあるので、動作確認は必ず自分で行う。質問の書き方はプロンプトのコツが、業務コードを貼る際の注意は安全な使い方が参考になります。
ステップ4:人に聞く(質問力を磨く)
それでも解決しないときはコミュニティやSNS、職場の先輩へ。良い質問には型があります。
- やりたいこと:「CSVを読み込んで合計を出したい」
- 起きたこと:エラー全文をそのまま貼る(スクショより文字で)
- 試したこと:「◯◯を検索して△△を試したが変わらなかった」
- 環境:言語・バージョン・OS
「試したこと」を書ける人は、それだけで回答率が跳ね上がります。質問の準備中に自己解決することも多く(ラバーダック・デバッグと呼ばれる現象)、質問文の作成自体がデバッグになります。
詰まりにくくする習慣
- 小さく書いて小さく動かす:50行書いてから確認ではなく、5行ごとに実行
- print(変数)で中身を見る:最古にして最強のデバッグ。想像と現実のズレを可視化します
- 動いていた状態に戻れるようにする:Gitでこまめに記録しておけば、恐れず実験できます
- 時間を区切る:図のフローの目安時間を超えたら次の手段へ。1つのエラーに2時間は溶かさない
よくある質問
Q. エラーが出ないのに正しく動きません。
A. 「エラーなし・結果が変」は論理バグです。print文で処理の途中経過を出力し、「どこまでは想定通りか」を二分探索のように絞り込むのが定石です。
Q. AIに聞けば検索は不要ではないですか?
A. AIは高速ですが、ニッチなライブラリや最新バージョンの情報では不正確なことがあります。AIで当たりをつけて公式ドキュメントで確認、の併用が最も速くて確実です。
Q. エラーが怖くて手が止まります。
A. 「エラー=採点結果が返ってきた」と捉え直してみてください。何も出ないより情報が増えています。壊れても戻せる環境(Git・仮想環境)を作ると、心理的な怖さは大きく減ります。
原因を「半分に割る」|最も確実な特定法
エラーメッセージが手がかりにならないとき、あるいは「エラーは出ないのに動かない」とき、経験に頼らず原因を絞り込む方法があります。二分探索です。
やり方は単純で、疑わしい範囲を半分に切り、どちらに問題があるかを確かめる。それを繰り返すだけです。100行のコードなら、7回の確認で原因の1行にたどり着けます。
| 対象 | 切り方 |
|---|---|
| コード | 後半をコメントアウトして動かす。動けば原因は後半にある |
| 設定ファイル | 設定を半分だけ有効にして試す |
| プラグイン・拡張機能 | 半分を無効にして再現するか確認する |
| 入力データ | データを半分にして試す。特定の行が原因のことがある |
| 過去の変更 | 「いつから壊れたか」を、履歴を遡って二分探索する |
最後の項目は、Gitを使っているならgit bisectという専用機能があります。「動いていた時点」と「壊れている時点」を指定すると、自動で中間の状態を出してくれます。「昨日まで動いていたのに」という状況では、これが最短経路です。
「動いているつもり」を疑う|値を目で見る
エラーが出ないのに正しく動かない場合、思っている値と、実際の値が違っているのがほぼ全てです。頭の中で追わず、画面に出して確認します。
| 確認すること | 具体的に |
|---|---|
| そこまで到達しているか | 各段階に目印を出力する。表示されなければ、その手前で止まっている |
| 値は何が入っているか | 変数の中身を出力する。空文字、null、undefined が入っていることが多い |
| 型は何か | 数値の5と文字列の”5″は別物。型も一緒に出力する |
| 件数は合っているか | 配列やリストの長さを出す。0件だったというのが典型的な原因 |
| 条件分岐はどちらに入ったか | if文の中と、そうでない場合の両方に目印を置く |
「表示されるはず」と思った箇所が表示されない。これが最大の手がかりです。その瞬間、原因の範囲がその手前に確定します。何を出力すればよいか迷ったら、まず「ここを通った」という目印だけを、処理の節目ごとに置いてください。値の中身より先に、経路を確かめるほうが速いことが多くあります。
検索が当たらないときの、キーワードの作り替え方
エラー文をそのまま貼っても結果が出ないのは、その文に自分の環境固有の文字列が混ざっているからです。削るべき部分は決まっています。
| 削るもの | 例 |
|---|---|
| 自分のファイルパス | C:/Users/taro/project/ の部分 |
| 自分がつけた変数名・関数名 | myUserList のような固有の名前 |
| 行番号・文字位置 | line 42、column 8 |
| ID・ハッシュ値 | ランダムな英数字の羅列 |
| 日時 | ログの先頭のタイムスタンプ |
残すのは、エラーの種類を表す固定の英文だけです。そこに「使っている言語名やライブラリ名」と「バージョン」を足します。
| 検索の型 | 例 |
|---|---|
| エラー文+技術名 | TypeError: cannot read properties of undefined react |
| やりたいこと+技術名 | python csv 複数ファイル 結合 |
| 英語で検索する | 日本語より情報量が数倍多い。翻訳して読めば足りる |
| 期間を絞る | 1年以内に絞ると、古いバージョン向けの記事を除ける |
3番目は特に効きます。技術的なエラーは、英語で検索したほうが解決率が明確に上がります。公式ドキュメント、開発者どうしのやり取り、不具合報告の多くが英語で書かれているためです。読めなくても、翻訳しながらで構いません。
AIに聞くときの、正しい渡し方
AIは強力ですが、渡す情報が足りないと一般論しか返ってきません。次の5点を揃えて渡すと、精度が大きく変わります。
| 渡すもの | なぜ必要か |
|---|---|
| 環境(OS、言語とそのバージョン、ライブラリ) | バージョンによって解決策が違う |
| やりたいこと | そもそも方法が間違っている場合、それを指摘してもらえる |
| 実際のコード(エラーの前後) | 推測ではなく実物を見せる |
| エラー文全文 | 途中を省略すると、肝心な行が抜ける |
| すでに試したこと | 同じ提案が返ってくるのを防げる |
そして重要なのが、提示されたコードをそのまま貼り付けないことです。「なぜその変更で直るのか」を1行で説明してもらい、自分が納得してから使う。ここを省くと、次に同じエラーが出たときも、また同じところで止まります。
また、コードを貼るときはAPIキーやパスワードが混ざっていないか確認してください。設定ファイルやログには、思っている以上に認証情報が紛れ込みます。詳しくはAIを安全に使うための注意点にまとめています。
それでも解けないときの、5つの手
| 手 | 効く理由 |
|---|---|
| いったん離れる(15分ルール) | 思い込みが固定されている状態では、同じ場所しか見られない。翌朝解ける例は本当に多い |
| 最小の再現コードを作る | 問題だけを別ファイルに切り出す。この過程で原因に気づくことが半分以上 |
| 誰かに説明する(声に出す) | 説明しようとすると前提が言語化され、矛盾に自分で気づく |
| 公式ドキュメントに戻る | ブログ記事は古いことがある。仕様の正解は公式にしかない |
| 別の方法に切り替える | そのやり方に固執する理由がないなら、遠回りに見えても動く道を選ぶ |
2番目の「最小の再現コードを作る」は、質問する場合にも必須の作業です。そのまま質問文に使えますし、作っている途中で自己解決することが非常に多いためです。切り出す過程で、余計な要素が原因だったと気づきます。
詰まる時間が長引くと、学習全体の期間にも影響します。どこにどれだけ時間がかかるのかの目安は独学の期間はどれくらいかで整理しています。
ログから重複行を取り除いて見やすくしたい場合はテキスト整形が、エラーメッセージに含まれるHTMLを確認したい場合はHTMLエスケープが使えます。
まとめ
エラー解決は「読む→検索→AI→質問」の4段階フローで、各段階に時間の目安を決めて進む。これだけで「詰まって挫折」はほぼ防げます。エラーを読む力はプログラミング力そのもの。今日の赤い文字から、読む練習を始めましょう。
