nikkie-ftnextの日記

イベントレポートや読書メモを発信

Pythonプロジェクトの管理ツール Hatch、私も、気になります!

はじめに

HOTCHPOTCH FESTIV@L!! 2も待ってます!1 nikkieです。

Pythonのpackage managerは、simple(=レゴブロック)なモジュールを組合せたいろいろな提案が存在します2
その中で最近気になるHatchについての覚書です。
「これから試していくぞ!」というレベル感です。

目次

5月のPython Monthly TopicsはHatch

Hatchの全体感を掴むのにうってつけな記事だと思います。

  • Hatchでプロジェクト作成
  • 追加のインストール不要で、Ruffでフォーマット、pytestでテスト実行
  • Pythonインタプリタを管理できる(マイナーバージョン違いを各種取り揃えられる)
  • 仮想環境の管理
    • 例としてdocs環境にSphinxをインストールした

同様にHatchが気になっている福田さんが踏み出す道を拓いてくださったと見えています。
ありがたい限りです。

登壇をきっかけに出会ったHatch

2024年4月にみんなのPython勉強会で、Pythonの仮想環境の話をしました。

pipによる仮想環境の管理は伸びしろを感じることがあり、それを解消する種々のツールの1つとしてHatchを紹介しています。
発表スライドは https://ftnext.github.io/2024-slides/stapy-april/python-virtual-environment-basic.html#/17 からです。

Hatchのインストールはインストーラやpipx。
インストーラがあるのはすごいと思っていて、「Pythonで書かれているのにPythonがなくてもインストールできるってどんな魔法!?」と思います(この点、私が誤解している可能性はあります)

プロジェクト作成はhatch newですし、すでにあるプロジェクトにHatchを入れるにはhatch new --initとのこと。
ref: https://hatch.pypa.io/latest/intro/#setup

発表時に手を動かしたコードはこちら

仮想環境の依存ライブラリ管理が面白い

Hatchは、依存ライブラリを仮想環境で管理する方法がかなり特徴的だと思っています。
その方法とは、pyproject.tomlを書きます
項目はprojectdependenciesです3

https://hatch.pypa.io/latest/environment/#dependencies

Hatch ensures that environments are always compatible with the currently defined project dependencies (if installed and in dev mode) and environment dependencies.

Hatch以外のツール、例えばpiprye4は、開発者が依存をインストールする手順がありますよね。

  • pip install -r requirements.txt
  • rye sync5

Hatchにこの種の手順はないと思われます(あるかもしれないですが、私はまだ出会えていません)。
hatch shellhatch runは、pyproject.tomlに宣言した通りの仮想環境が用意されるんです!
Python Monthly Topicsでは、Sphinxの入ったdocs環境の例があります。

この体験、Rust(Cargoの開発に近いなと思いました。
Cargo.tomlにdependenciesを書いたら、それがインストールされた状態で開発できるという経験をしました。

私は素のpipを結構使ってきていて、依存ライブラリってツールで都度入れるものと身体に染み付いているのですが、Hatchのこの体験は新鮮でした。
そして、HatchやCargoの流儀の方が体験がよいように感じます(インストールできていると人が誤って思い込んでしまうためにつまづくことが激減しそう)

終わりに

気になるツール、Hatchについて、少しだけ手を動かしたり、記事を読んだりして、現時点で知っていることを書き出しました。
依存管理に注目すると、pyproject.tomlに宣言したとおりに仮想環境が作られるというのは、なかなか優秀そうな印象です。

今回は依存管理を中心に取り上げましたが、パッケージの公開やスクリプトの実行など、私が普段いろんなツールを組合せて行っている開発フローをHatchに移行できそうな印象を持ちました。
次はPythonプロジェクトに入れてみるフェーズかなと思います。


  1. hotchpotchはごった煮。ALLSTARS & MILLIONSTARS!!
  2. ご参考。ばんくしさんのアウトプットにより私の理解は大きく引き上げられています
  3. pyproject.tomlの項目について
  4. かなり期待されているツールと見ていますが、こんな意見もあります(私の意見は廊下でお話ししましょう)
  5. 素振りの記:Ryeに慣れるために、Pythonで自分だけのクソライブラリを作る - nikkie-ftnextの日記をどうぞ