䞀般瀟団法人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゚ンゞニア育成掚進協䌚