こんにちは!前回は爆速パッケージ管理ツール「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の入力値によっては float や int | float になる場合もありますが、文脈を読んで推論してくれます)
⚠️ 注意点:2回実行が必要?
少し調べたところ、複雑な関数の場合、1回目は引数だけ、2回目で戻り値…というふうに段階的に型がつくことがあるようです。
もし「あれ?中途半端だな」と思ったら、もう一度コマンドを叩いてみてください。
4. Pyreflyを使ってみた感想
Mypyの約2倍、Pyrightの約8倍速いと言われているだけあって、動作は非常に軽快でした。
特に uv と組み合わせると、「環境構築も速い」「型チェックも速い」というストレスフリーなPython開発環境が手に入ります。
まとめ
- Homebrewで簡単導入:
brew install pyrefly - uvとの相性: どちらもRust製で爆速。思考を止めずに開発できます。
- infer機能: 既存のコードに型を付けたい時に便利(発展途上だけど期待大!)。
まだ発展途上のツールではありますが、uvを使っている方なら、きっとこの「サクサク感」が気に入るはずです。
ぜひ試してみてくださいね!