pytype を使っている
とりあえず書いてみるかということで、内容は薄いですが。
Python の type hints が正しくついているかを検証してくれる analyzer はいくつか選択肢がありますが、私が本業でやっている開発プロジェクトでは、Google が公開している pytype を使っています。
以下のような感じで CI にも組み込んでいて、大変役に立っています。
この analyzer は本当に賢くて、ピント外れの指摘をしてくることが少ないし、的確に type hints の間違いを指摘してくれるので、本当に助かっています。作っている人たちを心から尊敬します。
ちょっとしたハマりポイントをあげるとするなら、相対パスからの import の解釈で parse に失敗することがあります。かつ、この挙動はバージョンアップで変わったりするので、 都度 pytype のために import の方式を書き換えてあげる必要があるかもしれません。例えば、同じ階層にある __init__.py
が .foo
にある Foo
を import していることに依存して .Foo
で import してて問題なかったコードを .foo.Foo
に変えたりとか(逆だったかも)、そういうパターンがあります。あとは、どうしてもやむを得ないところは出てくるので、そういうときは # type: ignore
をつけて無視させたりもしています。
実行時間についても一言。この Bolt もそうですが、そこそこの規模になっていると全部のスキャンをするのに、まぁまぁ時間がかかります。一応、.pytype
というディレクトリにキャッシュを作って、可能な限り差分でチェックしようとはしてくれますが、いろんなところから呼ばれているコードをいじると、どうしてもフルスキャンになります。なので、私の場合は、ちょっといじったら実行というよりは、一通り変更し終えたら、スキャンするみたいな使い方をすることが多いです。
type hints をつけている Python プロジェクトなら試す価値があると思います。こういうものを導入せずに type hints のクオリティを維持するのは難しい(というかほぼ不可能)と思いますので。
Discussion