MENU

Pyrightとは|MicrosoftがTypeScript基盤で作ったPython型検査器

Pyright アイキャッチ
Pyright

Pyrightは、Microsoftが2019年に公開したPython向けの静的型チェッカおよび言語サーバである。TypeScriptコンパイラの設計を主導したEric Traut氏が中心となって開発しており、TypeScriptで培われた高速な型推論と差分解析の経験が、そのままPythonの世界に持ち込まれている点が大きな特徴となる。VS Codeの拡張機能Pylanceの中核エンジンとしても採用されており、エディタを開いた瞬間からリアルタイムに型エラーや補完候補を返してくれる軽快さが、世界中のPython開発者から評価されている。

目次

この記事の目次

  1. TypeScript由来の設計思想
  2. Pylanceとの一体運用
  3. mypyとの差異と使い分け
  4. ライセンスとコミュニティ
  5. まとめ

TypeScript由来の設計思想

TypeScript由来の設計思想

Pyrightの開発を主導したEric Traut氏は、もともとTypeScriptの設計と実装に深く関わっていた人物で、Microsoft社内でTypeScriptの初期からプロジェクトに参加していたことで知られる。彼がPython向けに新しい型チェッカを書こうとした動機は明快で、当時主流だったmypyは挙動が安定している一方で、大規模コードでの応答速度や、エディタ統合のきめ細かさに改善の余地があった。そこでTypeScriptで磨いた言語サーバの作法をそのままPythonへ移植する、という野心的な試みとして始まったのがPyrightである。

実装言語はTypeScript、ランタイムはNode.jsという選択も独特だ。Pythonのチェッカなのに本体がJavaScriptで動くという構図は当初奇異の目で見られたが、結果として既存のVS Code拡張アーキテクチャに自然に組み込め、配布も容易になった。増分解析や型キャッシュの仕組みもTypeScript由来で、ファイルを保存した瞬間に該当箇所のみを再評価し、数百ミリ秒以内にエディタへ結果を返す応答性を実現している。

Pylanceとの一体運用

Pylanceとの一体運用

PyrightはCLIツールとしても提供されるが、多くの開発者が実際に触れる入り口はVS Code拡張のPylanceである。PylanceはMicrosoftがリリースする無償のPython言語サポートで、その内部の型解析と補完エンジンがPyrightだという関係になる。Pylance独自の機能として、stubファイルの自動補完や、import文の自動整理、関数シグネチャのインレイヒントなどが追加されており、純粋なPyright単体よりもエディタ体験が一段リッチになるよう設計されている。

設定ファイルはpyproject.tomlの[tool.pyright]、もしくはpyrightconfig.jsonに記述する。厳格モードはtypeCheckingMode = "strict"とするだけで一括有効化でき、より細かく制御したい場合は、reportUnknownMemberTypeやreportUntypedFunctionDecoratorなど50以上の個別ルールをエラー/警告/無視のいずれかに割り当てられる。VS Codeの右下に表示されるPython interpreter切り替えと連動して、仮想環境ごとに別の設定を適用することも可能だ。

mypyとの差異と使い分け

mypyとの差異と使い分け

PyrightとmypyはどちらもPEP 484に準拠する静的型チェッカだが、警告の出方には微妙な違いがある。Pyrightは型推論がより積極的で、変数のスコープ内で型が絞り込まれる挙動、いわゆるType Narrowingを細かく追跡する。isinstance分岐の後の型、Optionalに対するNoneチェック後の型など、TypeScriptユーザにはなじみ深い絞り込みの精度が高い。結果として、mypyでは通っていたコードがPyrightでは警告を出す、という場面も発生する。

実運用では、エディタにはPylance(Pyright)、CIにはmypy、という二段構えを採るチームが多い。Pyrightは応答速度を活かしてリアルタイムフィードバックを担い、mypyは仕様準拠を担保する番人として最終チェックに回る、という役割分担である。ただし両者で診断が割れると混乱の原因になるため、近年はPyright一本で運用する事例も増えており、プロジェクトの規模やチームの好みに応じて使い分けるのが現実的だ。

ライセンスとコミュニティ

ライセンスとコミュニティ

Pyright本体はGitHubのmicrosoft/pyrightリポジトリでMITライセンスのもと公開されている。一方、それを内包するPylanceは商用ライセンスのクローズドソース製品で、配布はVisual Studio Marketplace経由に限られる。オープン部分とクローズ部分の境界が明確に分かれている構成は、TypeScript本体がOSSでVisual Studioの一部機能が有償、というMicrosoftお馴染みのプロダクト戦略をPythonにも適用したものと言える。

コミュニティの動きも活発で、GitHubのIssueには毎日のように新しい型推論のエッジケースが寄せられ、Eric Traut氏自身が直接返信することも珍しくない。週に一度程度のペースで新バージョンがリリースされ、Pythonの新しい型ヒント機能、たとえばPEP 695のtype文やPEP 692のTypedDict改善などへの追随も非常に速い。型システムの最先端を試したい開発者にとって、Pyrightは事実上の実験場としても機能している。

まとめ

Pyrightは、TypeScriptで培われた型システム実装の知見をPythonへ移植したチェッカである。PylanceとしてVS Codeで日常的に触れている開発者も多いはずだ。増分解析の速さと厳密な型絞り込みは、エディタ統合の体験を一段引き上げ、mypyとの併用やPyright単独運用の選択肢を広げてくれる。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次