一般社団法人Pythonエンジニア育成推進協会(以下、当協会)の顧問理事の寺田学です。私は試験の問題策定とコミュニティ連携を行う立場です。

  • 一般社団法人Pythonエンジニア育成推進協会 顧問理事 寺田学氏

    著者:寺田学
    一般社団法人Pythonエンジニア育成推進協会 顧問理事

先日、私が監修をしている「スラスラわかるPython第2版」の販売が開始されました。この版では、前版が刊行された後に普及した「型ヒント」の章が新たに追加されています。 「型ヒント」自体はPython3.5以降からサポートされるようになりました。 当初はそこまで利用されていませんでしたが、ここ2年ほどの間に開発現場での型ヒントの利用が進んだことで、型ヒントを読める、書けるということが次のステップになるだろうと言われています。 そこで今回は、型ヒントを活用するメリットについてお話ししたいと思います。

型ヒントとは何か

型ヒントとは、コーディングする時点で変数の宣言や関数の引数として渡される値の型がどういったものであるのかの「ヒント」をつけておこうというものです。 型ヒントはバージョン3.5からサポートされるようになりましたが、バージョンを追うごとに新しいものが定義され、3.10に至る現在までの間にどんどん進化しています。

例)

型ヒントなし 型ヒントあり
A = 1 A: int = 1
def greeting(name):
    return ‘Hello ’+name
def greeting(name: str) -> str:
    return ‘Hello ’+ name

Pythonは動的型付け言語であるため、変数を宣言する際にデータ型を指定しなくても実行するときに影響はしません。 ですが、ここ2年ほどの間にWeb開発の現場では型ヒントをつけてコーディングするのが主流になってきています。私自身も新しいものを作るときには基本的に型ヒントを書いています。 ちなみに、データ分析の分野では、タイプ量と考えることが増えてしまうこともあって、おそらくWeb開発現場ほどは流行していないと思います。

確かに型ヒントを使うことで書く文字量が増えますし、書き方を覚え、確認するという一見面倒に思う部分はありますが、実際のところは型ヒントを書くだけでより安全でわかりやすいコードになり、開発・メンテナンス・レビューの効率が上がるので、多くの利点があるといえます。

個人的に型ヒントについて学習したものをWebで公開しているので、興味のある方はご一読ください。
型ヒントのお試し

型ヒントを使うメリット

関数を書く際、その関数がどういう処理を行っているのか、その引数の意味は何なのかをdocstring関数を使ってコメントのように残します。 ただ、残されたコメントが後からメンテナンスされないことがあり、その内容が間違っていたとしても実装者にしか間違いを確認できず、実装者以外の人間は何かしらの確認の手段をとらなくてはなりません。 (docstring関数はドキュメンテーションするときに自動生成できたり、テスト内容を書いておけたりなど、意味のあるコメントです。)

そうしたときに型ヒントが使われていればmypyというチェックツールによって自動でチェックが入るため、対象の型に間違いがないことが保証されます。 その結果、対象の型が安全に使え、また、見る人は実装内容を確認するだけで関数に渡す値や戻り値が何の型であるかを誤認することなく、すぐにわかるようになります。

特に型が安全であるということは、中規模以上のシステムや何度も書き直しがされるようなシステムを開発する場合に、実装の負荷を下げることにつながります。 そこに型ヒントがあれば変なものが残っていない保証になり、かつ、読みやすいコードになっていることがわかるため、関数の見直しを行う場合はもちろん、GitHubなどでの他者によるコードレビューも早く進み、生産性がとても上がります。

また、メリットはチェックツールだけではありません。 VS CodeやPyCharmなどの開発支援ツールを使っている方は多いと思いますが、そこでも型ヒントによる支援を得ることができます。 私自身はVS Codeを使用していますが、strで返すところにintで返すように書いていればVS Codeから適切なサジェスチョンが返されます。

だからこそ、型ヒントを使ったことがある人はその便利さを知ってやめられなくなります。私自身も使い始めてからは自分のためだけのプログラムであっても型ヒントを書くようになりました。

・型ヒントのチェックツールの使い方
mypyを使う場合はインストールが必要です。 ですが、VS CodeやPyCharmを利用する場合はその設定を適切なものにしておけば、型ヒントを生かしたチェックをしてくれるようになっているので、mypyを入れなくても支援を受けられます。

型ヒントを書きにくいケース

当然、書きにくいものは中にはあります。たとえば辞書やリスト、タプルがそれにあたります。 本来であればそれらについても、その中身まで宣言ができればいいのですが、内容がintだけ、strだけというものもあれば、intとstrが混じっていることもあります。また、辞書キーの場合はstrで決められても、辞書の値はstrやintがくるといったケースもあります。 こういった場合には無理をせず、まずは「dictがくる」といった程度から始め、厳密に書けるようになったらしっかりとした宣言をするようにしていければいいと思います。

さいごに

私自身は数年ほど前から型ヒントを使用し始めましたが、特に使用してみてよかったと感じるのは、関数やメソッドでデータを受け渡しする部分の設計がクリアになったことです。

使い捨てで作るスクリプトの時には細かく決めず、あいまいなものを受け取ってあいまいなものを返すということをやりがちです。それまでであればガード節にif構文を使ってうまく処理をしていましたが、型ヒントを使用するようになって以降は、そういったあいまいな処理をせずクリアな設計にするようになり、また関数やメソッドの機能を見直すというチャンスが生まれました。 Webのように、外から何かを処理される場合、取り扱うデータの型はいろいろな形になっている可能性が増えます。そういう時にしっかりとガード節を入れて作っていけば、コーディングの質を上げることにつながります。

もちろん、型ヒントはあくまでヒントであり、Pythonは型ヒントがなくても動くものなので書かなくても構いませんし、すべてに型ヒントを書かなくても問題ありません。 ただ、享受できるメリットは多いので、いきなりすべてをやろうとするのではなく、まずは戻り値だけ書くなど最小限のところから始めていくのがおすすめです。 読めるようになっておけば、初めて見たプログラムで驚くことはなくなりますし、書いてあると読みやすいなと感じるようになると思います。その時に、自分や一緒に開発する人にメリットになると思えたのであれば、そこから今後はどこまでどう書いていくかを考え、徐々に追加していけば良いと思います。

型ヒントとそのチェックツールの存在は、大規模開発になるほど安心感を得られ、大きなモチベーションにつながるという気がしています。 VS Codeなどのツールから受けられる支援が手厚く、やりたいことを明確にできるので、ぜひチャレンジしてもらいたいと思います。

当協会の最新情報は公式サイトか、公式Facebookページでご覧いただけます。FacebookページではPythonに関連したニュースもお知らせしていますので、ぜひフォローしてみてください。また、YouTubeチャンネル「Pythonエンジニア認定試験」では、私が試験概要や学習のコツをお話ししたものや、合格した方のコメント動画を公開しています。こちらもぜひご覧ください。

[PR]提供:Pythonエンジニア育成推進協会