型アノテーション【type annotation】型注釈
概要

変数には整数や文字列、真偽値などの型を書き添え、関数には引数や戻り値の型を指定する。これにより、どのような値を受け取り、どのような値を返す処理なのかが、コードを読むだけで把握しやすくなる。
静的型付け言語では型アノテーションが言語仕様の一部として組み込まれており、コンパイル時に型の整合性が検査される。一方、PythonやTypeScriptといった動的型付け言語では、本来は型の宣言は不要だ型アノテーションを導入する例が増えている。この場合は実行時の動作を直接変更せず、型検査器や統合開発環境(IDE)が補助情報として利用する形が一般的である。
動的型付け言語はもともと型を記述する必要がないためコードを素早く短く書ける点が利点とされてきた。しかし、開発規模が拡大するに連れ、変数への意図しない型の値の代入や、関数への不正な値の受け渡しに起因する不具合が目立つようになった。この課題に対応するため、必要に応じて補助的に型の情報を記述できる仕組みとして型アノテーションが導入されるようになった。
型アノテーションを記述しても、プログラムの実行そのものには影響しない言語が多い。実行時に型の食い違いがあってもエラーにはならず、型の整合性を確認するのは、「静的解析ツール」と呼ばれる別のソフトウェアの役割である。Pythonではmypyなどのツールがコードを実行せずに読み込み、アノテーションと実際の値の型が一致しているかを検証する。TypeScriptでは、コンパイル時に型検査を行う仕組みが採用されている。
型アノテーションは「型推論」(type inference)と組み合わせて利用されることも多い。型推論とは、コンパイラや解析ツールが代入される値や式から型を自動的に判断する仕組みであり、推論だけで十分な場合は型の記述を省略できる。一方、複雑な式や公開API、ライブラリのインターフェースなどでは、型アノテーションを記述したほうが意図を明確に伝えられるため、両者を状況に応じて使い分ける言語が多い。
なお、型アノテーションは、値をある型として扱うようコンパイラや型検査器に指示する「型アサーション」(type assertion)とは異なる概念である。アノテーションは変数や関数に期待される型を記録する情報であるのに対し、後者は既存の値に対する解釈を変更するために用いられる。