Visual Studio Code | Pythonの型宣言をmypyで自動的に型チェックする方法

Visual Studio Code Python,Visual Studio Code

Visual Studio Code | Pythonの型宣言をmypyで自動的に型チェックする方法

Pythonの型アノテーションの記述方法と「mypy」ライブラリ、拡張機能「Python」を使ってコーディング中、自動的に型チェックする方法とサンプルコードを紹介しています。

確認環境

Windows11 ローカル
Python python-3.11.1

mypyライブラリのインストール

mypyライブラリはインストールが必要です。

拡張機能「Python」で型チェックを有効にする場合はインストールウィンドウが表示されます。

pip install mypy

mypyライブラリと拡張機能「Python」で型チェック環境を実装する

mypyライブラリと拡張機能「Python」が入っている場合、以下の設定「settings.json」に追記する事で型チェックが有効になります。
mypyライブラリがインストールされていない場合、インストールウィンドウが表示されます。

"python.linting.mypyEnabled": true

例えば、以下のような引数の型を定義した関数に違う型の値を送ろうとする場合にmypyによる型チェックの問題個所がコードエラーとして表示さるようになります。

def add_numbers(x: int, y: int) -> int:
	return x * y

add_numbers(123, 'abc')
mypyによる型チェックの問題個所が表示される

また、型を定義していなくても変数の型を変更するコードがある場合、問題個所として提示されます。

型を定義していなくても問題個所として提示される
型を定義していなくても問題個所として提示される

この方法での型チェックはエディタ上でのもので、実際にPythonファイルを実行した際には型チェックは行われずそのまま通ります。

mypy.iniでのオプション設定

VSCodeでmypyの設定ファイルの場所を定義する。

{
  "mypy.configFile": ".vscode/mypy.ini",
}

mypy.iniには以下のオプションが指定可能となっています。

  • check_untyped_defs:型アノテーションがない関数もチェックするようになる。
  • disallow_untyped_defs:型アノテーションがない関数を許可しないようになる。
  • ignore_missing_imports:インポートされていないモジュールに関するエラーを無視するようになる。
  • disallow_any_generics:Any型を使用することができないようになる。
  • disallow_untyped_calls:型アノテーションがない関数を呼び出すことができないようになる。
  • strict_optional:静的型付けのチェックが厳密になる。
  • implicit_optional:mypy が None デフォルト値を持つ引数を暗黙の型を持つものとして扱うようにします。
  • warn_redundant_casts:推定された型に式をキャストするコードで警告を表示します。
  • warn_unused_ignores:不要な # type: コメントを無視することについて警告を表示します。
  • warn_no_return:一部の実行パスで return ステートメントが欠落している場合のエラーを表示する。
  • warn_return_any:戻値がanyの関数がAny 型の値を返すときに警告を表示する。
  • warn_unreachable:到達不能または冗長であると推測されるコードに遭遇した場合に警告を表示する。

参考:The mypy configuration file – mypy 1.0.0 documentation

以下はmypy.iniへのオプションを記述する例です。

warn_return_any = True
check_untyped_defs = True