【VSCode】Pythonを1行毎に変数の中身見ながらステップ実行する方法

VSCodeでpythonのステップ実行のアニメーション

Pythonのプログラムをステップ実行するために、VSCode(Visual Studio Code)でデバッグ環境を構築しました。VSCodeは動作も速く、手軽にステップ実行もできて効率的に開発できます。

Python自体は文法が簡潔で読みやすいので、プログラミングの入門用の言語として初心者にオススメです。また、最近流行りの人工知能(AI)や機械学習、統計に使えるライブラリが豊富に有るので、覚えておきたい言語です。

私の環境は以下の通りです。

環境 バージョン
MacOS 10.13.2
Python 3.6.4
VSCode 1.20.1
VSCodeの拡張機能「Python」 2018.1.0

プログラムのステップ実行とは?

冒頭のアニメーションのように、プログラムを1行ずつ(もしくは複数行)動かしては止めてを繰り返しながら、プログラムの流れを追うデバッグの方法です。

任意の行にブレークポイントを設置することで、実行中のプログラムをその行で止めることもできます。

ステップ実行のメリット

ステップ実行ができる環境を構築すると、以下のことが可能になります。

  • 1行ずつ実行できるため、任意のタイミングでの変数の中身を確認することが可能。

  • コードを変更する必要が無いため、print文を駆使するよりも効率的にデバッグが可能。

  • ブレークポイントを設置すると、不具合がありそうな部分を重点的にデバッグが可能。

  • さらにデバッグ用のショートカットキーを覚えると、より効率的にデバッグが可能。

[注意事項] 1つのディレクトリ内でコマンドを実行します

この記事では、/private/tmpカレントディレクトリ(作業ディレクトリ)として使用します。ターミナルアプリを開いて、cdコマンドで移動しておきます。

$ cd /private/tmp
$ pwd
/private/tmp
$

後述するコマンドは、全てこのディレクトリで実行するものとします。(基本的にコマンドを実行するディレクトリが統一されていれば、どこでもOKです。)

Pythonをステップ実行するための環境構築をする

最新のPythonのインストール

MacにはデフォルトでPython2系がインストールされていますが、こちらの記事の方法で最新のpython3系をインストールします。

anyenvで特定のディレクトリに指定したバージョンのpythonをインストールしました。簡単にディレクトリ毎にバージョンを切り替える事が可能で、他の言語でも同じフローで応用できて環境構築手順がシンプルになるメリットがあります。

以下のようにカレントディレクトリでpythonの最新版が実行できるようになればOKです。

$ python --version
Python 3.6.4
$

VSCodeをインストール

VSCodeのダウンロードページへアクセスして、[Download for Mac]を押すと、VSCodeのzipファイルがダウンロードできます。

VSCodeのダウンロードページ

ダウンロードしたzipファイルをダブルクリックすると、解凍結果としてVSCodeのappファイルが生成されます。

このまま起動しても良いですが、Macのお作法としてアプリ(.appが付いているファイル)は「アプリケーション」ディレクトリに置くのが一般的なので、後で探しやすくする意味でもそちらに移動しておきます。

VSCodeをアプリケーションディレクトリに設置

アプリケーションディレクトリに移動したappファイルをダブルクリックして、VSCodeを起動します。

VSCodeをアプリケーションディレクトリで起動する

VSCodeの拡張機能「Python」をインストール

以下の手順で拡張機能「Python」を検索します。

  1. VSCodeのウィンドウの左端に縦に並ぶ5つのアイコンの、一番下の四角い[拡張機能]アイコンをクリックします。
  2. 検索欄が表示されるので「python」と入力します。
  3. 作者が「MicroSoft」の「Python」を選択します。

VSCodeの拡張機能「Python」を選択する

拡張機能「Python」に関する情報が表示されるので、[インストール]をクリックしてインストールできます。

VSCodeに拡張機能「Python」をインストール

インストールが完了したら、[再読み込み]を押すと拡張機能が使用可能になります。

VSCodeに拡張機能「Python」を再読み込み

サンプルプログラムを作成する

例として、以下のプログラムsample.pyを使用します。冒頭のアニメーションと同一のものです。

def plus(x, y):
  print(f"{x} + {y} =")
  return x + y

a = "Hello"
b = " World!"
c = plus(a, b)
print(c)
c = plus(2, 3)
print(c)

まず、カレントディレクトリにsample.pyを作成します。

$ touch sample.py

sample.pyをVSCodeで開いて、上記プログラムをコピペして保存(Ctrl + S)します。

VSCodeでpythonプログラムを開く

ちなみに、このプログラムの出力結果は以下のようになります。

$ python sample.py
Hello +  World! =
Hello World!
2 + 3 =
5
$ 

プログラムをステップ実行する

メニューバーの[デバッグ] > [デバッグの開始]を選択する(もしくはF5を押す)と、プログラムが開始されて、その1行目(黄色いハイライト行)で処理が止まります。

VSCodeでPythonのデバッグの開始

ここでF10を押すと、1行ずつプログラムを実行できます。

以下はF10を数回押して10行目まで実行させた状態です。下部にあるデバッグコンソールには、プログラムのその行までにあるprint文が出力した結果が表示されます。

VSCodeでpythonをステップ実行して途中で止める

左端の[デバッグ]アイコン(上から4つ目の虫に斜線が引かれている)を押すと、宣言されている変数の一覧(変数a, b, cなど)が左側に表示されます。

また、右側のプログラム中の変数cの上にマウスポインタを置くと、これが現在5であることが確認できます。

VSCodeでpythonをステップ実行して途中の変数の中身を確認する

このようにしてステップ実行することで、プログラム実行途中での変数の状態を簡単に確認することができます。

ショートカットキーを用いたデバッグ

その他にも以下のショートカットキーを用いると、デバッグをより効率良く進めることができます。

ショートカットキー 名称 処理内容
F10 ステップオーバー 今いる行の次の行まで処理を進める
F11 ステップイン 今いる行にある関数の中に入る
shift + F11 ステップアウト 今いる関数を抜けるまで処理を進める
F5 続行 次のブレークポイント、もしくはプログラム終了まで処理を進める

冒頭のアニメーションの前半でも、これら4つのキーを使ってステップ実行をしています。

F11はMacのデフォルトの状態だと「デスクトップを表示」のショートカットキーとして設定されている場合があります。

以下の記事の方法でF11ステップインとして動作させることができます。

MacのVSCodeでステップインするショートカットキー周りの設定を変更する方法をまとめました。F11キーはVSCodeと重複して、MacOSのデフォルトで「デスクトップ表示」機能のショートカットキーとしても設定されていることが原因です。

ブレークポイントを用いたデバッグ

各行番号の左側をクリックすると、赤丸(ブレークポイント)が表示されます。

VSCodeでpythonプログラムにブレークポイントを設置する

これを設置することで、プログラムをF5(続行)で実行させたときに、以下のようにその行で処理を止めることができます。

VSCodeでpythonプログラムをブレークポイントで止める

冒頭のアニメーションの後半でもやっていますが、sample.pyの8行目のタイミングでは、変数cには‘Hello World!’が代入されていることが分かります。

まとめ

VSCodeでPythonプログラムをステップ実行するための環境構築の手順をまとめました。

ステップ実行ができると、プログラムの動きを把握しやすくなり、効率的にデバッグできます。

時にはprint文やログ出力のみでデバッグしなければならない場合もあります。しかしステップ実行ができる状況の場合は出来る限りその環境を構築した方が、初期コストはかかりますが、トータルするとプログラムの多くの不具合をより早くデバッグできます。