mei_13のPython講座 ロゴ

【解説】Pythonデバッグ入門:プログラムの不具合を見つけ、解決するための第一歩




Pythonデバッグ入門:プログラムの不具合を見つけ、解決するための第一歩


Yukiのアイコン
【Yuki】 こんにちは、Hirokiくん。今日はPythonのプログラミングにおいて、とても大切だけれど少し難しく感じてしまうかもしれない……「デバッグ」について、一緒にお話ししていこうと思います。


Hirokiのアイコン
【Hiroki】 Yukiさん、よろしくお願いします!デバッグ、名前は聞いたことがあります。でも、いざ自分の書いたコードが動かないと、どこが間違っているのか全然わからなくて……。いつもパニックになっちゃうんです。


Yukiのアイコン
【Yuki】 ふふ、大丈夫ですよ。ベテランのエンジニアでも、最初から完璧なコードを書ける人はほとんどいません。みんな、デバッグを繰り返して完成させていくんです。プログラムが思い通りに動かないとき、その原因を探して修正する作業のこと……それがデバッグです。今日はその基礎から、具体的なテクニックまでゆっくり解説していきますね。

デバッグとは何かを知る


Hirokiのアイコン
【Hiroki】 デバッグって、直訳すると「虫(バグ)を取る」という意味ですよね?


Yukiのアイコン
【Yuki】 ええ、その通りです。昔、本物の蛾がコンピュータに挟まって故障したことが語源だと言われています。現代では、プログラムに含まれる「論理的な間違い」や「記述のミス」をバグと呼びます。


Hirokiのアイコン
【Hiroki】 バグがあると、プログラムが途中で止まったり、計算結果がおかしくなったりするんですね。


Yukiのアイコン
【Yuki】 そうですね。デバッグの目的は、大きく分けて二つあると思います。一つは、プログラムを「正しく動くようにすること」。そしてもう一つは、プログラムが「なぜそう動いているのかを深く理解すること」です。後者ができるようになると、自然とプログラミングの腕も上がっていく……かもしれません。


Hirokiのアイコン
【Hiroki】 なるほど。ただ直すだけじゃなくて、理解することが大事なんですね。

まずはエラーメッセージを読んでみましょう


Yukiのアイコン
【Yuki】 プログラムが止まってしまったとき、画面に赤い文字などでたくさんのメッセージが出てきますよね。あれを「トレースバック(Traceback)」と言います。Hirokiくんは、あれをちゃんと読んでいますか……?


Hirokiのアイコン
【Hiroki】 うっ……。英語だし、たくさん出てくるので、いつも見ないで閉じてしまっていました。


Yukiのアイコン
【Yuki】 その気持ち、よくわかります。でも、トレースバックは犯人を探すための「地図」のようなものなんです。まずは代表的なエラーをいくつか見てみましょうか。

