世界を動かす技術を、日本語で。

uv: Rustで書かれた非常に高速なPythonパッケージおよびプロジェクトマネージャー

2025年6月24日原文(github.com)

概要

uv は、Rust製の超高速なPythonパッケージ・プロジェクトマネージャー。 pippoetry など複数ツールの機能を一括提供。 10~100倍 の速度やグローバルキャッシュによる効率化。 Pythonバージョン管理 やスクリプト実行もサポート。 クロスプラットフォーム 対応で、簡単インストール可能。

uv:高速Pythonパッケージ&プロジェクトマネージャー

  • uv はRustで開発された、Pythonプロジェクト管理のための オールインワンツール
  • pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv などの機能を一つに統合
  • 10~100倍の高速化 を実現したパッケージ管理
  • ユニバーサルロックファイル による一貫した依存関係管理
  • スクリプト実行インライン依存関係メタデータ のサポート
  • Pythonバージョンのインストール・切替 機能
  • Pythonパッケージとして公開されたCLIツール の実行・インストール
  • pip互換インターフェース で、既存のワークフローを崩さず高速化
  • Cargoスタイルのワークスペース による大規模プロジェクト対応
  • グローバルキャッシュ でディスク効率と依存関係の重複排除
  • RustやPython不要 でcurlやpipから簡単インストール
  • macOS, Linux, Windows 対応
  • Astral(Ruff開発元) がバックアップ

インストール方法

  • スタンドアロンインストーラー によるインストール
    • macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
    • Windows: powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • PyPI経由インストール
    • pip: pip install uv
    • pipx: pipx install uv
  • スタンドアロンインストーラー利用時は uv self updateで自己アップデート可能
  • 詳細・他の方法は公式ドキュメント参照

主な機能

  • プロジェクト管理

    • 依存関係・環境・ロックファイル・ワークスペース管理
    • ryeやpoetryに似た使い勝手
    • 例:
      • uv init example でプロジェクト初期化
      • uv add ruff で依存追加&仮想環境構築
      • uv run ruff check でツール実行
      • uv lock で依存ロック
      • uv sync でロックファイルと環境同期
    • uv管理外プロジェクトのビルド・公開もサポート
  • スクリプト管理

    • 単一ファイルスクリプトの依存・環境管理
    • インラインメタデータで依存宣言
    • 例:
      • uv add --script example.py requests で依存追加
      • uv run example.py で仮想環境下でスクリプト実行
  • ツール管理

    • Pythonパッケージとして公開されたCLIツールの実行・インストール
    • 一時環境での実行(uvx/uv tool run
    • 永続インストール(uv tool install
    • 例:
      • uvx pycowsay 'hello world!' で即時実行
      • uv tool install ruff でツールインストール&バージョン確認
  • Pythonバージョン管理

    • 複数Pythonバージョンのインストール・切替
    • 例:
      • uv python install 3.10 3.11 3.12 で複数バージョン導入
      • uv venv --python 3.12.0 で指定バージョン仮想環境作成
      • uv run --python pypy@3.8 -- python --version でPyPy利用
      • uv python pin 3.11 でディレクトリ単位のバージョン固定
  • pip互換インターフェース

    • pip, pip-tools, virtualenvのコマンド互換
    • 追加機能:依存バージョン上書き、プラットフォーム非依存解決、再現性解決
    • 例:
      • uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt で要件ファイル生成
      • uv venv で仮想環境作成
      • uv pip sync docs/requirements.txt で一括インストール

ドキュメント・サポート

  • 公式ドキュメント : https://docs.astral.sh/uv
  • コマンドラインリファレンス:uv help
  • プラットフォーム対応状況、バージョンポリシー、貢献方法、FAQも公式サイト参照

FAQ・その他情報

  • uvの発音 : "you - vee"(/juː viː/)
  • 表記 :"uv"(小文字)
  • 依存解決 :PubGrub方式を採用
  • Git実装 :Cargoをベース
  • 最適化 :pnpm, Orogene, Bun等から着想
  • Windowsサポート :Posyのtrampolineを応用
  • ライセンス :Apache 2.0 または MIT(選択可能)

まとめ

  • uv はPython開発の生産性と速度を大幅に向上させる 次世代マネージャー
  • 既存ツールの置き換え高速化一貫性のある依存管理 を実現
  • インストール・運用が容易 で、幅広いプラットフォームに対応

Hackerたちの意見

最近、ノートパソコンで個人的なことに使い始めたんだけど、pipに慣れてると、これがめっちゃ速くて混乱する。何度も、返ってくるのが早すぎて動いてないのかと思ったことがあるよ。

UV最高!アストラルチームのRuffも大好き。pylintとBlackからRuffにリントとフォーマットを切り替えたら、リントの時間が90秒から1.5秒未満に減った。マジでクレイジー!

uv add --script mycoolscript.pyが大好き!それに# !/usr/bin/env -S uv runを上に追加して、Pythonスクリプトを簡単に実行できるようにしてる。最高だね!

すごくクールだよ。今では、すぐに実行できる小さなスクリプトを習慣的に作ってる。環境や依存関係を管理するよりずっと楽だね。- https://everything.intellectronica.net/p/the-little-scripter - https://www.youtube.com/watch?v=8LB7e2tKWoI - https://github.com/intellectronica/ez-mcp

e: あなたの例を読み間違えたから、以下の'uv add --script'とプロジェクトの文脈での'uv add'の無関係なパターンマッチングは無視して!~~それはカレントワーキングディレクトリのプロジェクト/envを変えちゃうよ。彼らのドキュメントにはたくさん情報があるけど、run --withやuvのPEP723サポートの方がもっと好きだと思うよ~~ https://docs.astral.sh/uv/guides/scripts/

Marimo.ioのノートブックをアプリモードで使ってこのトリックを試してる。最小限の前提条件で他の人に送れる、即反応型の再現可能なアプリができる。めっちゃホットな組み合わせだね。

特別な指示を与えてClaudeプロジェクトを作ったんだけど、これで一つのプロンプトからインライン依存関係を持つ完全なスクリプトを出力できるんだ。リンクはこちら: https://simonwillison.net/2024/Dec/19/one-shot-python-tools/ Claude 4のトレーニングカットオフ日は2025年3月なんだけど、確認したらClaude Sonnet 4は特別な指示なしでこれができるみたい。URLを渡すとhttpxとbeautifulsoupを使ってスクレイピングして、ページ上のすべてのリンクのCSVを返してくれるんだ - URLとリンクテキストも含めて。これがその出力で、依存関係についてはちゃんとやってくれたよ: https://claude.ai/share/57d5c886-d5d3-4a9b-901f-27a3667a8581

uvとruffは、「決して車輪を再発明するな」って言う人たちへの素晴らしい反例だよ。やるだけのためにやるのはダメだけど、目標が明確なら、時には桁違いに良い製品を生み出せることもある。

車輪を再発明したわけじゃなくて、「ただ」すべての木をもっと耐久性のある素材に置き換えて、10倍の速さで回転できるようにしたんだ。

Pythonのパッケージ管理の歴史を見てると、みんな現状よりも良い方法があると思ってるよね。

量的に言えば、話がそれるけど、なんで「10倍」じゃなくてあのフレーズが使われるんだろうね。もっと短いのに。

正直「車輪を再発明するな」って言葉、全然意味がわからないよね。今も木の円盤を車輪として使ってるわけじゃないし、旧石器時代からずっともっと良い車輪を発明してきたんだから。ソフトウェアでも同じことをしていいんじゃない?

Hacker Newsで議論の続きを見る