30 ポイント 投稿者 darjeeling 2025-07-07 | 4件のコメント | WhatsAppで共有

"uv: Making Python Local Workflows FAST and BORING in 2025" 動画の要約

この動画は、Pythonパッケージングツール uv を使ってローカル開発ワークフローを高速かつ効率的にする方法についての第2部です。主なポイントは次のとおりです。

1. uv の主要コマンド活用
  • uv run: pyproject.toml で定義され、uv.lock ファイルに固定された依存関係を使って、仮想環境内で pytestfastapi のようなコマンドを実行します。
  • uv add: 新しい依存関係を pyproject.toml に追加し、uv.lock ファイルを自動で更新します。
  • uv run --with: プロジェクトの中核依存関係に追加せずに、pdbpp のような開発用ヘルパーモジュールを一時的に注入して利用できます。
  • uv lock --upgrade: 依存関係のロックファイルを非常に高速に更新します。uv run は実行時に変更されたロックファイルを自動検知し、環境を同期します。
2. just を使ったワークフローの標準化
  • uv には hatchpdm のようにユーザー定義コマンドを定義する機能は組み込まれていません。
  • 動画では Makefile の欠点(プラットフォーム依存性、非標準構文など)を指摘し、代替として Rust 製のコマンドランナー(just)を強く推奨しています。
  • justfile を使って、次のような反復作業をレシピとして標準化します。
    • test: テスト実行(引数の受け渡しが可能)
    • cov: テストカバレッジの確認
    • serve: 開発サーバーの起動
    • checkall: リント、型チェックなどすべての検査を一度に実行
3. justuv の連携
  • .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 の速度と、justdirenv のようなツールを組み合わせることで、依存関係管理とコマンド実行を自動化・標準化し、開発者が中核ロジックにより集中できる "高速で退屈な(boring)"、つまり非常に安定して予測可能な開発環境を構築できます。

4件のコメント

 
gracefullight 2025-07-10

https://github.com/gracefullight/py-starter を使おうと思って、テンプレートを1つ作っておきました。

 
aabb2467 2025-07-08

poethepoet を使うと、pyproject.toml の中でタスクを定義して使えるので、私は just の代わりに使っています。

 
gracefullight 2025-07-10

ありがとうございます。

 
dkmin 2025-07-09

ありがとうございます。 https://poethepoet.natn.io/