Python環境構築ツール
- Python管理、パッケージ管理、プロジェクト管理: uv
- Linter, formatter: ruff
- 型チェック: ty
- pre-commitマネージャー: prek
- uvの管理、仮想環境自動認識: mise
uv, ruff
uv, ruffはAstral社製のツールで既にかなり広く使われてる印象。個人的には1年ちょっと前位に全面的に poetryや black, isort などから移行していきました1。
ty
tyは型チェックツールとして mypy の代替えツールですが、 これもAstral社製で、昨年末にベータ版がリリースされました2。
mypyはチェックツールの中でも圧倒的に時間を食うツールでしたが、tyはかなり高速で、ruffなどの実行と比べてもそれ程気にならないレベルになります。
設定としては基本的にはデフォルトの設定のままで使ってます。 最初はmypyで通った部分もいくつかerror/warningを出して修正する必要がありました。 逆にtyで通った部分がmypyのエラーとして漏れているかどうか、はすぐに判断することは出来ないので、たまにmypyを走らせてみて特にエラーが出ない事を確認したりしていますが今のところは特に漏れはなさそうです。
型チェックツールとしては pyrefly など他にもありますが、ruffに合わせたい、程度の理由で現状はtyを使っています。
prek
prekはpre-commit の機能をRust製で実装したツールで、pre-commitの設定ファイルをそのまま使うことができます。
すでに有名なプロジェクトもpre-commitからprekに移行していて、 Astralのruff/tyもprekを使っています。
置き換えは簡単でprekを開発用パッケージとしてインストールして、
prek installを実行して.git/hooks/pre-commitをprekように置き換えるだけです。
手動で時刻する際にはprek runやprek run --allなど、基本的な使い方はpre-commitと同じです。
実際パッケージをインストールしたりする際はpre-commitよりも高速で、
特にpre-commitとの使い勝手などの差は無いので移行がおすすめです。
mise
miseは direnv のような仮想環境自動認識機能や、 PythonやNode.js製のツールなどを管理したり、 タスクランナーのような機能もあるツールで、これもRust製です。
レポジトリのトップに.mise.tomlというファイルを置いておくとuvで管理されてるプロジェクトであれば自動的にuvの仮想環境を認識してactivateした状態にしてくれます。 レポジトリの外に出れば自動的にdeactivateしてくれるので、仮想環境のactivate/deactivateを意識する必要がなくなります3。
また、uvコマンドもmiseで管理しています。
macOSだと色々なものをHomebrewで管理してますが、 Homebrewだと少しバージョンアップデートが遅いことや、 今のHomebrewだと古いバージョンのまま留めておく、ということが難しいので、 バージョンをきちんと管理したいツールなどはmiseで行うようにしています。
uvやbunなどのパッケージ管理用のCLIツール、codexなどのNode.js製のツールなど4。
mise自体はHomebrewで入れたり必要であれば直接インストールしたりします。
python-template
上の環境のテンプレートです。
現在はデフォルトを主に上のRust製のツールに置き換えた状態にしてあります。