# SyntaxError: 文法間違い
print("Hello"


Yukiのアイコン
【Yuki】 例えば、このようにカッコを閉じ忘れると SyntaxError が出ます。「文法が間違っていますよ」という合図ですね。


Hirokiのアイコン
【Hiroki】 これは見たことがあります!「ここが変だよ」って教えてくれているんですね。


Yukiのアイコン
【Yuki】 そうです。他にも、定義していない変数を使おうとしたときの NameError や、数字を 0 で割ろうとしたときの ZeroDivisionError などがあります。トレースバックの一番下の行を見ると、何のエラーかが書いてあります。そして、その数行上を見ると「何行目でエラーが起きたか」が書いてあるんです。


Hirokiのアイコン
【Hiroki】 一番下を見ればいいんですね。それなら僕にもできそうです!


Yukiのアイコン
【Yuki】 まずは、エラーメッセージを怖がらずに、「どこで」「どんな種類のエラーが」起きているのかを確認すること。これがデバッグの第一歩だと思います。

もっとも身近な「printデバッグ」


Yukiのアイコン
【Yuki】 エラーメッセージは出ないけれど、計算結果が期待通りにならない……。そんなときに便利なのが、「printデバッグ」と呼ばれる手法です。


Hirokiのアイコン
【Hiroki】 print() 関数を使うんですか?


Yukiのアイコン
【Yuki】 はい。プログラムの途中に print() を挟んで、その時の変数の値を確認する方法です。簡単な例を書いてみますね。

def calculate_total(price, tax_rate):
    print(f"DEBUG: price={price}, tax_rate={tax_rate}")  # 値を確認
    total = price * tax_rate
    print(f"DEBUG: total={total}")  # 途中の計算結果を確認
    return total

result = calculate_total(1000, 0.1)
print(f"結果: {result}")


Hirokiのアイコン
【Hiroki】 あ、これなら僕もやったことがあります。でも、これだと100円になっちゃいますね。1000円の商品の10%税込みなら、1100円のはずなのに……。


Yukiのアイコン
【Yuki】 そうですね。この場合、print() の結果を見ることで、「あ、tax_rate を掛けるだけじゃなくて、元の金額に足さないといけないんだ」とか「tax_rate を 1.1 にしなきゃいけないんだ」ということに気づけるはずです。


Hirokiのアイコン
【Hiroki】 なるほど。変数が自分の想像通りの値になっているか、一つずつ確かめていくんですね。


Yukiのアイコン
【Yuki】 はい。ただ、print() を使いすぎると、後で消すのが大変になったり、画面がログでいっぱいになってしまったりすることもあります。小規模な確認には良いですが、少し複雑なプログラムには、別の方法が向いているかもしれません。

Python標準のデバッガ「pdb」を使ってみる


Hirokiのアイコン
【Hiroki】 print() 以外の方法……。何か特別なツールを使うんですか?


Yukiのアイコン
【Yuki】 Pythonには標準で pdb (Python Debugger) というツールが備わっています。これを使うと、プログラムを実行中に好きな場所で「一時停止」させて、その時の状況を詳しく調べることができるんです。


Hirokiのアイコン
【Hiroki】 一時停止! 映画を止めて中身を確認するみたいですね。


Yukiのアイコン
【Yuki】 素敵な例えですね。使い方はとても簡単で、停止させたい場所に breakpoint() と書くだけです。Python 3.7 以降であれば、この一行でデバッガが起動します。

def process_data(data):
    result = []
    for item in data:
        # ここでプログラムを一時停止させる
        breakpoint()
        processed = item.upper()
        result.append(processed)
    return result

my_list = ["apple", "banana", "cherry"]
process_data(my_list)


Hirokiのアイコン
【Hiroki】 これを実行すると、どうなるんですか?


Yukiのアイコン
【Yuki】 プログラムが breakpoint() のところで止まり、入力待ちの状態になります。そこでコマンドを打ち込むことで、いろいろな操作ができます。

  • n (next): 次の一行を実行する。
  • p 変数名 (print): その変数の値を表示する。
  • c (continue): 次の停止ポイントまで実行を再開する。
  • q (quit): デバッグを終了する。


Hirokiのアイコン
【Hiroki】 へぇー! 1行ずつ動かしながら、その時の変数の値をチェックできるんですね。


Yukiのアイコン
【Yuki】 そうなんです。これを使えば、ループの中で何回目の処理の時に値がおかしくなるのか……といったことが、手に取るようにわかるようになります。少し操作に慣れが必要ですが、覚えておくととても心強い味方になってくれる……と思います。

IDE(VS Codeなど)を活用した高度なデバッグ


Hirokiのアイコン
【Hiroki】 さっきのコマンドを覚えるのは、ちょっと大変そうかも……。もっと楽にできる方法はありませんか?


Yukiのアイコン
【Yuki】 そう言うと思っていました。実は、Visual Studio Code (VS Code) などのエディタを使っているなら、もっと視覚的にデバッグができるんですよ。


Hirokiのアイコン
【Hiroki】 VS Codeなら僕も使っています!


Yukiのアイコン
【Yuki】 それなら、行番号の左側をクリックしてみてください。赤い丸印がつきますよね。それが「ブレークポイント」です。


Hirokiのアイコン
【Hiroki】 あ、つきました!


Yukiのアイコン
【Yuki】 その状態で「デバッグ実行(F5キー)」をすると、その赤い丸の行でプログラムが止まります。画面の左側には、その時存在している「変数の一覧」がずらっと表示されますし、マウスをコード上の変数に重ねるだけで、今の値が表示されたりもします。


Hirokiのアイコン
【Hiroki】 わあ、すごい! print() をたくさん書かなくても、全部の変数が一度に見えるんですね。


Yukiのアイコン
【Yuki】 そうなんです。ボタン一つで「一行進む」「関数の中に入る」「関数から抜ける」といった操作もできます。視覚的に今の実行場所がハイライトされるので、プログラムの流れがとても把握しやすくなるはずです。


Hirokiのアイコン
【Hiroki】 これなら、僕でもどこで間違えたか見つけられそうな気がします。

デバッグをスムーズに進めるための考え方


Yukiのアイコン
【Yuki】 テクニックも大切ですが、最後にデバッグに取り組む時の「心構え」について少しだけお話しさせてください。


Hirokiのアイコン
【Hiroki】 心構え、ですか?


Yukiのアイコン
【Yuki】 はい。まず、「仮説を立てること」が大切です。「おそらくこの処理のあたりで、変数の値がこうなっているから、エラーが起きているのではないか?」と予想してから、デバッガで確認するんです。


Hirokiのアイコン
【Hiroki】 いきなり調べ始めるんじゃなくて、まずは考えてみるんですね。


Yukiのアイコン
【Yuki】 ええ。そうしないと、どこを見ていいかわからなくなってしまいますから。次に、「問題を小さく切り分けること」。もし100行のコードがあるなら、どの10行に問題があるのかを絞り込んでいきます。正常に動く部分を削ぎ落としていけば、最後にバグが隠れている場所が見つかるはずです。


Hirokiのアイコン
【Hiroki】 消去法みたいな感じですね。


Yukiのアイコン
【Yuki】 その通りです。そして一番大切なのは、「エラーを自分の失敗だと思わないこと」です。エラーは単なる現象に過ぎません。むしろ、バグを見つけて修正するたびに、あなたは「プログラムがどう動くべきか」という深い知識を手に入れていることになります。


Hirokiのアイコン
【Hiroki】 エラーが出るたびに落ち込んでいたけど、少し前向きになれそうです。


Yukiのアイコン
【Yuki】 それは良かったです。……あ、最後にいくつか参考にできそうなサイトを紹介しておきますね。


Hirokiのアイコン
【Hiroki】 ありがとうございます!さっそく、昨日動かなかったコードをVS Codeでデバッグしてみます。


Yukiのアイコン
【Yuki】 ええ、応援しています。もしまた困ったら、いつでも聞いてくださいね。ゆっくり、一歩ずつ進んでいきましょう……。

デバッグのまとめ


Hirokiのアイコン
【Hiroki】 今日の話をまとめると、こんな感じでしょうか。

  1. エラーメッセージ(トレースバック)をちゃんと読む。
  2. 簡単な確認なら print() を使ってみる。
  3. 複雑な問題なら breakpoint() や VS Code のデバッガを活用する。
  4. 仮説を立てて、問題を小さく切り分けて考える。


Yukiのアイコン
【Yuki】 完璧です、Hirokiくん。デバッグが得意になると、プログラミングがもっと自由で、楽しいものに変わるはずですよ。


Hirokiのアイコン
【Hiroki】 はい!頑張ります!


Yukiのアイコン
【Yuki】 ……ふふ、その意気です。夜遅くまで作業するときは、ちゃんと休憩も挟んでくださいね。それじゃあ、今日のレッスンはここまで。お疲れ様でした。


Hirokiのアイコン
【Hiroki】 ありがとうございました、Yukiさん!



< 可読性
コラム一覧に戻る
例外処理 >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki