VS CodeでPythonプログラムを快適コーディング!:Visual Studio Codeで始めるPythonプログラミング(2/2 ページ)
IntelliSenseによるコード補完機能、Linterやフォーマッタなど、コード記述を快適にしてくれるVS Codeの機能を紹介。
統合ターミナルでのスクリプトファイルの実行
PythonコードをVS Codeで実行するには、幾つかの方法がある。アクティビティーバーで[デバッグ]アイコンをクリックして、サイドバーに[デバッグ]ビューを表示して、[デバッグの開始]ボタンをクリックするのが、一番正統なデバッグ実行の開始方法だ(これについては次回取り上げる予定だ)。だが、そうではなく「ちょっとコードを試したい」というときには、前回も紹介したコマンドパレットで[Python: Python ターミナルで選択範囲/行を実行]を選択する方法もある。これは、Pythonのソースコードの一部を試したい便利に使える。
もう1つ、コマンドパレットで[Python: ターミナルで Python ファイルを実行]コマンドを選択する方法もある。こちらは、VS Code内で統合ターミナルを開き、そこでpythonコマンドに現在編集中のファイルを指定する形で実行するものだ。以下に例を示す。
上の画像では、プロンプトの先頭に「(myenv)」とあり、仮想環境(myenv)でコードが実行されていることが分かる。VS Codeでは[Ctrl]+[@]キー(Windowsの場合。macOS/Linuxでは[Ctrl]+[`]キー=[Ctrl]+[Shift]+[@]キー)で統合ターミナルを開けるが、このときには現在のワークスペースで選択されているPython環境が有効にはならない。仮想環境を使用している場合には、自分で仮想環境を有効化するスクリプトを実行すればよいのだが、その一手間が面倒に感じられることもある。そこで、VS Codeでは、選択されているPython環境をあらかじめ有効化して、統合ターミナルを開いてくれるコマンドが用意されている。実際には、コマンドパレットで[Python: Create Terminal]コマンドを実行するだけだ。
今述べた2つのコマンドと[Python: Python ターミナルで選択範囲/行を実行]コマンドは、現在選択されているPython環境を自動で認識し、有効化してくれるので、覚えておくとよい。
Linterの設定とコード整形
Python拡張機能では、デフォルトでLint機能が有効化されている。このことは前回にも取り上げた通りだ。そのため、Python環境によっては以下のようなメッセージが表示されることも前回に述べた通りだ。
pylintをインストールしてもよければ、上のメッセージに対して[Install]ボタンをクリックすればよいし、pylintを無効化するなら[Disable pylint]ボタンをクリックすればよい。そもそもLint機能を無効化してしまってもよければ、[Disable linting]ボタンをクリックする。
Python拡張機能におけるLint機能関連設定は「python.linting」で始まる各種設定項目でコントロールできるようになっている。例えば、Lint機能の有効/無効はpython.linting.enabled項目で切り替える(true:有効、false:無効)。特定のLinterの有効/無効を切り替えるにはpython.linting.pylintEnabled項目(pylint)、python.linting.flake8Enabled項目(flake8)、python.linting.mypyEnabled項目(mypy)にtrue/falseを指定する。また、各Linterのオプションはpython.linting.<linter>〜項目で設定可能だ。設定項目については、settings.jsonファイル編集時のデフォルト設定に含まれるコメントを参照されたい。
Linterは複数利用することも可能だ。例えば、以下はpylintとmypyパッケージをインストールし、python.linting.mypyEnabled項目をtrueに設定した上で、型ヒント付きのコードを記述したものだ。
ここでは、hello関数は文字列(strオブジェクト)を受け取り、戻り値を返さないことが型ヒントにより示されているが、2つ目のhello関数呼び出しでは整数を渡しているためにエラーがあるとmypyにより報告がなされている。
また、VS Codeではコードの自動整形は言語ごとの設定を行わない限り、デフォルトの「editor.formatOn〜」項目に従う。例えば、editor.formatOnSave項目をtrueにしていれば、ファイルの保存時にコード整形が自動的に行われる(ファイルサイズが大きい場合のタイムアウト値をeditor.formatOnSaveTimeout項目で設定可能)。
Pythonコードの編集時も、上記の設定に従う。フォーマッタとしてはautopep8とyapfがサポートされていて、どちらを使用するかはpython.formatting.provider項目で指定する(デフォルトはautopep8)。以下に設定例を示す。
{
"python.formatting.provider": "autopep8",
}
Pythonとは無関係なところでコード整形を行うかどうかが決まることと、デフォルトでPythonコードの整形に使用するフォーマッタが指定されていることから、コード整形を行うつもりがないという場合でも、ファイル保存時やコード入力時に次のようなメッセージが表示されることがある。
[Install autopep8]ボタンをクリックすれば、autopep8が現在の環境にインストールされる。フォーマッタをyapfに切り替えるのであれば、[Use 'yapf' formatter]ボタンをクリックする。自動整形を行わないのであれば、上記の設定項目に"none"を指定すればよい。
なお、コード整形に限らず、Pythonについては既存の設定(editor.formatOnSave項目など)を上書きしたいといったときには、settings.jsonファイルでPython専用の設定を記述できる。
{
"[python]": {
"editor.formatOnSave": true,
}
}
本稿ではコードの記述をより快適に行えるようにするための機能を紹介してきた。IntelliSenseによるコード入力補完機能を使うことで、タイプ量が削減されるとともに、識別子やキーワードの入力ミスを減らすことができる。さらに、仮想環境を自動的に認識してくれる統合ターミナルを使うことで、ほんの一手間なのに面倒に感じられる操作が必要なくなる。また、Lint機能とコードの自動整形機能の活用は、早期にバグを発見したり、一定のフォーマットに従うことで可読性の高いコードを記述したりといったことにもつながるはずだ。
次回はPythonコードのデバッグ機能を取り上げる予定だ。
Copyright© Digital Advantage Corp. All Rights Reserved.