こんにちは!日々のPython開発、お疲れ様です。
プロジェクトを始めるたびに `python -m venv venv` を叩き、アクティベートして、`pip install` で依存関係を入れて……という作業、正直少し面倒に感じたことはありませんか?
「ちょっとしたデータ分析のスクリプトを書きたいだけなのに」「友達にもらった1ファイルの便利ツールを動かしたいだけなのに、なぜ大げさな仮想環境を作らなきゃいけないんだっけ?」
そんなPythonエンジニアの長年のプチストレスを、圧倒的なスピードで完全に消し去ってくれる次世代のツールが、いま話題の `uv` です。
今回は、Astral社が開発した超高速パッケージマネージャー `uv` の中でも、特に革命的な実験的機能である `uv run` とインライン依存関係(PEP 723) について、優しく、そして深く解説していきます。これをマスターすれば、あなたの毎日のスクリプト実行体験は劇的に変わりますよ!
—
そもそも `uv` とは何か? なぜ今これを使うべきなのか
伝統的なPythonの世界では、パッケージ管理や仮想環境の構築に `pip`、`poetry`、`hatch`、`virtualenv` など様々なツールが使われてきました。しかし、これらは「遅い」と感じることが少なくありませんでした。
`uv` は、Rust言語でゼロから再実装されたパッケージマネージャーです。従来のツール群と比較して 10倍から100倍近い爆速の処理速度 を誇りながら、`pip` や `virtualenv` の完全なドロップイン代替として動作します。
そして何より素晴らしいのが、今回紹介する 「スクリプト単体で依存関係を完結させる」 という新しいパラダイム(PEP 723)を完璧にサポートしている点です。
従来の面倒な手順
1. フォルダを作る
2. 仮想環境を作る (`python -m venv .venv`)
3. 仮想環境を有効化する (`source .venv/bin/activate`)
4. 必要なライブラリをインストールする (`pip install requests pandas`)
5. スクリプトを書く
6. 実行する
`uv run` を使った未来の手順
1. スクリプトの中に「このライブラリが必要だよ」と書いておく
2. `uv run script.py` と実行する(以上!)
仮想環境の存在を意識する必要すらありません。`uv` が背後で自動的に一時的な環境を数ミリ秒で構築し、必要なパッケージを秒速でロードして実行してくれます。
—
導入と基礎セットアップ
まずは、魔法の恩恵を受けるために `uv` をあなたのマシンに迎え入れましょう。インストール方法も非常に洗練されています。
1. `uv` のインストール
Mac / Linux の場合は、公式が提供するインストーラーをターミナルで実行するだけです。
公式インストーラーを使って uv を一瞬でインストールする
curl -LsSf https://astral.sh/uv/install.sh | sh
Windowsの場合は、PowerShellを使って以下のようにインストールできます。
PowerShell環境でのインストール
powershell -c “irm https://astral.sh/uv/install.sh | iex”
インストールが完了したら、正しく入ったか確認してみましょう。
バージョン確認(爆速で返ってきます)
uv –version
これで準備は完了です。拍子抜けするほど簡単ですね。
—
実践:インライン依存関係(PEP 723)の魔法を体験する
ここからが本題です。
今回は、「Webからデータを取得して綺麗に整形し、コンソールに出力する」という、よくある実用的なタスクを想定しましょう。これには通常 `requests` や `rich`(ターミナルを美しく彩るライブラリ)といった外部ライブラリが必要です。
1. スクリプトの作成
適当なディレクトリに `hello_uv.py` というファイルを作成し、以下のコードを記述してください。
/// script
dependencies = [
“requests”,
“rich”,
]
///
import requests
from rich import print
from rich.panel import Panel
def main():
# 試しにパブリックなAPIから猫の雑学を取得してみます
url = “https://catfact.ninja/fact”
response = requests.get(url)
data = response.json()
# richライブラリを使って、美しくターミナルに描画する
fact_text = data.get(“fact”, “データが取得できませんでした”)
print(Panel.fit(
f”[bold cyan]{fact_text}[/bold cyan]”,
title=”🐱 本日の猫の雑学 (Powered by uv run)”,
border_style=”green”
))
if __name__ == “__main__”:
main()
このコードの何がスゴいのか?(解説)
コードの先頭にある、見慣れないコメントブロックに注目してください。
/// script
dependencies = [
“requests”,
“rich”,
]
///
これが、Pythonの標準仕様策定プロセスであるPEP 723で定義された 「インライン・スクリプト・メタデータ」 です。
「このPythonスクリプトを実行するためには、`requests` と `rich` という外部パッケージが不可欠ですよ」という依存関係の宣言が、スクリプトファイル自体の中にコードとして同居しています。
つまり、このファイルが1つあれば、他のどのファイルも、設定ファイル(`pyproject.toml` や `requirements.txt`)も一切必要ない のです。
—
2. 仮想環境なしで一発実行する
それでは、作成したスクリプトを `uv run` で実行してみましょう。ターミナルで以下のように打ち込んでください。
仮想環境を作らずに、スクリプトをそのまま実行する
uv run hello_uv.py
【実行時に裏側で起きていること】
1. `uv` がスクリプトファイルを読み込み、先頭のコメント(PEP 723)から必要な依存関係(`requests`, `rich`)を自動でパースします。
2. システム内にキャッシュが存在するか確認し、なければ世界最速のスピードで必要なパッケージをダウンロード・解決します。
3. 一時的な仮想環境をバックグラウンドで瞬時に構築し、その中でスクリプトを実行します。
初回実行時であっても、わずかコンマ数秒〜数秒で処理が完了し、ターミナルには以下のような美しいパネルが表示されるはずです。
╭──────────────────────── 🐱 本日の猫の雑学 (Powered by uv run) ────────────────────────╮
│ Cats sleep for 70 to 80% of their lives. │
╰─────────────────────────────────────────────────────────────────────────────────────╯
(※猫の雑学の内容は実行するたびに変わります)
どうでしょう? `pip install` も `source venv/bin/activate` も、一切していませんよね。これが `uv run` のもたらす圧倒的な体験価値です。
—
さらに便利に! スクリプトに依存関係を自動追加する技
「わざわざ手動でコメントに依存関係を書くのも面倒だな……」と思いましたか?
ご安心ください。`uv` はそこまでちゃんと考えてくれています。
もし新しいライブラリ(例えばデータの集計によく使う `pandas` など)をスクリプト内で使いたくなったら、以下のコマンドを叩くだけで、`uv` が勝手にスクリプトの先頭のコメントブロックを書き換えてくれます。
スクリプトに依存関係をインラインで追加しながら実行(または追加登録)
uv add –script hello_uv.py pandas
このコマンドを実行したあとに `hello_uv.py` の中身を覗いてみてください。`dependencies` の配列に自動的に `”pandas”` が追記されているはずです。手動でタイポする心配もありません。
—
現場のプロが教える:この機能がもたらす実務的なメリット
単なる「ちょっとした便利機能」に見える `uv run` ですが、実際の現場(開発、データ分析、CI/CD、教育・ドキュメント作成など)において、計り知れない利益をもたらします。
1. 「環境構築手順書」が不要になる
新しいメンバーがチームに入った際、あるいは自分が数ヶ月前に書いたスクリプトを動かす際、「どのバージョンのライブラリを入れるんだっけ?」と悩む時間がゼロになります。ファイル単体に依存関係が内包されているため、コードがそのままドキュメント兼実行環境になります。
2. 汚染のないクリーンな実験環境
グローバルなPython環境や、メインのプロジェクト環境を汚す心配がありません。使い捨てのスクリプトはそのまま実行し、不要になればファイルを消すだけで後始末も完璧です。
3. CI/CDパイプラインやGitHub Actionsの劇的な簡略化
「環境のセットアップ」「依存関係のインストール」「テストスクリプトの実行」という何行にもわたるYAMLの記述が、`uv run test_script.py` の1行に凝縮できます。
—
おわりに
今回は、`uv` の実験的機能である `uv run` と、インライン依存関係(PEP 723)の活用法について解説しました。
「Pythonの環境構築はめんどくさい」という常識は、もう過去のものになりつつあります。`uv` を取り入れることで、私たちは「コードを書くこと」「アイデアをすぐに形にすること」だけに集中できるようになりました。
ぜひ今日から、ちょっとしたワンライナーや便利スクリプトを書くときは `uv run` を使ってみてください。その圧倒的な身軽さに、きっと感動するはずです。
あなたの開発ライフが、より快適でクリエイティブなものになりますように!