Rust製の波が止まらない?「uv」の次は「Pyrefly」で型チェック!

Rust製の波が止まらない?「uv」の次は「Pyrefly」で型チェック!

こんにちは!前回は爆速パッケージ管理ツール「uv」について紹介しました。
Rust製のツールの速さに感動した私ですが、なんと型チェックの世界にもRustの波が来ているようです。

その名も「Pyrefly(パイアフライ)」
あのMeta社(旧Facebook)が開発している、超高速なPython型チェッカーです。

「uvで環境構築までは爆速になったけど、コードの品質管理も速くしたい…」
「型ヒントを書くのが面倒くさい…」

そんな悩みを解決してくれる(かもしれない)、Pyreflyを今回は試してみました。
uvで作ったStreamlitアプリに、自動で型をつけてくれる機能も検証します!

1. PyreflyもHomebrewで一発インストール!

まずはインストールです。前回のuv同様、Rust製ツールは導入が簡単なのが魅力。
今回もMacユーザー(M3チップ)の強い味方、Homebrewでいけるのか確認してみました。

私: Pyreflyってどうやって入れるのが正解?uvみたいにBrewでいける?

Gemini: はい!Homebrewに公式のFormulaが存在します。macOS(Apple Silicon/Intel)ともに対応しているので、以下のコマンドひとつで完了です。

brew install pyrefly

公式情報によると、現在の安定版は 0.45.2 とのこと。
uvと同じく、pip install pyrefly でも入りますが、システム全体でツールとして使いたいのでBrewにお任せしました。

2. uv × Streamlit の環境を用意する

では、実際に使ってみましょう。
いつも通り uv でプロジェクトを立ち上げ、Webアプリフレームワークの Streamlit を入れます。

# プロジェクト作成
uv init pyrefly-test
cd pyrefly-test

# Streamlitを追加
uv add streamlit

ここまでは一瞬ですね。さて、今回はPyreflyの実力を試すために、あえて「型ヒントなし」のコードを書いてみます。
ファイル名は app.py としました。

app.py (型ヒントなし):

import streamlit as st

# 型ヒントを書いていない関数
def calculate_area(width, height):
    return width * height

st.title("面積計算アプリ")

w = st.number_input("幅を入力", value=10)
h = st.number_input("高さを入力", value=20)

if st.button("計算する"):
    # ここで関数を使用
    result = calculate_area(w, h)
    st.write(f"面積は: {result}")

3. 魔法のコマンド「pyrefly infer」を試す

ここからが本番です。
Pyreflyには、コードを解析して自動で型ヒントを追記してくれる infer コマンドがあるんです。

まずはプロジェクトの初期化(設定ファイルの生成)を行います。

pyrefly init

そして、いよいよ推論コマンドを実行!

pyrefly infer app.py

実行すると、ターミナルには「0 errors」のような表示が出ました。
ドキドキしながらエディタで app.py を確認してみると……?

app.py (実行後):

# 自動で書き換わっていました!
def calculate_area(width: int, height: int) -> int:
    return width * height

おおー!引数と戻り値に int が付与されました!
(※Streamlitの入力値によっては floatint | float になる場合もありますが、文脈を読んで推論してくれます)

⚠️ 注意点:2回実行が必要?

少し調べたところ、複雑な関数の場合、1回目は引数だけ、2回目で戻り値…というふうに段階的に型がつくことがあるようです。
もし「あれ?中途半端だな」と思ったら、もう一度コマンドを叩いてみてください。

4. Pyreflyを使ってみた感想

Mypyの約2倍、Pyrightの約8倍速いと言われているだけあって、動作は非常に軽快でした。
特に uv と組み合わせると、「環境構築も速い」「型チェックも速い」というストレスフリーなPython開発環境が手に入ります。

まとめ

  • Homebrewで簡単導入: brew install pyrefly
  • uvとの相性: どちらもRust製で爆速。思考を止めずに開発できます。
  • infer機能: 既存のコードに型を付けたい時に便利(発展途上だけど期待大!)。

まだ発展途上のツールではありますが、uvを使っている方なら、きっとこの「サクサク感」が気に入るはずです。
ぜひ試してみてくださいね!

Comments

No comments yet. Why don’t you start the discussion?

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です