uvを活用してPython開発ワークフローを刷新する
(youtube.com)"uv: Making Python Local Workflows FAST and BORING in 2025" 動画の要約
この動画は、Pythonパッケージングツール uv を使ってローカル開発ワークフローを高速かつ効率的にする方法についての第2部です。主なポイントは次のとおりです。
1. uv の主要コマンド活用
uv run:pyproject.tomlで定義され、uv.lockファイルに固定された依存関係を使って、仮想環境内でpytestやfastapiのようなコマンドを実行します。uv add: 新しい依存関係をpyproject.tomlに追加し、uv.lockファイルを自動で更新します。uv run --with: プロジェクトの中核依存関係に追加せずに、pdbppのような開発用ヘルパーモジュールを一時的に注入して利用できます。uv lock --upgrade: 依存関係のロックファイルを非常に高速に更新します。uv runは実行時に変更されたロックファイルを自動検知し、環境を同期します。
2. just を使ったワークフローの標準化
uvにはhatchやpdmのようにユーザー定義コマンドを定義する機能は組み込まれていません。- 動画では
Makefileの欠点(プラットフォーム依存性、非標準構文など)を指摘し、代替として Rust 製のコマンドランナー(just)を強く推奨しています。 justfileを使って、次のような反復作業をレシピとして標準化します。test: テスト実行(引数の受け渡しが可能)cov: テストカバレッジの確認serve: 開発サーバーの起動checkall: リント、型チェックなどすべての検査を一度に実行
3. just と uv の連携
.envファイル:justは.envファイルを読み込んで環境変数を設定できます。これを使ってuv runに--with引数を動的に追加したり、サーバーポートを変更したりするなど、柔軟なワークフローを構成できます。uvx(uv tool run):pipxのように、プロジェクトとは独立して PyPI パッケージを実行するコマンドです。justレシピ内でhttpieのようなツールを、プロジェクト依存関係に追加せず利用できます。
4. 仮想環境の直接管理(任意のワークフロー)
uv runを通さず、従来どおり仮想環境(.venv)を有効化して使いたい開発者向けの方法です。uv sync:uv.lockファイルと.venvフォルダーの状態を同期します。(依存関係のインストールおよび不要パッケージの削除)direnv: 特定のディレクトリに入ったとき.envrcスクリプトを自動実行するシェルツールです。これを活用すると、ディレクトリへ入る際に自動でuv syncを実行し、仮想環境を有効化できます。
結論
uv の速度と、just、direnv のようなツールを組み合わせることで、依存関係管理とコマンド実行を自動化・標準化し、開発者が中核ロジックにより集中できる "高速で退屈な(boring)"、つまり非常に安定して予測可能な開発環境を構築できます。
4件のコメント
https://github.com/gracefullight/py-starterを使おうと思って、テンプレートを1つ作っておきました。poethepoetを使うと、pyproject.tomlの中でタスクを定義して使えるので、私はjustの代わりに使っています。ありがとうございます。
ありがとうございます。 https://poethepoet.natn.io/