MENU

Hatchとは PyPA公式のモダンなPython開発ツールチェーン

Hatch アイキャッチ
Hatch

HatchはOfek LevがGitHubで2017年頃から開発を始め、2022年にPython Packaging Authority(PyPA)公式プロジェクトとして組み込まれたモダンなPython開発ツールである。プロジェクトのスキャフォールド、仮想環境管理、テスト実行、wheelビルド、PyPI公開までを一貫してこなし、設定はpyproject.tomlに集約される。本稿ではHatchの構造、build backendとしてのhatchling、環境管理コマンド、PoetryやPipenvとの違いを順に解説する。

目次

この記事の目次

  1. Hatchが提供する4機能
  2. hatchlingのbuild backendとしての位置
  3. 環境管理とテスト統合
  4. PoetryやPipenvとの違い
  5. まとめ

Hatchが提供する4機能

Hatchが提供する4機能

Hatchの中核はCLIとビルドbackendの分離設計だ。ユーザが直接触るのは hatch コマンドだが、内部のwheelビルドは「hatchling」という別パッケージが担当する。この設計はPoetry/poetry-coreと同じ思想で、CIでwheelを作る際にはhatchlingだけインストールすればよく、Hatch CLI本体を含めなくて済む。結果としてビルドコンテナを小さく保てる。

Hatchの大きな特徴は「環境(environments)」をプロジェクト内で複数定義できる点だ。[tool.hatch.envs.test], [tool.hatch.envs.docs] のようにpyproject.tomlへ書き、各環境ごとに依存とスクリプトを定義する。hatch run test:cov のように環境名:スクリプト名で呼び出せ、Makefileやnoxの代替として機能する。Matrix機能を使えば、Python 3.10/3.11/3.12を横断したテストも数行の設定で構成できる。

hatchlingのbuild backendとしての位置

hatchlingのbuild backendとしての位置

hatchlingは2022年にPyPA入りしたbuild backendで、setuptoolsの主要な代替として広がりつつある。pyproject.tomlの[build-system]節に "hatchling" を指定するだけで利用でき、setup.pyを書かずに済む点が好まれる。依存はpyproject.tomlのみで、ビルド時の挙動は[tool.hatch.build.targets.wheel]などで宣言的に制御する。

version source pluginの仕組みも特徴的で、[tool.hatch.version] section に source="vcs" と書くだけでGitタグからバージョンを生成できる。従来はsetuptools-scmなどを別途設定していた処理が、hatchling組込で完結する。build hookによりCython拡張のビルド、フロントエンドアセットのバンドル、Rust拡張のmaturin連携などをパイプライン内に組み込める柔軟性も持つ。

環境管理とテスト統合

環境管理とテスト統合

Hatchの環境は[tool.hatch.envs.]で宣言する。type="virtual" がデフォルトで、内部的にはvirtualenvを使い~/.local/share/hatch/env/virtual/配下にプロジェクトごとの環境を作る。type="container" を指定するとDockerで動かすこともでき、CI互換のテスト環境をローカルで再現できる。hatch run env-name:script-name で個別環境内のスクリプトを呼び出せるため、複数のテストランナーを一つのpyproject.tomlに集約できる。

テスト統合は2024年のHatch 1.10で大幅に強化され、 hatch test がpytestをラップする標準コマンドとなった。matrix機能と組み合わせると、複数Pythonバージョンでのテストや、optional dependenciesを切り替えての検証が容易になる。また hatch fmt はruffやblackを統合する書式整形コマンドで、プロジェクトごとの設定を読み込みつつ統一されたインタフェースを提供する。これらにより、tox/noxを使わずにHatch一本で開発ループを回せるようになった。

PoetryやPipenvとの違い

PoetryやPipenvとの違い

HatchとPoetry/Pipenvの最大の違いは、Hatchが「PyPA公式の標準志向」であるのに対し、後者がより独自仕様を持つ点だ。HatchはPEP 621の[project]節をそのまま読み、独自フィールドは[tool.hatch]に限定する。これにより、Hatchプロジェクトを後でuvやpipに移しても支障が少ない。Poetryも2.0系で[project]節に寄せる動きを見せており、Pythonエコシステム全体が同じ方向に収束しつつある。

一方で2024年時点のHatchはロックファイル機能を標準では持たない。アプリケーション向けに完全再現性を求める場合、pip-toolsやuv pip compileを別途併用するのが現実的だ。今後Hatch本体にロック機能が入る可能性もあり、PyPA内部ではPEP 751に基づく標準ロックフォーマットの議論が続いている。ライブラリ作者にとっては、ロックを必要としないHatchの軽さがむしろ歓迎されている。

まとめ

Hatchは2022年のPyPA公式化を機に、Python開発ツールチェーンの本命候補として認知を広げてきた。hatchlingのクリーンなbuild backend設計、プロジェクト内に複数環境を持てる柔軟性、PEP 621準拠の標準志向は、PoetryやPipenvと並ぶ第一級の選択肢として今後ますます重要性を増していくだろう。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次