uvとtyの連携
Bringing uv and ty together (astral.sh)
要約
Astralは、Pythonのパッケージマネージャーuvと型チェッカーtyの実験的な統合を発表しました。この統合により、PEP 723で定義されたPythonスクリプトの依存関係管理と型チェックが強化され、コマンドラインやエディタでのスクリプト実行が容易になります。また、`uv check`コマンドが導入され、リンティングと型チェックを単一のインターフェースで実行できるようになります。
全文翻訳
uvとtyの連携
TL;DR: uvとtyの実験的な統合が利用可能になり、Pythonスクリプト(CLIおよびエディタ上)のファーストクラスサポートと、統合されたuv checkコマンドが実現しました。これは、プロジェクトの共通理解を利用して全く新しい機能を提供する、統合されたAstralツールチェーンに向けた一歩です。
Astralでは、Pythonエコシステム向けの高性能ツールを開発しています。uvはパッケージマネージャー、Ruffはリンターとフォーマッター、そしてtyは型チェッカーとランゲージサーバーです。
歴史的に、各AstralツールはPython開発の異なるコンポーネントをより生産的にすることに焦点を当ててきました。しかし、従来は分離されていた機能を統合ツールチェーンに統合することで、Pythonをさらに進化させる機会があると考えています。
Astralツールチェーンのビジョンはシンプルです。各ツールは単独でも、他のエコシステムと相互運用可能でも、有用であるべきですが、それらを組み合わせることでさらに強力になります。
本日、プレビュー版で利用可能な、uvとtyの実験的な統合を発表します。uvはPythonプロジェクトの環境と依存関係を理解し、tyはコードを理解します。この2つを組み合わせることで、各ツール単独では提供できない新しい機能がアンロックされます。
Pythonスクリプトのファーストクラスサポート #
PEP 723は、Pythonスクリプトがインラインメタデータを通じて依存関係とPythonバージョン要件を宣言できるようにします。uvはすでにこのメタデータを使用してスクリプト実行時の環境を準備しています。今やtyもこのメタデータを使用してスクリプトを理解できるようになりました。
コマンドラインとエディタの両方で、tyはインラインメタデータを使用してプロジェクト全体でスクリプトを検出し、uvを活用して各スクリプトの環境を準備します。これらの環境により、tyはスクリプトを宣言された要件に対してチェックできます。
スクリプトは、同じリポジトリ内でも異なる要件を持つことができます。各スクリプトは、周囲のプロジェクトの依存関係やPython要件と異なっていても、独自の依存関係宣言に対してチェックされます。
[動画: PEP 723で依存関係をインラインで宣言し、保存してuvと同期し、エディタでtyの補完、ホバー情報、定義への移動機能を使用します。]
PEP 723で依存関係をインラインで宣言し、保存してuvと同期し、エディタでtyの補完、ホバー情報、定義への移動機能を使用します。
エディタで統合が有効になると、tyはバックグラウンドでスクリプトの環境を準備するためにuvを自動的に呼び出し、その環境を使用してスクリプトの宣言された要件に基づいた型チェック、コードナビゲーション、補完を提供します。
将来的には、スクリプトサポートをデフォルトで有効にし、標準的なPythonプロジェクトの自動環境セットアップを有効にする予定です。
統合されたチェックコマンド #
uv checkは、tyのサポートから始まり、uvに統合された診断インターフェースを導入します。将来的には、uv checkでRuffもサポートし、リンティングと型チェックを単一のコマンドに統合する予定です。
uv checkを実行すると、プロジェクトの環境が自動的に準備され、必要な依存関係がインストールされ、tyでプロジェクトがチェックされます。これは「ただ動作します」。(uv checkを一度も実行しない場合、uvの体験に何も変更はありません。tyバイナリは初回呼び出し時に別途インストールされます。)
uv checkを使用すると、個々のパッケージ、またはワークスペース全体をチェックできます。ワークスペースでは、uv check --package <name>を使用して個々のパッケージを選択するか、uv check --all-packagesを使用してすべてのパッケージをチェックします。uvはワークスペース構成を使用してチェックするものを決定するため、ワークスペースが成長してもコマンドは同じままです。
[動画: 単一のコマンドでプロジェクトの依存関係を同期し、コードの型チェックを行います。]
単一のコマンドでプロジェクトの依存関係を同期し、コードの型チェックを行います。
スタンドアロンのPEP 723スクリプトは独立した環境を持ち、個別にチェックされます。宣言された要件を使用してスクリプトをチェックするには、uv check --script example.pyを使用します。
uv checkは、プロジェクトのロックファイルに記録されているtyのバージョンを自動的に使用します。プロジェクト構成とロックファイルをコミットすると、開発者やCIは別途保守されているピンなしで、同じtyバージョンを共有してuv checkを実行できます。
tyのpre-commitフックも内部でuv checkを使用しており、コミット前にPythonプロジェクト全体に対してtyを実行します。uv checkを使用することで、フックはプロジェクトの依存関係宣言から環境を自動的にセットアップします。
仕組み #
uvとtyの統合は、uv workspace metadataによって強化されており、tyにプロジェクトまたはスクリプトのパッケージ、依存関係、Python環境の構造化されたビューを提供します。tyはその後、この情報を使用して、設定された環境を反映した型チェックとエディタ機能を提供します。
PEP 723スクリプトの場合、tyはuvを呼び出してスクリプトの環境を準備し、これには宣言された依存関係のインストールが含まれます。依存関係のインストールにはサードパーティのPythonコードの実行が必要になる場合があるため、自動環境セットアップは現在オプトインです。
VS CodeでPEP 723スクリプトの統合を試すには、uvとty VS Code拡張機能をインストールし、VS Codeのsettings.jsonでuv統合を有効にします。
{
"ty.experimental.useUv": "on"
}
コマンドラインからプロジェクトとそのPEP 723スクリプトをチェックすることもできます。
TY_UV=scripts ty check
uv checkの実行は統合を自動的に有効にし、追加の設定は不要です。
PEP 723スクリプトとuv checkコマンドのサポートには、uv 0.12.3以降、およびty 0.0.76以降が必要です。
今後 #
この統合は実験的なものであり、エクスペリエンスを洗練させるにつれて、皆様からのフィードバックを歓迎します。
この初期サポートは主にuvの環境機能を活用してtyの実行を強化していますが、uvがプロジェクトの依存関係を把握していることとtyがコードを理解していることを組み合わせた新しいカテゴリのチェック(例:未使用の依存関係の検出)も開発しており、これについては今後の投稿で取り上げます。
そして並行して、tyの安定リリースに向けて引き続き取り組んでいます。
共に開発していただきありがとうございます!
この統合の基盤となる機能を実装したAstralチームのAria Desires、Micha Reiser、Zsolt Dollensteinに感謝します。