Visual Studio Code(VSCode)とPython

13 min read読了の目安(約12000字

概要

Visual Studio Code(以下VSCode)でPython開発時の拡張機能(解析、Notebook、コード整形、デバッグなど)について説明します。

以下記事を抜粋し表現を修正。

https://qiita.com/tfukumori/items/9f895f51baeaf31cb971

導入する拡張機能

  • Python(ms-python.python)
  • Pylance(ms-python.vscode-pylance)
    • Pyrightの後継。PyrightのGithubでもPylanceの使用が推奨されている
  • Visual Studio Intelicode(visualstudioexptteam.vscodeintellicode)
  • Jupyter(ms-toolsai.jupyter)
    • 他の拡張機能と同時にインストール
  • Python Docstring Generator(njpwerner.autodocstring)
  • GitLens(eamodio.gitlens)
  • Git Graph(mhutchie.git-graph)
  • TensorFlow Snippets(vahidk.tensorflow-snippets)
    • TensorFlowを利用した機械学習を行う場合

主な機能


(1) インテリセンス

https://code.visualstudio.com/docs/python/editing#_autocomplete-and-intellisense
  • オートコンプリート
  • 定義の参照(F12)、その場で定義を参照(ALT + F12
  • 定義を使用している個所を参照(右クリックメニューから選択)
  • importエラー時に該当するimportを挿入する
    pylanceの機能。
  • 必要に応じて型チェックを有効化することができる(python.analysis.typeCheckingMode
    pylanceの機能。@simonritchie さんの記事も参照
    既定値は無効(off)
    プロジェクトに応じて型チェックの必要性は変わります。プロジェクトメンバーで協議し統一することが大事です。
    設定値 動作
    off 型チェックは行われない(未解決のインポート/変数診断に関するチェック)
    basic offのルールに加えて基本的な型チェック(型アノテーションがしてある箇所で正しいかどうか)
    strict off,basicに加えて厳格な型チェック(型アノテーションなどがしていない箇所自体もエラーになる)

(2) 仮想環境の切り替え

https://code.visualstudio.com/docs/python/environments

プロジェクトフォルダ直下に仮想環境フォルダを作成することで、.pyファイルを開いたタイミングで仮想環境を自動認識して切り替わります。

💡 仮想環境フォルダ名には.venvが良く使われます。
💡 画面の左下で確認できます。

image.png


(3) Jupyter Notebooksのサポート (Jupyter Notebook UI)

https://code.visualstudio.com/docs/python/jupyter-support

Jupyter NotebooksをVSCode上で行うことができます。

  • VSCode上でJupyter NotebookのUIを実行できる
  • 以下のコマンドでJupyter Notebookを作成できる
    >Create New Blank Jupyter Notebook
    image.png

実行サンプル

image.png


(4) インタラクティブウインドウ (# %%)

https://code.visualstudio.com/docs/python/jupyter-support-py

誤解を恐れずに言うと、Jupyter Notebooksのような動きを.pyファイルで行うことができます。つまり逐次動作を確認しながら、.pyファイルを作成することができる機能となります。

  • .pyファイルに、# %%を入力することで、PythonファイルをNotebookのようにセルを作って逐次実行することができる。
  • "Shift + Enter "でセルが実行され、結果が表示される
  • # %%はコメントなので.pyファイルの直接実行時には無視される

実行サンプル

image.png


(5) コードの静的解析(リンター)

https://code.visualstudio.com/docs/python/linting

文法チェック、使用していない変数の確認などを行うことができます。

Python: Select Linterを実行して、コードの静的解析(リンター)を選択します。特に問題のない限り既定のPylintでよいと思われます(Flake8 なども選択できます)。

💡 VSCodeのPythonは、最も多くのPython開発者に対してわかりやすい一連の文法チェックを使用するように既定で構成されています。

選択したリンターがインストールされていない場合は、プロジェクトの仮想環境にリンターが自動でインストールされます。

実行サンプル

image.png


(6) コード整形(フォーマッター)

https://code.visualstudio.com/docs/python/editing#_formatting

pip で black をインストールし、コード整形(フォーマッター)のProviderとして設定します。

整形の規約としては、autopep8, black, yapf の 3 種類あります。
black が一番厳しい規約のため仕事として行うならば black が望ましいと思われます。(誰でも同じような書式としてフォーマットされます。)

💡 "ALT + SHIFT + F"で整形できます。

手順

方法1

  1. .pyファイルを開いて、"ALT + SHIFT + F"を実行

  2. ダイアログで"Use black"を選択

    image.png

方法2

  1. blackをpipでインストールする

    pip install black
    
  2. 設定で有効にする

    設定でpython.formatting.providerを検索し、blackを設定
    image.png


(7) デバッグ

https://code.visualstudio.com/docs/python/debugging

アクティビティバーで実行ビューを選択し、構成の初期化とlaunch.jsonファイルの作成を行い、実行ビューから実行することでデバッグできます。

Django, Flusk, 単体.pyファイルの実行などの構成ファイル(launch.json)が用意されています。

image.png

手順(単体.pyファイル)

💡 引数が必要な場合などはlaunch.jsonファイルのカスタマイズが必要です。

  1. デバッグする.pyファイルを開く

    image.png

  2. アクティビティバーで実行ビューを選択し「実行とデバッグ」を実行

    image.png

  3. 「Python File」を選択

    image.png

  4. デバッグできる

    ブレークポイントで止まった時の例
    image.png

    捕捉されなかった例外(Uncaught Exception)が発生したとき
    image.png

launch.jsonファイルのカスタマイズ例

現在のプロジェクトディレクトリ(${workspaceFolder}) でmain.pyファイルを起動するために設定された Python インタプリタを使用する場合の例です。args[]配列にコマンドライン引数を追加したり、env[] 配列を追加して環境変数を追加することもできます。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",  
    "configurations": [  
        {  
            "name": "Python: tornado",  
            "type": "python",  
            "request": "launch",  
            "program": "${workspaceFolder}/main.py",  
            "args": [],  
            "console": "integratedTerminal"  
        }  
    ]  
}

(8) テスト

https://code.visualstudio.com/docs/python/testing

Python 組み込みの unittest、または pytest を使用したテストをサポートしています。

テストが検出されると、アクティビティバーのテストエクスプローラーアイコンも表示されます。テストエクスプローラーで、テストを視覚化、移動、および実行することができます。

手順

  1. F1キーからコマンドでPython: Discover Testsを実行

    image.png

  2. フレームワーク有効確認のダイアログが表示されるので選択

    image.png

  3. 使用するフレームワークを選択(基本的にはunittestでOK)

    image.png

  4. テストコードが保存されたフォルダを選択

    image.png

  5. テストコードファイルのファイル名パターンを指定

    image.png

  6. アクティビティバーのテストエクスプローラーにテストが表示される

    image.png

  7. すべての単体テストを実行

    image.png

  8. 単体テストの出力を表示

    image.png

    start
    test_unittest.Test_TestIncrementDecrement.test_decrement
    test_unittest.Test_TestIncrementDecrement.test_increment
    test_decrement (test_unittest.Test_TestIncrementDecrement) ... FAIL
    NoneType: None
    test_increment (test_unittest.Test_TestIncrementDecrement) ... ok
    
    ======================================================================
    FAIL: test_decrement (test_unittest.Test_TestIncrementDecrement)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "c:\Users\fukumori\source\repos\pythontest\test_unittest.py", line 10, in test_decrement
        self.assertEqual(inc_dec.decrement(3), 4)
    AssertionError: 2 != 4
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    FAILED (failures=1)
    
  9. 「Deubg Test」からデバッグを行う

    image.png


(9) リファクタリング

https://code.visualstudio.com/docs/python/editing#_refactoring

PyCharm に比べると種類は少ないですがリファクタリングがサポートされています。

  • 変数の抽出
    選択したテキストの類似したすべての出現箇所を抽出し、変数に置き換える
  • メソッドの抽出
    選択した式またはブロックの類似したすべての出現箇所を抽出し、メソッド呼び出しに置き換える
  • インポートの並べ替え
    同じモジュールからの特定のインポートを 1 つのステートメントに統合し、ステートメントをアルファベット順に整理する

(10) 関数の説明(Docstring)を自動生成

https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring

関数定義にDocstringを記載するとVSCodeのコーディング中に関数の説明が表示されます。

Docstringの書式統一のためにも、Docstringの記載をある程度自動化する手順を紹介します。


引用元:https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring

手順

  1. 関数宣言の直下で"""を入力するとGenerate docstringという入力支援が表示されます。
  2. 選択またはEnterでDocstringが自動的に挿入されます。引数が指定されている場合は引数名も自動挿入されます。

(11) TensorFlow Snippets

https://marketplace.visualstudio.com/items?itemName=vahidk.tensorflow-snippets

Visual Studio CodeでTensorFlowモデルを開発する際に有用なSnippetsとなります。

下記画像にあるように、tensorboardも含めた基本的な学習用スクリプト作成を効率的に行うことができます。


引用元:https://marketplace.visualstudio.com/items?itemName=vahidk.tensorflow-snippets


PyCharm

稟議を通せるなら有償のパッケージを購入することもお勧めです。

環境構築の手間がなくプログラミングそのものに集中できます。


参考資料