統合開発環境spyderを使ってpythonをプログラミングしよう

pythonのプログラミングをするとき、今までは「メモ帳」や「Mousepad」などのテキスト編集アプリを使って、pythonプログラムを作成し、コマンドラインでpython3 ファイル名と指定して、作成したpythonプログラムを実行し、プログラムがうまく動かなければ、またテキスト編集アプリでプログラムを修正するということを繰り返してきました。

でも、これってとても面倒です。また、プログラムがうまく動かなかった場合、その原因を調べるのも大変でした。

そこで、プログラミングの編集、実行、デバッグ(不具合を見つける)を同じアプリ上で行えるのが統合開発環境(IDE)と呼ばれるアプリです。

Pythonにもいろいろな統合開発環境がありますが、今回はspyderという統合開発環境を使ってみましょう。

spyderをインストールする

spyderはanacondaをインストールすることで、spyderもインストールされます。 anacondaのインストーラはこちらからダウンロードすることができます。 Windows版・Mac版・Linux版が用意されているので、自分のパソコンに合わせてダウンロードし、インストールしてください。

インストールのやり方がわからないときは、先生に聞いてください。

spyderを起動する

Linuxであれば、「アプリケーション」の「開発」のタブの中に「spyder」というアプリが入っているので、これを実行します。 Windowsの場合は、「すべてのアプリ」から「spyder」を選択してください。

アプリを起動すると下記のような画面が表示されます。

spyderの起動画面

新規ファイルを作成する

spyderの画面の左上にある「右端が折れている紙のアイコン」を押すと、新規ファイルが作成されます。

タイトル無しX.py(Xの部分には数字が入る)というタブで、新しくコード(Pythonプログラム)を書く部分が出てきます。

新規ファイル画面

この部分に新しい(Pythonプログラム)を書いていきます。

なお、作成した際には1行目から8行目まで自動的に作成されています。 これは、作成時のコメントなので、そのまま残してもよいですし、削除してしまっても構いません。

コード(Pythonのプログラム)を書いてみよう

まず、簡単なコード(Pythonプログラム)を書いてみましょう。

今回は、数字の100を出力するというコードを書いてみます。

画面に出力するにはprint()という関数を使うのでコードは以下のようになります。

print(100)

書いたプログラムを実行してみよう

コードを書いたら、一旦ファイルを保存してから実行するのが普通ですが、今回は保存せずに実行してみます。

コードを書き終えたら、画面上の「▶のアイコン」を押してください。

プログラムが実行され、下記のように、画面右下の「コンソール」の部分に実行結果の100が表示されます。

実行画面

書いたプログラムをファイルに保存する

コードをファイルとして保存しましょう。

画面上の左から3番目の「1個のファイルのアイコン」を押すと「ファイルを保存」のダイアログが表示されるので、ファイルを格納したい場所に、好きな名前でファイルを保存してください。 ただし、ファイルの最後には必ず.py(Pythonのファイルである印)を付けてください。

プログラムをデバッグしてみよう

書いたコードが正しく動くようにチェックすること(または正しく動くように修正すること)を「デバッグ」といいます。 デバッグにはいろいろな方法がありますが、spyderにはコードを変更しなくても簡単にデバッグできる機能があります。

サンプルプログラム

デバッグするサンプルプログラムを以下のように作成し、test.pyという名前でファイルに保存します。

def summary(x, y):
	result = x + y
	return result
	
a = 10
b = 20

print("Answer is {}!!!".format(summary(a, b)))

今回、自動的に付与されるコメントは全て削除してください。

このプログラムを実行すると右下のコンソール画面にAnswer is 30!!!が表示されます。

デバッグモードで実行する

次に、このサンプルプログラムをデバッグモードで実行してみます。

デバッグモードで実行するには、画面上の「▶||のアイコン」をクリックします。

すると、以下のような画面が表示されます。

デバッグ画面

左側の編集画面のプログラムの先頭部分に以下のように矢印が表示されます。

→	def summary(x, y):
		result = x + y
		return result  

	a = 10
	b = 20
	
	print("Answer is{}!!!".format(a, b)))

デバッグモードを開始すると、プログラムの先頭部分でプログラムが一旦停止します。 矢印は今プログラムが停止している位置になります。

1ステップ(1行)実行する

停止している位置から1行だけプログラムを進めてみましょう。

1ステップ(1行)だけ実行するには、画面上の「→アイコン」(実際は曲線の矢印の下に・が書かれているアイコン)をクリックします。

すると矢印がa = 10の位置まで移動します。

def summary(x, y)というのは関数のため、最初は何も実行されずスキップされます。 したがって、最初に実行されるのはa = 10になり、ここに矢印が移動します。

次に、もう一回1ステップ実行を押すと、矢印がb = 20に移動します。

