型ヒント: 静的型付けの恩恵

IDEの補完とmypyによる事前チェック。大規模開発に必須。

型ヒント
変数や関数の型を注釈する構文。
mypy
静的型チェッカー。
Optional
None も許容する型。

型ヒントとは?

荷札

箱の中身が何か書いておく。運ぶ人(IDE/mypy)が中身を開けなくても扱える。

Basic Type Hints
def greet(name: str) -> str:
return f"Hello, {name}!"
def add(a: int, b: int) -> int:
return a + b
# コレクション型
def names() -> list[str]:
return ["Alice", "Bob"]
def ages() -> dict[str, int]:
return {"Alice": 30, "Bob": 25}
Bad
# ❌ Bad: 引数や戻り値の型が不明
def process(data):
result = []
for item in data:
result.append(item.upper())
return result
Good
# ✅ Good: 型ヒントで明確に
def process(data: list[str]) -> list[str]:
return [item.upper() for item in data]

高度な型

typing Module
from typing import Optional, Union, Callable, TypeVar
# Optional: None かもしれない
def find_user(id: int) -> Optional[User]:
...
# Union: 複数の型のどれか (Python 3.10+ は |)
def parse(value: str | int) -> str:
...
# Callable: 関数型
def apply(func: Callable[[int], int], x: int) -> int:
return func(x)
# TypeVar: ジェネリック
T = TypeVar('T')
def first(items: list[T]) -> T:
return items[0]
Tip: Python 3.10+ では Optional[X] の代わりに X | None が使える。

合格ライン

関数に型ヒントを書ける
mypy でチェックできる

演習課題

課題1: 型ヒント
関数に型ヒントを追加してください。
課題2: mypy
mypy で型チェックを実行してください。