Pythonでコードを書いていて「想定したアウトプットと違う結果が返ってきた…なぜ?」と頭を抱えた経験はありませんか?多くの人が最初に取る対処法は、コードのあちこちに print() 文を仕込んで実行する方法ですよね。でも、確認したい変数が増えてくると、コード中が print だらけになって面倒くさい——そんな悩みを一発で解決してくれるのがデバッガーです✨
デバッガーを使えば、プログラムを1行ずつ実行しながら、その瞬間の変数の値を確認できます。「どこで意図しない値が入ったのか」「どの分岐に入ったのか」が手に取るようにわかるので、バグの原因特定が劇的に速くなります🚀
デバッガーの中核となる仕組みがブレークポイントです。コードの好きな位置に「ここで一時停止して」というマーカーを置いておくと、プログラムを実行したときにその行で止まり、対話的に変数の中身を確認したり、1行ずつ続きを実行したりできます。
例えば、商品代金の合計に送料を足してフォーマットして表示するコードでバグが起きたとき、怪しい関数の手前にブレークポイントを置いておけば、「関数に入る直前の変数の状態」と「処理後の状態」を順番に観察できます。print文を仕込み直して何度も実行する手間が、まるごと不要になります💡
Python 3.7以降では、追加のインストール不要で使える組み込み関数 breakpoint() が用意されています。止めたい行に1行書き足すだけで、デバッグセッションが開始される手軽さが魅力です。
def main():
handbag = 5000
shoes = 6000
breakpoint() # ← ここで一時停止
total = handbag + shoes
print(total)
このスクリプトを普通に python code.py で実行すると、breakpoint() の行で処理が止まり、(Pdb) というプロンプトが表示されます。ここから対話的にコマンドを打てるようになります。
古いPythonを使っている場合は、breakpoint() の代わりに次のように書きます。
import pdb; pdb.set_trace()
p 変数名 — 指定した変数の現在の値を表示n(next)— 次の行へ進む(関数の中には入らない)s(step)— 次の行へ進む(関数があれば中に入る)c(continue)— 次のブレークポイントまで一気に実行q(quit)— デバッグを終了する例えば p handbag と打てば、その瞬間の handbag の値(この例なら 5000)が表示されます。まだ実行されていない行で p total と打てば「NameError」と返ってくるので、変数がいつ定義されたかも一目瞭然です🔍
breakpoint() はソースコードに書き込むタイプのデバッガーなので、デバッグが終わったら必ず削除しましょう。残したままにすると、毎回その行で止まってしまい、本番環境などで意図しない動作の原因になります。
無料で使えるエディター Visual Studio Code(VS Code)には、強力なGUIデバッガーが標準で組み込まれています。コードを変更せずに使えるのが大きなメリットです✨
左サイドバーの拡張機能アイコン(四角いブロック型のマーク)をクリックし、検索窓に「Python」と入力。Microsoft公式のPython拡張機能をインストールするだけで、デバッガーが使えるようになります。
止めたい行の左端(行番号の左側)をクリックすると、赤い丸が表示されます。これがブレークポイントです。複数の行に置くことも自由自在で、コード自体には一切手を加えません🎯
左サイドバーの「実行とデバッグ」アイコン(虫マーク付きの三角)をクリック → 「Run and Debug」ボタンを押し、構成として「Python File」を選択するだけ。プログラムが実行され、最初のブレークポイントで自動的に停止します。
VS Codeのデバッガーが特に便利なのは、画面左側の「変数」パネルに、その時点で定義されているすべての変数とその値が自動表示されること。p 変数名 と打つ必要すらありません。変数が10個あっても20個あっても、ひと目でガッと値を確認できます🌟
キーボードショートカットも割り当てられているので、慣れてくれば手をマウスから離さずに高速デバッグできるようになります。
どちらも一長一短があり、場面によって使い分けるのがおすすめです。
breakpoint():Jupyter Notebook、Google Colab、リモートサーバーなどGUIエディターが使えない環境で活躍。1行追記するだけで動くポータビリティの高さが魅力。PyCharmのような統合開発環境にも同様のGUIデバッガーが搭載されているので、自分が普段使っているエディターのデバッガーを覚えておくのが一番効率的です💡
デバッガーの使い方を体系的に学んだり、快適な開発環境を整えたりすると、コーディングの楽しさが何倍にも増します✨
デバッグしやすいコード設計や、ロギング・例外処理のベストプラクティスが90項目に凝縮されています。中級者へのステップアップに最適です。
型ヒント・テスト・例外設計を組み合わせて、そもそもバグが入りにくい堅牢なPythonコードを書く方法を徹底解説。
Pythonの基本構文や標準ライブラリを網羅。pdb モジュールの詳しい仕様を確認したいときにも頼れる定番書です。
デバッグはタイピング量が多い作業。打鍵感の良いキーボードがあると、長時間の集中力が大きく変わります。
コード・変数パネル・ターミナルを並べて見られるデュアルディスプレイ環境は、デバッグ効率を一気に底上げしてくれます🖥️
print() でのデバッグじゃダメなの?A. シンプルなケースなら問題ありません。ただし変数が複数箇所に分散している場合や、関数の呼び出しを追いかけたい場合はデバッガーが圧倒的に楽です。print文を仕込んで実行→修正→再実行を繰り返すより、ブレークポイントで一度止めて中身を確認する方がずっと速くバグの原因にたどり着けます。
breakpoint() と pdb.set_trace() の違いは?A. やっていることはほぼ同じですが、breakpoint() はPython 3.7以降で導入された組み込み関数で、import なしで使えるのが利点です。また、環境変数 PYTHONBREAKPOINT を設定すれば、別のデバッガー(IPython版pdbなど)に切り替えることもできるので、よりモダンな書き方として推奨されています。
A. VS CodeなどIDEのGUIデバッガーを使うのが最も確実です。ブレークポイントはエディター上の表示にすぎず、ソースコード自体には残らないため、デバッグを終了すれば自然と消えます。コミット時の事故も防げて一石二鳥です。
A. 標準デバッガーなら s(step)コマンド、VS Codeなら「ステップイン」ボタンを押します。n や「ステップオーバー」だと関数の中に入らずスキップしてしまうので、関数内の挙動を追いたいときは必ず s/ステップインを使いましょう。
A. はい、使えます。セル内に breakpoint() を書けばPython標準のデバッガーが起動しますし、最近のJupyterLabにはGUIデバッガー機能も搭載されています。Google Colabなどリモート環境でも breakpoint() が動くため、汎用性は抜群です。
print文デバッグから卒業して、デバッガーを使いこなせるようになると、同じバグを直す時間が半分以下になることも珍しくありません。1行ずつ実行しながら変数の変化を観察できる体験は、一度味わうと手放せなくなります🚀
普段の開発ではVS CodeなどのIDEデバッガーを軸に、ノートブック環境やリモート環境では breakpoint() を使い分ける——この2つを身につければ、Pythonでのバグ修正は劇的に速く、楽しく、確実になります。次にバグに遭遇したときは、ぜひ print() ではなくデバッガーを開いてみてください✨