はじめに
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 run は pyproject.toml と .venv の中身が食い違っていないか
毎回チェックしてから実行してくれるので、pipenv run よりむしろ賢い印象です。
一方で、地味なギャップにもぶつかりました。
pipenv は pipenv install すると Pipfile が無ければ自動生成してくれますが
uv add は pyproject.toml が無いとエラーで止まります。
uv add requests
error: No `pyproject.toml` found in current directory or any parent directory
先に uv init を打っておく必要があるんですね。pipenv 感覚のまま触ると
一番最初に躓くポイントだと思います。
もう一つ、Pipfile の [scripts] セクションで
dev や migration みたいな短いエイリアスを作って使っていたのですが
これに相当する機能は uv には存在しませんでした。
# Pipfile
[scripts]
dev = "python main.py runserver"
migration = "python main.py migration"
uv は Python の環境管理に専念する設計のようで
タスクランナーの役割は意図的に持たせていないみたいです。
Makefile でラップするか、poethepoet のようなツールを別途足すのが
現実的な代替手段のようでした。
結局、Servo は
一度も触っていません。
cargo add servo すら打っていません。
エディタの設定ファイルを1つ開いただけで
Python のバージョン管理を触っただけでした。
次こそは本当に Servo を触ろうと思います。
あるいはまた別の何かに寄り道するかもしれません。
それでは![]()