VS codeでpython3の実行(windows10)

みなさんVS code(Visual Studio Code)使ってますか？
僕はSublimeとAtomのいいとこどりをしたようなUXが好きで普段から多用しています．
これまでもやろうやろうと思っていてなかなかできていなかったVS codeでのpythonのデバッグというものをやっていくついでに情報の共有ができればと思います．
(とりあえず公式がpython3に準拠しているっぽいのでまずはpython3でデバッグできるようにしようと思いますが，行く行くはpython2でもデバッグできるようにしようと思っています．)

できるだけプログラミングをやったことがない人でもわかるように書いていこうと思いますので質問や編集リクエストは遠慮なさらずに送ってください．

基本的に[公式サイト](https://code.visualstudio.com/docs/python/python-tutorial#_configure-and-run-the-debugger "Visual Studio Code")に則って説明していきます．（適宜説明を追加したり省いたりしています）

# 準備
## VS側の準備
まずは[Visual Studio Code](https://code.visualstudio.com/)のダウンロード＆インストールを済ませておいてください．
VS codeのインストールが済んだらまずはこちらのpython extensionをインストールします．
図の矢印で示した部分をクリックしてもらうと拡張機能の検索ができるので検索ボックスに"python"と入力して一番上にある公式のPython Extensionをインストールしてください．インストールが終わったら再読み込みをしてください．
![python extension install.png](https://qiita-image-store.s3.amazonaws.com/0/184862/5ef04f87-caaa-63a9-0756-a04012edf47b.png)

## Pythonの準備
### Pythonのインストール
次にpythonのインストールを行ってください．僕はいつも[Anaconda](https://www.anaconda.com/download/ "Anacondaダウンロード")をインストールしています．（Warningは出ますがその際にPATHも通しています．）
Anacondaのインストール方法はダウンロードしてインストーラーを実行して"Next"をカチカチしていくだけなのですが，この説明だけじゃわからないというかたは[こちらのサイト](https://pythondatascience.plavox.info/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-windows "Anaocndaインストール")を参考にされてください．
(Anacondaは入れたくないという方は自力でpythonのインストールをお願いします．)
### pythonパスの確認
コマンドプロンプトを実行してpythonコマンドを実行してインタプリタが起動すればpython.exeのパスが通っている証拠です．
通ってないですという方は[こちら](https://qiita.com/t2y/items/2a3eb58103e85d8064b6)を参考に以下の手順でPATHを通してください．
"コントロールパネル"=>"システムとセキュリティ"=>"システム"=>"設定の変更"=>"詳細設定"=>"環境変数"

# フォルダとソースコードの作成
それではいよいよソースコードを作っていこうと思います．
まずはお好きな場所に"python_sample"というフォルダを作ってください．
そして左上の"ファイル"から"フォルダを開く"を選んでたった今作った"python_sample"フォルダを開いてください．
すると下の図のような状態になると思いますので，赤丸で囲まれた"新しいファイル"を選択してください．
![vscode_python_dir.png](https://qiita-image-store.s3.amazonaws.com/0/184862/b48d84db-0097-98e6-10b6-501d47377d74.png)
するとファイル名を入力する画面になると思いますので"hello.py"と入力してEnterを押してください．
すると下の図のような状態になると思います．
![vscode_python_hello.png](https://qiita-image-store.s3.amazonaws.com/0/184862/af11d788-dc0f-1c25-1bef-c19ae094ff72.png)
（ちなみに僕は"VSCode Great Icons"という拡張機能をインストールしているのでファイルの横のアイコンがデフォルトと違っていますがあまり気にしないでください．）

それでは`hello.py`中に以下のコードを入力してください．

```python:hello.py
msg = 'Hello World'
print(msg)
```

入力途中の画面が以下のようになるのですが，`print`を入力する途中で下に候補が出てくると思います．これは[Intellisense](https://code.visualstudio.com/docs/editor/intellisense)という機能で図のように`print`のような構文として登録されているものを入力すると補助してくれるものです．
下の図の状態でTABキーを入力すると補完してくれます．
![vscode_python_hello_intellisense.png](https://qiita-image-store.s3.amazonaws.com/0/184862/019feb81-8107-09ed-b8f0-fa606461354e.png)
入力完了後（これまた僕は"blackai-theme"というテーマをインストールしているので文字の色がデフォルトとは違いますがお気になさらずに）
![vscode_python_hello2.png](https://qiita-image-store.s3.amazonaws.com/0/184862/8916961c-f000-f75f-6fa4-ded0e180dc1a.png)
この段階で`hello.py`を`Ctrl+S`で保存します．

# 実行
それでは先ほど作成したファイルを実行していきましょう．
まずは`Ctrl+Shift+P`（同時押し）で"コマンドパレット"というものが開くので`python select interpreter`を検索します．
![vscode_python_interpret.png](https://qiita-image-store.s3.amazonaws.com/0/184862/f00434a2-c0c3-f86d-a43c-d500db129627.png)
そしてAnacondaが選ばれていることを確認します．
![vscode_python_interplet_anaconda.png](https://qiita-image-store.s3.amazonaws.com/0/184862/44f099b7-e231-7394-cdbd-8e993b0e2495.png)
確認がとれたらhello.py上で右クリックして"ターミナルでPythonファイルを実行"をクリックします．
![vscode_python_hello_run.png](https://qiita-image-store.s3.amazonaws.com/0/184862/d710a169-1eab-fce9-a258-956ea61cce71.png)
すると下の図のようにVScode下部にターミナルが開かれて`Hello World`という記述があると思います．
これにて実行は成功です．
![vscode_python_hello_result.png](https://qiita-image-store.s3.amazonaws.com/0/184862/de35fe7f-e446-e9ba-4c98-2a765ef1a801.png)

# デバッグ
ここからはVS code内でデバッグする方法について説明していこうと思います．
まず`print(msg)`と書かれた行の行番号の左側にマウスポインタを持っていきます．
すると下の図の黄色の矢印で示された部分にあるように薄い赤丸が現れると思いますのでそこをクリックしてください．
これがブレークポイントと呼ばれる上から順に実行していくときにそこで一旦停止するための目印になります．
(`print(msg)`の行にカーソルを持ってきて`F9`をクリックすることでもブレークポイントを置くことができます．)
![vscode_python_break_point.png](https://qiita-image-store.s3.amazonaws.com/0/184862/39e3ee72-ac26-7c34-68aa-acf52a6416df.png)
次に，上の図の赤枠で示された虫にバツマークがついたようなアイコンをクリックしてください．
すると下の図のような画面になりますので赤枠で示された設定用ボタンをクリックしてください．
![vscode_python_debug_config.png](https://qiita-image-store.s3.amazonaws.com/0/184862/750aabab-cdad-344e-e89b-33fa25b083ab.png)
すると以下のような画面になるので上の"Python"の方を選択してください．
![vscode_python_debug_config_python.png](https://qiita-image-store.s3.amazonaws.com/0/184862/7c6f2ea0-5fbf-9c3e-1de1-881b0be3055c.png)
以下の画面になると思います．この`launch.json`というのは設定がいろいろ書いてあるファイルだと思ってください．
![vscode_python_debug_config_json.png](https://qiita-image-store.s3.amazonaws.com/0/184862/c39a790c-6955-a6f9-6580-4feb91c7b52d.png)
それではこの上の図で黄色い枠で囲まれた部分に以下の一文を追加します．この時`"program": "${file}"`のあとにカンマを入れるのを忘れないようにしてください．

```json:launch.json
"stopOnEntry": true
```

書き換えるとこのような感じです．
![vscode_python_debug_config_json_modified.png](https://qiita-image-store.s3.amazonaws.com/0/184862/f49f2d9e-ec93-648e-b511-8843e5e29fbd.png)
それではこの`launch.json`ファイルを`Ctrl+S`で保存して`hello.py`に戻ります．
戻ってから`F5`を押します．
すると以下のような画面になります．
![vscode_python_hello_debug.png](https://qiita-image-store.s3.amazonaws.com/0/184862/0025630d-7100-bda0-f60f-96c488975c67.png)
上の図で黄色い矢印で示されている行が次に実行する行になります．今，1行目になっていると思いますがこれは先ほど`launch.json`ファイルに`"stopOnEntry": true`を追加したためで，この一文を追加しない，または`true`ではなく`false`を入力した場合にはブレークポイントが設定されている2行目に黄色い矢印が表示されます．
ここで`F5`または`F10`をクリックしてください．すると次の行に黄色い矢印が移動すると思います．これで1行目が実行されたことになります．
ちなみに`F5`と`F10`の違いは`F5`が次のブレークポイントもしくは最後まで実行するのに対し，`F10`は黄色い矢印を指している行のみを実行します．なので，2行目にブレークポイントを設定せずに`F5`を押すと，最後まで実行されて実行が終了します．
ここまでを実行すると以下の図のような状態になると思います．
![vscode_python_hello_debug_msg.png](https://qiita-image-store.s3.amazonaws.com/0/184862/35669510-ecf3-1141-c63a-eb483abcf8e6.png)
図の左側の赤枠の部分を見ると`msg:'Hello World'`となっていますね．このことから今，`msg`という変数が`'Hello World'`という値を持っているということがわかります．
もしここで`'Hello World'`が間違っているとしたらコードのほうにバグがあるということになります．コードの中で`e`が`a`になっていたりしないか確認してください．
それではこの状態で`F10`もしくは`F5`を押してみましょう．
ここではどちらのファンクションキーを押すかによって動作が変わってきます．先ほども説明した通り`F10`は黄色の矢印で示された行だけを実行しますので，2行目を実行した後，実行を終了するところまではいきません．一方`F5`を押すと最後まで実行されますので，実行が終了してしまいます．今回の場合ですと2行目が最後の行にあたるので`F10`を2回押すのと`F5`を1回押すので同じ動作をします．
以下の図のうち1枚目が`F10`を1度押した状態，2枚目が`F5`を1度押す，もしくは`F10`を2度押した状態になります．
![vscode_python_hello_debug_F10.png](https://qiita-image-store.s3.amazonaws.com/0/184862/8da2d532-029c-9ad6-5214-823976190dc2.png)

![vscode_python_hello_debug_F5.png](https://qiita-image-store.s3.amazonaws.com/0/184862/708b1d05-3df2-c8a4-28ad-0993e2b95678.png)
どちらの図においても赤枠で囲まれた部分を見てわかるように`msg`の中身である`'Hello World'`がターミナルに出力されているのがわかります．
これにてこの`hello.py`プログラムの実行は終了となります．
以上の操作によってコード中の好きなところにブレークポイントを置いて`F5`を押して実行したり，`F10`を押していって1行ずつ実行していったり(ステップ実行といいます．)していくことで変数の値を確認しながら実行することができるのでデバッグを行うことができます．

以上でVS codeでpython3のコードを実行する方法と，そのデバッグ方法の簡単な説明を終わりにします．
より詳細なデバッグ方法について[公式サイト](https://code.visualstudio.com/docs/python/debugging "Debugging Python with VS Code")にも載っていますのでそちらの解説記事も書き上げたら投稿したいと思います．