vscodeのTaskを使ってLinterやUnitTestを動かす
このエントリでは、vscodeのTask機能を使って、
LinterやUnitTestを少しの手間で動かせるようにする設定手順を示します。
Pythonのプロジェクトに、
ruff(formatter), flake8(linter), pytest(unittest)
を導入する流れを説明しますが、他の言語でも同じような流れになると思います。
作業ディレクトリの準備
対象プロジェクトの作業ディレクトリを用意します。
(この項目はvscode関係ありません)
Python用のリポジトリを作る
ディレクトリを作って、Python仮想環境を用意します。
mkdir vscode-tasks-study && cd $_
python -m venv venv
. venv/bin/activate
コード・テストを追加する
pytestのインストール、対象コード・テストコードを用意します。
pip install pytest
pip freeze > requirements.txt
module/main.py
def func_foo():
return True
tests/test_main.py
import main
def test_main():
assert main.func_foo()
pytest.ini
[pytest]
testpaths = tests
pythonpath = .
pytestのテストの動作確認をします。
pytest
formatter(ruff)を追加する
formatter(ruff)を追加します。
pip install ruff
pip freeze > requirements.txt
ruffの動作確認をします。
ruff format .
linter(flake8)を追加する
linter(flake8)を追加します。
pip install flake8
pip freeze > requirements.txt
setup.cfg
[flake8]
exclude = venv
flake8の動作確認をします。
flake8
タスクを定義する
それでは、vscodeにTask定義を追加していきます。
各タスクの定義
ruff(formatter), flake8(linter), pytest(unittest)用の定義を追加します。
.vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "ruff",
"type": "shell",
"command": "venv/bin/ruff format ${relativeFile}",
"problemMatcher": [],
"presentation": {"reveal": "silent", "close": true},
},
{
"label": "flake8",
"type": "shell",
"command": "venv/bin/flake8 ${relativeFile}",
"problemMatcher": ["$flake8"],
"presentation": {"reveal": "silent", "revealProblems": "onProblem", "close": true},
},
{
"label": "pytest",
"type": "shell",
"command": "venv/bin/pytest ${relativeFile}",
"problemMatcher": [],
"presentation": {"reveal": "always", "clear": true},
"group": {"kind": "test", "isDefault": true}
},
],
}
設定方法や各項目の意味は、次のサイトを参照してください。
参考: Integrate with External Tools via Tasks | Visual Studio Code
https://code.visualstudio.com/docs/editor/tasks
参考: Schema for tasks.json | Appendix | Visual Studio Code
https://code.visualstudio.com/docs/editor/tasks-appendix
ここまでの設定で、
Ctrl+Shift+P → 「Tasks: Run Task」
から、各タスク(ruff,flake8,pytest)を呼び出せるようになります。
onsaveでの実行 (formatter, linter)
ruff(formatter), flake8(linter)は、
ファイル保存時に自動実行できると便利なので、その対応を行います。
vscode標準で対応できないので、以下の拡張をインストールします。
Trigger Task on Save | Gruntfuggly | VisualStudio Marketplace
https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.triggertaskonsave
インストール後、次の設定を追加すると、
pythonファイル保存時に、自動でruff/flake8が動くようになります。
また、flake8で問題がある場合は「PROBLEMS」が開いて問題箇所の指摘が表示されます。
.vscode/settings.json
{
"triggerTaskOnSave.tasks": {
"ruff": [
"*/*.py",
],
"flake8": [
"*/*.py",
],
}
}
ショートカットキーの設定 (unittest)
最後に、pytestの実行ステップがちょっと面倒なので、
ショートカットキーの設定を行います。
Ctrl+Shift+Pでコマンドパレットを開き、
「Preferences: Open Keyboard Shortcuts(JSON)」を実行すると、
キーボードショートカットの設定ファイルが開くので、次のように指定します。
[
{
"key": "Shift+Ctrl+F11",
"command": "workbench.action.tasks.test",
},
]
この設定を行った後、tests/test_main.py
を開いて「Shift+Ctrl+F11」でpytestが実行されるようになります。
以上。