pythonの型アノテーションでコードの可読性を向上させる

BACK END

Hello World.

LiSMOtechの久津間です。

 

pythonは動的型付け言語で型を指定せずに便利に開発することができます。

一方でコードの可読性が損なわれたり、開発者の意図が関数・メソッドで明確にならないことがあげられます。

そのため、pythonの型アノテーションを利用し、上記のデメリットを軽減することが可能となっています。

本記事ではpythonの型アノテーションについて調査した内容を出来る限り分かりやすくまとめていきます。

 

型アノテーションについて

冒頭でもお伝えしたとおり、pythonは動的型付け言語です。

型を指定せずに変数、関数、引数や戻り値を宣言することが可能となっています。

また、アノテーションという言葉のとおり、「注釈」といった意味を持っており、型について注釈を入れてローカルなルールをつくります。

これは、静的型付け言語にするということではなく、動的型付け言語に型の概念を加えるためと考えられます。

※python標準ライブラリでは現状、型チェックを行う方法がなく、サードパーティー製のパッケージでそれを実現します。

 

記載方法は後ほど説明しますが、以下は型アノテーションを使っておりstring型の変数をboolean型の引数に渡していますが、特に警告やエラーなど出ることはありません。

company_name: str = "会社名"

def get_company_name(value: bool) -> str:
    return value;

print(get_company_name(company_name))

【実行結果】

$ python annotation.py 
会社名

 

mypyによる型チェック

pythonで型チェックを行うため、mypyをインストールします。

$ pip install mypy

 

mypyコマンドが利用できるようになるため、先程のファイルを使って以下のようにコマンドを実行するとエラーが表示されます。

$ mypy annotation.py 
annotation.py:4: error: Incompatible return value type (got "bool", expected "str")  [return-value]
annotation.py:6: error: Argument 1 to "get_company_name" has incompatible type "str"; expected "bool"  [arg-type]
Found 2 errors in 1 file (checked 1 source file)

 

次は以下のコードに変更して、再度実行してみます。

company_name: str = "会社名"

def get_company_name(value: str) -> str:
    return value;

print(get_company_name(company_name))
$ mypy annotation.py 
Success: no issues found in 1 source file

上記のとおりメッセージが変わりエラーが解消されました。

 

VS CODEにmypyを設定する

VS CODEの拡張機能でmypyを設定することで、エディタ上でもエラーを指摘してくれます。

以下の順でインストールを行います。

VSCODE >> 拡張機能 >> 「mypy」で検索 >> 「Mypy Type Checker」

 

有効にすることで以下のようにエラー指摘が表示されるようになります。

 

 

変数の型アノテーション

変数に型アノテーションを利用する例を紹介します。

変数名の後に「: 型名」を加えることで利用可能です。

company_name: str = "会社名"

この例は、変数company_nameがString型の文字列型であることを示しています。

 

関数の型アノテーション

関数では引数や戻り値に型アノテーションをつけることが可能です。

引数名の場合は引数名の後に「: 型名」を加えます。

def get_company_name(value: str):

上記の例では、引数に渡ってくる値がString型の文字列型であることを示しています。

 

また、戻り値の場合は関数名の後に「-> 型名:」加えます。

def get_company_name(value: str) -> str:

上記の例では、関数の戻り値がString型の文字列型であることを示しています。

 

 

基本の型の種類

基本的な型として以下の種類がありますが、詳細は公式ドキュメントを参照してください。

一般的な変数

文字列や整数などの扱いは以下のとおりです。

  • str・・・String型
  • float・・・float 型
  • int・・・integer 型
  • bool・・・boolean 型
message: str = "こんにちは!"
data: float = 1.23
num: int = 12
flag: bool = True

 

辞書、配列など

辞書や配列などは以下のとおりです。

from typing import Dict

fruits: list[str] = ["りんご","ばなな","もも"]
dict: Dict[str, str] = {
  "JP": "japan",
  "FR": "france"
} 

※その他、タイプヒント(型アノテーション)に関するチートシートはこちら

 

まとめ

今回はpythonの型アノテーションについて記載させていただきましたが、この他にもUnionやOptionalなど様々な型アノテーションの使用方法があります。

コーディングをしていく際にはこちらの記事だけでは十分ではないため、ドキュメントなどを確認しながら手を動かしていただければと思います。

 

また、弊社ではReactやNextなどを中心としたフロント開発に力を入れております!

絶賛エンジニア職を募集しているので、少しでも気になる方がいらっしゃいましたら是非お気軽にご連絡ください!

 

※因みに、TSの型周りの話がちょいちょい出てくるのでpythonでも!っと思い今回の記事に至っています。


ともに考え、寄り添う。プロのデザインチームが即参戦。

販促ツールや一貫したデザインによるブランド構築などビジネスの成長をデザインの力で促進します。

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。

企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

お得な情報がLINEに届く!!

LINE公式アカウントはこちらから。

友だち追加

最新記事

CONTACT

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

平日10:00〜19:00

お電話の場合こちらから

043-305-4162

平日10:00〜19:00