Skip to content
Latchkey

Hatch vs PDM: Python プロジェクトマネージャー比較

高速な resolver、組み込みの lockfile、PEP 582 スタイルのローカルインストールが欲しいなら PDM を、標準化された build backend、環境マトリクス、プロジェクトのスクリプティングを 1 つのツールで欲しいなら Hatch を選びましょう。

Hatch (PyPA 製) と PDM は、どちらも古い setup.py + virtualenv + pip のフローを置き換える、モダンで標準ベースの Python プロジェクトマネージャーです。両者は多くの点で重なりますが、強調する点が異なります。Hatch は再現可能な環境とその hatchling build backend を中心にしており、PDM は高速な依存関係 resolver とコミットされた lockfile (pdm.lock) を中心にしています。どちらも pyproject.toml を読み取ります。

HatchPDM
設定pyproject.toml ([tool.hatch])pyproject.toml ([tool.pdm])
Lockfile組み込みの lock なし (hatch-pip-compile または外部を使用)pdm.lock を組み込み
Build backendhatchling (人気のスタンドアロン backend)pdm-backend
環境名前付き環境とテストマトリクス単一のプロジェクト venv (プロジェクト内 .venv)
スクリプト/タスクhatch run + scriptspdm run + scripts
標準PEP 517/518/621PEP 517/518/621、PEP 582 の履歴

それぞれが本当に勝る場面

PDM は、追加のツールを付け足さずに、コミットされたクロスプラットフォームの lockfile と高速な resolver が欲しいときに勝ちます。その pdm.lockpdm install のフローは、そのままで再現可能です。Hatch は、パッケージを公開し、クリーンで広く採用された build backend (hatchling) に加えて、1 つの CLI で管理されるテスト環境のマトリクスが欲しいときに勝ちます。日々のワークフローが pip や uv であっても、多くのプロジェクトが hatchling を build backend として使っています。

CI において

PDM は CI で便利です。pdm installpdm.lock から正確でロックされた環境を復元するからです。Hatch では、lock の再現性は通常 pyproject.toml でのピン留め、または pip-tools/uv との組み合わせから得られます。CI におけるその強みは、同じ hatch run test マトリクスをローカルと runner の両方で実行できることです。

正直な注意点

どちらも普遍的に「優れている」わけではありません。Hatch は意図的にロックをやや外部に委ねており、それを嫌うチームもあります。PDM はより多く (lock、scripts、plugins) をまとめますが、それは PDM 固有の概念を学ぶ必要が増えることを意味します。急速に進化する uv ツールは両者と重なるため、コミットする前に評価してください。

結論

標準の build backend と環境マトリクスを求めるライブラリ作者には、Hatch がよく合います。組み込みの lockfile と高速な resolver を 1 つのツールで求めるアプリケーションチームには、PDM がより完成度の高いデフォルトです。

関連ガイド