Skip to content
Latchkey

tox vs nox:Python のテスト自動化を比較

tox はテスト環境を INI で宣言的に構成します。nox はそれらを Python で構成し、宣言的なシンプルさとプログラム的な柔軟性を引き換えにします。

どちらも複数の Python バージョンと隔離された環境をまたいでテストスイートを実行します。tox は tox.ini(宣言的)を使い、nox は noxfile.py(命令的な Python)を使い、複雑なマトリクスにより柔軟です。

toxnox
Config の形式tox.ini(宣言的)noxfile.py(Python)
柔軟性config 駆動、factors/条件分岐完全な Python のロジック
学習コスト標準的なマトリクスならシンプルPython で考えるなら容易
成熟度長く確立している確立済み、より新しい
バックエンドvirtualenvvirtualenv / conda / venv

tox が優れている点

「py39..py312 でテストを実行する」といった標準的なマトリクスでは、tox.ini は簡潔で宣言的であり、このツールは非常に広く使われ、ドキュメントも豊富です。その factor 構文は、コードを書かずに多くのマトリクスの組み合わせを扱えます。要件が従来型であれば、tox が最もシンプルに合います。

nox が優れている点

session が条件分岐のロジック、動的なパラメータ化、あるいは INI では扱いにくいステップを必要とする場合、それらを Python(noxfile.py)で表現する方がすっきりします。nox の session は単なる関数であり、多くの開発者にとって考えやすく、再利用しやすいと感じられます。

CI では

どちらも CI のマトリクスとよく組み合わさります。CI の runner にインタプリタを用意させ、tox/nox にバージョンごとの環境を管理させるか、あるいはマトリクス全体を 1 つの job の中で実行します。作成した環境を config のハッシュで cache して再実行を高速化しましょう。

結論

従来型の宣言的なテストマトリクスと最大限の使い慣れが欲しいなら tox を、session をプログラム的に制御したいなら nox を選びましょう。どちらもバージョンをまたぐ Python テストにしっかり対応します。

関連ガイド