16
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Servoを試すはずが、いつのまにかPythonのuvを調べていた話

16
Posted at

はじめに

Rust 好きとしては見過ごせないニュースが飛び込んできました。
ブラウザレンダリングエンジンの Servo が crates.io に公開されたそうです。

cargo add servo するだけで、本物の Web レンダリングエンジンが
自分のプロジェクトに組み込めてしまう時代になったわけですね。

これは触ってみるしかない!ということで
今回は Servo を動かしてみようと思います。

……という記事になるはずでした。

エディタ設定を見に行っただけなのに

Servo を触るなら、まずはエディタをちゃんと整えておこうと思い
The Servo Book の Editor Setup のページを開きました。

今回は Zed を使おうと思い Zed のセクションを見てみると rust-analyzer を設定する話がメインなのですが
その並びに Python のセクションがあるんですね。

読んでみると、Servo のビルドツール mach まわりの Python スクリプトを
静的解析するために pyrefly という言語サーバーを使うらしく
settings.json にはこんな設定例が載っていました。

{
  "lsp": {
    "rust-analyzer": { "...": "..." },
    "pyrefly": {
      "binary": {
        "path": ".venv/bin/pyrefly",
        "arguments": ["lsp"]
      },
      "settings": {
        "python": { "pythonPath": ".venv/bin/python" },
        "pyrefly": { "python_interpreter": ".venv/bin/python" }
      }
    }
  },
  "languages": {
    "Python": {
      "language_servers": ["pyrefly", "!pyright", "!pylsp"]
    }
  }
}

.venv/bin/pyrefly というパスを見て
「じゃあその .venv 作るか」と手を動かし始めたのが、そもそもの脱線の入り口でした。

Python のバージョンがなんかおかしい

久々のマシンで Python のバージョンを確認するとなんか古い?

python3 --version
Python 3.9.6

Homebrew で 3.12 を入れていたはず

brew --prefix python@3.12
/opt/homebrew/opt/python@3.12

どうやら macOS 標準の古い Python(Xcode Command Line Tools 由来)が
/usr/bin/python3 として PATH の手前にきており
Homebrew の python@3.12 はバージョン付き formula なので
デフォルトではリンクされない、というやつでした。

普段は pyenv + pipenv の組み合わせですが、uv を使ってみようと思い
Servo そっちのけで環境整備を始めることにしました。

uv を使ってみる

基本的な使い方を確認します。

uv python install 3.14
uv python pin 3.14
uv venv --python 3.14
uv pip install pyrefly

uv python pin を実行すると、カレントディレクトリに
.python-version が作られます。pyenv の .python-version と役割は同じですね。

cat .python-version
3.14

これで、さきほどの Zed の設定が指していた
.venv/bin/python.venv/bin/pyrefly がようやく揃いました。

本題(Servo)への最短ルートとしては、ここで終わっていいはずでした。

気になって pipenv と比較し始める

uv が気になったので
普段の pyenv + pipenv でやっていることが同じようにできるのか
そのまま調べ始めてしまいました。

普段はこんな感じで実行

pipenv run python main.py runserver

これは、ほぼそのまま置き換えられました。

uv run python main.py runserver

uv runpyproject.toml.venv の中身が食い違っていないか
毎回チェックしてから実行してくれるので、pipenv run よりむしろ賢い印象です。

一方で、地味なギャップにもぶつかりました。
pipenv は pipenv install すると Pipfile が無ければ自動生成してくれますが
uv addpyproject.toml が無いとエラーで止まります。

uv add requests
error: No `pyproject.toml` found in current directory or any parent directory

先に uv init を打っておく必要があるんですね。pipenv 感覚のまま触ると
一番最初に躓くポイントだと思います。

もう一つ、Pipfile[scripts] セクションで
devmigration みたいな短いエイリアスを作って使っていたのですが
これに相当する機能は uv には存在しませんでした。

# Pipfile
[scripts]
dev = "python main.py runserver"
migration = "python main.py migration"

uv は Python の環境管理に専念する設計のようで
タスクランナーの役割は意図的に持たせていないみたいです。
Makefile でラップするか、poethepoet のようなツールを別途足すのが
現実的な代替手段のようでした。

結局、Servo は

一度も触っていません。

cargo add servo すら打っていません。
エディタの設定ファイルを1つ開いただけで
Python のバージョン管理を触っただけでした。

次こそは本当に Servo を触ろうと思います。
あるいはまた別の何かに寄り道するかもしれません。

それでは:wave:

16
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?