
はじめに
今や Python の環境構築のスタンダードになりつつある uv (rye) や 高速 Linter の ruff などを管理する Astral から、Rust 製高速型チェッカーの ty がリリースされました。2025年5月現在、プレリリース版とのことで公式ドキュメントも整備されていない状態ではありますが、公式の README を読みながら試してみます。
インストール方法
uv
を使っている方は以下のコマンドでグローバルにインストールできます。
uv tool install ty@latest
開発環境で使いたい場合は、
もしくは pip install ty
でも入ります。
VSCode (Cursor) を使っている場合は、ty の拡張機能をインストールすることで編集中に Warning をみる事もできます。
使い方
基本的に以下のようにして、プロジェクト内の Python ファイルの型チェックを行ってくれます。
基本的な型チェック
試しに次のような type hint との衝突があるコードを書いてみます。
main.py
a: int = 1
a = 'hoge'
ty check
の結果は以下のようになりました。
出力
❯ ty check
WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors.
error[invalid-assignment]: Object of type `Literal["hoge"]` is not assignable to `int`
--> main.py:2:1
|
1 | a: int = 1
2 | a="hoge"
| ^
|
info: `invalid-assignment` is enabled by default
Found 1 diagnostic
参考までに、mypy での出力は以下のようになります。
出力
❯ mypy main.py
main.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment]
Found 1 error in 1 file (checked 1 source file)
ty
の方がエラーの該当箇所がハッキリと可視化されてて見やすい気がします。
エラーの抑制
何らかの理由で、コード中にエラーとして raise してほしくない状況があるとします。ty
では行末に # ty: ignore[ruleの名前]
とすることでエラーの抑制ができます。例えば、先ほどのチェックでは error[invalid-assignment]
と怒られていたので、以下のように修正してみます。
main.py
a: int = 1
a = 'hoge'
出力
❯ ty check
WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors.
All checks passed!
無事(?)もみ消すことに成功し、警告が消えました。また、# ty: ignore[errorA, errorB, ...]
とすることで複数のエラーを抑制したり、PEP484 で導入された # type: ignore
によってその行の全てのエラーを無視できるとともに、関数のデコレータとして @no_type_check
を付けることで関数単位での抑制も可能です。
main.py
from typing import no_type_check
def add_three(a: int, b: int, c: int):
a + b + c
@no_type_check
def main():
add_three(3, 4)
出力
❯ ty check
WARN ty is pre-release software and not ready for production use. Expect to encounter bugs, missing features, and fatal errors.
All checks passed!
mypy との速度比較
ty
は Rust 製の「超高速型チェッカー」を謳っていますが、実際に Python の型チェックにどれほどの速度差が出るのか、エラーのある以下のファイルを対象に1000回ずつ型チェックして比較してみました。計算環境には M3 Macbook Air を用います。
main.py
from typing import no_type_check
def add_three(a: int, b: int, c: int):
a + b + c
def main():
add_three(3, 4)
計測コマンド例
time bash -c 'for i in {1..1000}; do mypy main.py > /dev/null; done'
time bash -c 'for i in {1..1000}; do ty check main.py > /dev/null; done'
ツール | 合計実行時間(1000回) | user | system | CPU使用率 |
---|---|---|---|---|
mypy | 100.98秒 | 80.83s | 17.06s | 96% |
ty | 14.564秒 | 9.02s | 3.23s | 84% |
上の結果からわかるように ty
は mypy
と比べて圧倒的に速いことが分かります。
まとめ
というわけで、Gemini 2.5 Pro にうまいこと締めてもらいます。
というわけで、この爆速型チェッカー「ty」、まだヨチヨチ歩きのプレリリース版ながら、その速さは本物、エラーメッセージの親切設計(と、都合の悪いことには目をつぶる寛容さ)は、まるで未来から来た救世主のよう。
…で、肝心の「まとめ」の締めくくりですが、えーっと、ここまで勢いよく書いてきたものの、筆者、正直なところ良い感じのオチを思いつく前に力尽きました。
なので、ここはひとつ、読者の皆様のクリエイティビティとAI技術の進歩に期待を込めて、**「あとはよしなに!」**という、IT業界で古来より伝わる奥義を発動したいと思います。
現場からは以上です! tyだけに、タイプミスには気をつけてね! (おあとがよろしいようで…え?)
古のオタクみたいな締め方をされた。
Views: 2