COBAKURA.COM

Python toxを使ってテストやリンターを一括実行する

toxというツールを使ってテスト、リンター、フォーマッターを一括実行できるようにする方法です。

以下は、blackisortflake8を使う例。

tox.ini
[tox]  # global settings.
envlist = py310, black, isort, flake8

[testenv]  # 全ての環境に継承される (上書きされない限りはこの設定が使われる)
deps = -r src/requirements/dev.txt

[testenv:black]
# See pyproject.toml
deps = black
commands =
	# コードチェックのみを行う(自動フォーマットはしない)。フォーマットされる箇所を色付きで表示する。
	black {posargs:src/} --check --diff --color

[testenv:isort]
# See pyproject.toml
deps = isort
commands =
	isort {posargs:src/} --diff --check-only

[testenv:flake8]
deps = flake8
commands =
	flake8 {posargs:src/}

[flake8]
max-line-length = 88
exclude = requirements, migrations, proj, node_modules

pyproject.toml を作り、blackとisortの設定を書く。

pyproject.toml
[tool.black]
line-length = 88
target-version = ['py310']
exclude = '''
/(
    | migrations
)/
'''

[tool.isort]
profile = "black"
skip = ["migrations", "venv", ".tox"]

最後に Makefile を作り、コマンドを登録する。

Makefile
tox:
	tox --parallel

# 新しいパッケージを入れた時
tox-r:
	tox -r

# コードを自動フォーマット
black:
	# See pyproject.toml
	black src/

# import文を入れ替え
isort:
	# See pyproject.toml
	isort src/

# tox.iniの設定でflake8を実行
flake8:
	# See tox.ini
	tox -e flake8