mypy vs Pyright: CIに適したPythonの型チェッカーはどちら?
mypyはPythonのリファレンス型チェッカーで、PyrightはVS CodeのPylanceも支える高速で厳格なチェッカーです。
mypyはPython向けのオリジナルで広く使われている静的型チェッカーであり、タイピング標準とともにメンテナンスされています。Pyright (Microsoft製) はTypeScriptで実装されたチェッカーで、強力な推論、速度、Pylance経由のVS Codeとの緊密な統合で知られています。
| mypy | Pyright | |
|---|---|---|
| 速度 | 中程度 | 高速 (インクリメンタル、watch mode) |
| 推論 | 良好 | 強力 |
| エディタ統合 | plugin/LSP経由 | ネイティブ (Pylance/VS Code) |
| 厳格さの制御 | 粒度の細かいflag | 粒度が細かい、strict mode |
| リファレンスの地位 | タイピングのリファレンス実装 | 独立、広く使われている |
CIにおいて
どちらも型エラーで失敗するCIゲートとして動作します。Pyrightは一般的に高速で強力な推論を持ち、mypyが見逃す問題を捉えられることがあり、素早いフィードバックを与えます。エディタ (Pylance) とCIで同じチェッカーを走らせると結果に一貫性が保たれます。mypyはリファレンス実装であり、公式のタイピングセマンティクスに最も近く、既存の設定やstubの大きな蓄積があります。カバレッジを最大化するために両方を走らせるプロジェクトもあります。
pipeline向けの選択
速度とVS Code/Pylanceとのエディタ一致が欲しい: Pyright。リファレンスチェッカーとタイピング標準への最も近い一致が欲しい: mypy。結果が再現的になるよう、CIでバージョンと厳格さのflagを固定しましょう。
結論
高速なチェックとエディタとの一致が欲しい: Pyright。タイピング標準に沿ったリファレンスチェッカーが欲しい: mypy。どちらも堅実なCIゲートになります - バージョンと厳格さを固定し、最大のカバレッジのために両方を走らせることも検討しましょう。
関連ガイド
Ruff vs Flake8: Which Python Linter for CI?Ruff vs Flake8 for Python CI: lint speed, rule coverage, plugins, and consolidation. Which linter keeps your…
Ruff vs Black: Which Python Formatter for CI?Ruff vs Black for Python CI: formatter speed, compatibility, and all-in-one tooling. Which formatter keeps yo…
tsx vs ts-node: Running TypeScript in CItsx vs ts-node for CI: ESM support, speed, type checking, and setup. Which way to run TypeScript directly kee…