変数エクスプローラで変数の値を確認する

ここで、右上の画面(コンソール画面の上の画面)の下のタグを「プロファイル」から「変数エクスプローラ」に変更してみましょう。 「変数エクスプローラ」というタグをクリックします。

すると右上の画面が以下のように変わります。

変数エクスプローラ画面

名前が変数名、型が変数の型、サイズが変数の大きさ、値が変数の値になります。

「a = 10」を実行したことで、「a」という変数に「10」という値が設定されたことがわかります。

もう一回1ステップ実行を押すと、「b = 20」が実行され、変数エキスプローラに「変数b」が追加され、値が「20」に設定されています。

関数の中に入ってステップ実行する(ステップイン)

現在は矢印がprint("Answer is{}!!!".format(a, b)))に移動しています。

ここで1ステップ実行を行うと、この行全体が実行されてしまいます。 それでは、関数summaryでどのような処理が行われているかわかりません。

関数の中に入ってステップ実行するためには画面右上の「↓アイコン」(実際は矢印の下に・が書かれているアイコン)をクリックします。

そうすると、関数def summary(x, y)に矢印が移動します。

右側の変数エキスプローラを見ると、「変数x」と「変数y」が追加され、それぞれ「変数a」の値「10」と「変数b」の値「20」が設定されていることがわかります。

関数に入ったら、通常通り1ステップ実行を行えば、関数内で1行ずつプログラムが実行されます。 1ステップ実行を2回実行し、return resultまで矢印を移動すると、「変数result」に「x + y」の「30」が設定されているのがわかります。

関数から抜けて関数呼び出し位置に戻る(ステップオーバー)

関数の中からもとの関数呼び出し位置に戻るためには、「↑アイコン」(実際は矢印の下に・が書かれているアイコン)をクリックします。 すると、矢印がreturnの位置に即座に移動します。 もう一度「↑アイコン」をクリックすると、関数を呼び出した位置に戻ることができます。

関数の呼び出し位置に戻ったので、コンソールにAnswer is 30!!!が表示されます。

なお、関数内だけで使われていた「変数x」「変数y」「変数result」は、変数エクスプローラから消えています。

次に1ステップ実行を実行するとプログラムが終了し、1ステップ実行アイコンが「目覚まし時計のアイコン」に変わります。

なお、この「目覚まし時計のアイコン」は、プログラムの実行時間を測定するためのアイコンで、このアイコンをクリックすると、プログラムを最初から実行し、プログラム全体や、各関数の実行速度を計測して、プロファイラ画面(画面右上、変数エクスプローラが表示されていた画面)に結果を表示します。

ブレークポイントを設定する

プログラムの途中の部分の実行状況(変数の値、条件文の処理状況など)を確認したい場合とか、ある関数の処理内容だけデバッグしたいときなどのとき、その位置に到達するまで毎回ステップ実行やステップイン実行を行うのはとても面倒です。

こういう場合、デバッグを開始したい位置にブレークポイントを設定し、ブレークポイントまで実行し、ブレークポイントで一旦停止させることができます。

ブレークポイントを設定するには、左側のプログラム編集画面のプログラム行数を示す数字の部分にマウスのカーソルを移動します。 すると、カーソルの位置の数字の後ろに「赤い丸」が表示されるので、ブレークポイントを設定したい行をクリックします。 「赤い丸」がその行に設定され、ブレークポイントが設定されます。

ブレークポイントは1つだけではなく、いくつでも設定できます。

ブレークポイントを設定した画面は以下のように表示されます。

ブレークポイント画面

ブレークポイントまで実行する

ブレークポイントが設定されると、デバッグ実行を開始したらプログラムの先頭ではなく、設定されたブレークポイント(複数設定されている場合は、最初に到達するブレークポイント)まで移動し、ブレークポイントの行の実行直前で一旦停止します。

ここで、変数の値を確認したり、ステップ実行を行ったりして、デバッグを行います。

複数ブレークポイントを設定している場合など、次のブレークポイントまで実行するには、「▶▶のアイコン」をクリックします。

例えば、ループの中にブレークポイントを設定したり、関数の中にブレークポイントを設定すると、ブレークポイントを解除しないかぎり、毎回同じブレークポイントで止まります。(ブレークポイントは1回限りではありません)

なお、ブレークポイントを途中で解除するには、ブレークポイントの「赤い丸」をもう一度クリックします。

デバッグの終了

デバッグを途中で終了したい場合は、画面上の「■のアイコン」をクリックすると、デバッグは終了します。

まとめ

spyderにはpythonプログラムを作成・実行・デバッグするための機能が備わっています。 紹介した機能以外にも、様々な便利な機能があるので、興味のある人はドキュメントやチュートリアルを使って学習してください。