[OSS紹介#56] tox:Pythonプロジェクトのテスト環境管理を効率化するツール

この記事について

この記事では、開発者が効率的に作業を進めるための重要なオープンソースソフトウェア「tox」を紹介します。この記事は、シリーズ第56回にあたります。

ソフトウェア開発においては、プロジェクトが進むにつれて、さまざまなツールやライブラリを用いてテストやビルドを行う必要があります。これらの作業を管理し、効率的に実行することは、開発者にとって不可欠です。特に、異なるPythonのバージョンやライブラリとの互換性を保ちながらテストを行うことは、しばしば困難を伴います。

「tox」は、こうした課題を解決するために開発された環境オーケストレーターであり、プロジェクトのテストや環境構築を自動化するための強力なツールです。このツールを利用することで、開発者は簡単にテスト環境を構成・実行できるようになり、従来の手動作業に伴うエラーを軽減し、作業の効率を向上させることが可能になります。この記事では、特に「tox」の基本機能や設定方法について詳しく解説し、その利用の意義を探ります。

リンク:https://tox.wiki/en/latest/user_guide.html


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. toxでできること

toxは、環境のオーケストレーションツールです。プロジェクトに必要なさまざまなツールを設定し、実行するために使用します。toxは、以下の環境を設定し、実行することができます。

  • テストランナー(例:pytest)
  • リンター(例:flake8)
  • フォーマッター(例:blackやisort)
  • ドキュメント生成ツール(例:Sphinx)
  • ビルドおよび公開ツール(例:buildとtwine)

これにより、複数のPythonバージョンや依存関係の構成に対して、Pythonパッケージのテストを自動化し、煩雑なテスト関連の作業を効率化します。

2. セットアップ手順

toxを使用するには、まず環境を整える必要があります。以下は、toxのインストールと設定方法です。

toxのインストール
toxはCLIツールであり、Pythonインタプリタ(バージョン3.9以上)が必要です。toxを特定の環境でインストールすることをお勧めします。以下は、インストール方法のいくつかです。

  • pipxを使用する場合
python -m pip install --user pipx
pipx install tox
tox --help
  • uvを使用する場合
uv tool install tox
tox --help
  • pipを使用する場合(推奨されていません)
python -m pip install --user tox
python -m tox --help

動作環境としては、toxはCPython 3.9以上を要求しますが、2.7以降の環境を作成することも可能です。

  • toxの設定

toxでは、ツールを実行するための設定ファイルが必要です。tox.tomlまたはtox.iniというファイルを作成し、実行するツールとテスト環境のプロビジョニング方法を定義します。

以下は、tox.htmlの基本的な例です。

[tox]
requires = ["tox>=4"]
env_list = ["lint", "type", "3.13", "3.12", "3.11"]

[env_run_base]
description = "run unit tests"
deps = [
    "pytest>=8",
    "pytest-sugar"
]
commands = [["pytest", { replace = "posargs", default = ["tests"], extend = true }]]

[env.lint]
description = "run linters"
skip_install = true
deps = ["black"]
commands = [["black", { replace = "posargs", default = ["."] , extend = true}]]

以下は、tox.iniの基本的な例です。

[tox]
requires = tox>=4
env_list = lint, type, 3.1{3,2,1}

[testenv]
description = run unit tests
deps =
    pytest>=8
    pytest-sugar
commands =
    pytest {posargs:tests}

[testenv:lint]
description = run linters
skip_install = true
deps =
    black
commands = black {posargs:.}

3. 簡単な使い方

toxを設定したら、コマンドラインから実行してみましょう。以下は、toxを使用する際の基本的なコマンドです。

全てのtox環境を実行する

tox

特定の環境を実行する

tox -e py310

複数の環境を実行する

tox -e format,py310

環境を並列に実行する

tox parallel -e py39,py310

このように、toxはテスト環境の設定から実行までを簡潔に行うことができます。各環境の実行結果は、コマンドの実行後にレポートとして出力されます。

結論

toxは、Pythonプロジェクトにおけるテスト環境の管理を効率化する強力なツールです。テストランナーやリンター、フォーマッターなど、さまざまなツールを簡単に設定し、実行できるため、開発者にとって非常に便利です。特に、複数のPythonバージョンに対応したテストを自動化できる点は、大きな利点と言えます。環境の設定や実行がシンプルであるため、開発者は本来の作業に集中しやすくなります。是非、toxを活用して効率的な開発フローを実現してください。