今回は、Pythonでmypyを使って型チェックする方法についてご紹介します。
mypyとは
Pythonは動的型付け言語ですが、mypyを利用すると、型アノテーション(タイプヒント)に基づいてコードの型整合性をチェックできます。
これにより、実行前に潜在的なバグを発見でき、開発効率や保守性が向上します。
小規模なスクリプトから大規模なプロジェクトまで幅広く導入できる点も大きな魅力です。
mypyのインストール
mypyは、pipコマンドで簡単にインストールできます。
1 |
pip install mypy |
インストール完了後は、以下のコマンドでバージョンを確認できます。
1 |
mypy --version |
型チェックの基本
型アノテーションの記述方法
型アノテーションは、変数や関数に対して「この値はこの型である」と明示的に示します。
以下の例では、intやstrなどの基本的な型や、ListやDictといった複合的な型が登場します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 変数の型注釈 age: int = 30 name: str = "Alice" # 関数の型注釈 def greet(person_name: str) -> str: return f"Hello, {person_name}!" # クラスの型注釈 from typing import List, Dict, Union class Person: def __init__(self, name: str, age: int) -> None: self.name = name self.age = age def birthday(self) -> None: self.age += 1 # リストや辞書などの型注釈 scores: List[int] = [80, 90, 70] info: Dict[str, str] = {"name": "Bob", "city": "Tokyo"} # 複数の型を許容するUnion型 value: Union[int, str] = 100 value = "one hundred" # intかstrのいずれかならOK |
コマンドで型チェックを実行する
型アノテーションを書いたPythonファイルを、mypyコマンドでチェックします。
例えばsample.pyというファイルを作り、以下のようなコードを記述したとします。
1 2 3 4 5 |
def add(x: int, y: int) -> int: return x + y result = add(10, 20) print(result) |
この場合、正しい型を使っているので、mypy sample.pyを実行してもエラーは出ません。
基本的な使い方の例
続いて、型エラーを実際に検出する例を見てみます。
以下は、引数に不正な型を渡しているコードです。
1 2 3 4 5 6 7 |
# error_sample.py def add_numbers(x: int, y: int) -> int: return x + y result_error = add_numbers(10, "20") # yにstrを渡している print(result_error) |
このコードに対して、mypy error_sample.pyを実行すると、次のようなエラーが表示されます。
error_sample.py:4: error: Argument 2 to “add_numbers” has incompatible type “str”; expected “int”
Found 1 error in 1 file (checked 1 source file)
型チェックが通らない場合、実行前に問題を把握できるため、誤った使い方を防げます。
逆に、正しい型を指定している場合はエラーが表示されません。
よくあるエラー
mypyを使う際に遭遇しやすいエラーはいくつか存在します。
- Argument … has incompatible type: 関数が期待する型と実際に渡している型が一致しない場合に出るエラーです。
- Missing type hint for function: 関数に型アノテーションを付けていないときに表示されることがあります(設定による)。
- Cannot find implementation or library stub for module: インストールされていない外部ライブラリの型定義が見つからない場合に発生します。
これらのエラーは設定ファイルやオプションで制御できる場合があります。
たとえば、mypy.iniをプロジェクトルートに配置し、厳格なチェックや無視したい警告を設定すると、プロジェクト全体で一貫性を保ちながら柔軟に型チェックを運用できます。
まとめ
mypyを利用すると、意図しない型の不一致を事前に発見できるため、コードの品質向上に役立ちます。
型アノテーションは開発者間のコミュニケーションを円滑にし、大規模開発でも保守性を高めてくれます。
設定ファイルやエディタ連携を活用することで、より強力な型チェック環境を整備できます。