䞀般瀟団法人Python゚ンゞニア育成掚進協䌚以䞋、圓協䌚の顧問理事の寺田孊です。 私は詊隓の問題策定ずコミュニティ連携を行う立堎です。 Python3゚ンゞニア認定基瀎詊隓の䞻教材が9月から倉わりたしたので、前回は新たに教材ず指定したチュヌトリアル第4版に぀いおず、チュヌトリアルやバヌゞョンアップずの付き合い方に぀いおお話ししたした。 今回は10月4日にリリヌスされたPython3.10の新機胜や、これたでのバヌゞョンアップで远加された機胜の䞭から最近よく䜿われるようになっおきた機胜に぀いお玹介したいず思いたす。

䞀般瀟団法人Python゚ンゞニア育成掚進協䌚 顧問理事 寺田孊氏

著者寺田孊
䞀般瀟団法人Python゚ンゞニア育成掚進協䌚 顧問理事

Python3.10で远加された目玉機胜は

Python3.10の正匏版が10月4日に公開されたした。今回の3.10には久しぶりに目玉の機胜が加わっおいたす。 ここでは私が泚目しおいる2点だけご玹介したすが、他にも现かい新機胜がありたす。远加されたすべおの機胜を詳现に知っおおく必芁はありたせんが、時間を芋お確認はしおおきたしょう。

1.パタヌンマッチ構文

他の蚀語にはあったswitch文がPythonにはこれたでなく、if文の条件分岐で察応しおきたした。 過去、䜕床か远加機胜ずしお怜蚎されおきたしたが「if文があるから倧䞈倫」ずいうこずで芋送られおきたこの機胜ですが、この3.10でmatch case文が远加されるこずになりたした。 if文ずmatch文のどちらを遞ぶべきかずいえば、その時に䜜りたいものに察しお、䜿いやすい方を䜿うずいう䜵甚でいいでしょう。曞き分けおいくこずで、じきに䜿い方が安定しおいくず思いたす。 これ自䜓は詊隓にはでたせんので心配しなくおも倧䞈倫ですが、個人的にこの機胜ぞは非垞に倧きな期埅感を持っおおり、新しい詊みができそうで面癜いず思っおいる機胜です。

2.゚ラヌメッセヌゞが芪切に

Pythonでは今、゚ラヌメッセヌゞをもっずわかりやすくしおいこうずいう動きがあり、この3.10以降から適甚されおいくずされおいたす。 将来的に日本語翻蚳されたものが出る可胜性もあるので、そうなれば日本人にずっおより分かりやすくなりたす。 ただ、䟿利である䞀方で、以前ぱラヌメッセヌゞをGoogle怜玢すれば過去の事䟋の䞭から䌌たようなものず比べるこずができたしたが、それがしばらくの間は芋぀けづらくなるずいう面もありたす。 ずはいえ、これたでの゚ラヌメッセヌゞではどこを確認すればいいのかわからないのも事実なので、歓迎できる流れではあるず思いたす。

パタヌンマッチずは䜕か?

パタヌンマッチにはmatchcase文を䜿いたす。これによっお「こういうデヌタが来たらこういう凊理をする」ずいったデヌタ型の刀定などをしながら凊理を進めるこずができたす。 デヌタ構造化された党䜓像の䞭からデヌタを芋お刀定しおくれるため、今たでであれば「デヌタの型は䜕か」などの条件分岐を぀なげお曞いおいたずころを、matchcase文だけで条件を刀定しお凊理するこずができたす。 たずえばAPIで通信をしおいるずいろいろなデヌタやケヌスが発生したすが、䞭にはデヌタ型が読みにくいものも出おきたす。そうした郚分の煩雑さをなくしたり、冗長に曞いおいたずころを眮き換えたりずいったこずができそうだず期埅しおいたす。

Pythonの新バヌゞョンずの付き合い方は「焊らないこず」

基本的に、新しいバヌゞョンが公開されおも焊っおすぐに新しいものを䜿う必芁はありたせん。 確かに新しい機胜を䜿えば読みやすいプログラムにできたり、曞きやすくなったりずいったメリットはありたすが、サポヌトが5幎間ず他蚀語に比べお長期間であるこずやラむブラリの察応状況などの事情もあるので、「みんなが䜿うようになった」、「自分にずっお䜿いやすい機胜がある」ず思ったずきに䜿えばいいず思いたす。 実際、新バヌゞョンを䜿うのはラむブラリがあらかた察応した半幎埌がほずんどですし、バヌゞョンアップで远加された機胜の倚くは、みんなが䜿うようになるたでに倧䜓数幎はかかりたす。 のちほど玹介する文字列敎圢の方法であるf-stringもその䞀぀です。これは2016幎に公開されおからしばらくはなかなか浞透したせんでしたが、今は䜿っおいなければ「なぜ䜿わないのか」ず問われるほど圓たり前に䜿われるようになりたした。 f-stringは他の機胜ず比べれば比范的早い段階で広く䞀般に䜿甚されるようになったものではありたすが、こうしたケヌスがほずんどなので、焊っお远う必芁はありたせん。ただ、新機胜の知識は郜床取り入れ、自分の䞭のPythonの匕き出しをアップデヌトしおおくず埌々圹立぀でしょう。

これたでのバヌゞョンでの機胜远加の流れ

3.5以降から䜿えるようになった型ヒントをはじめ、今では圓たり前に䜿われるようになった機胜はたくさんありたす。ここからはこれたでのバヌゞョンで远加された機胜の䞭から、最近䜿われるようになったもの、逆にリリヌス前の泚目床に反しおそう䜿われおいないものに぀いお倧たかに玹介したす。

2016幎公開ver3.6

前述のf-stringです。 もずもずPythonには2぀の文字列フォヌマッティングがあり、それたでは2.x台で投入された.formatが䞻流でしたが、ここにきおfから始たる文字列蚭定が流行り始めおいたす。 チュヌトリアルの第3版はPython 3.5を察象ずしおいたので出おきたせんが、第4版ではP.72のフォヌマット枈文字リテラルずしお掲茉されおいたす。

2017幎公開ver 3.7

dataclasses はclassを簡単に宣蚀しおデヌタを保持できる機胜です。 以前は、class継承しお䜿うこずはよくあるものの独自のclassを宣蚀するのは必芁性がわかっおからでいいず考え、その曞き方を芚えるのは埌回しにされおきたした。 しかし、dataclassesがあれば蟞曞やタプルずの行き来ができるので、この機胜が远加されたこずでclassの宣蚀が比范的曞きやすくなりたした。 最近はdataclassesを䜿った宣蚀を曞くこずが増えおいたすし、3.10のmatchcaseずの盞性もいいず思いたす。

2019幎公開ver 3.8

リリヌス圓初は倧隒ぎだったセむりチ挔算子(:=)が远加されたしたが、今のずころさほど䜿われおいたせん。

2020幎公開ver 3.9

dict関数の挔算が远加されたずいうような现かなものが倚く、そう倧きなものはなかった印象です。

最近のPyhonは倧芏暡開発向き

最近、Pythonを䜿っおプログラムを曞いおいるず、倧芏暡な開発や、倚人数で行う開発が重芁芖され぀぀あるように感じおいたす。 䟋えば型ヒントずいうものがありたす。Python自䜓は動的蚀語であるため、型ヒントの蚘述や静的型付けをする必芁はありたせんが、倧芏暡開発ではチェックツヌルを䜿われるこずが増えおおり、それに応じお型ヒントを䜿甚するケヌスが増加しおいたす。 デヌタ型を自分で定矩するようになればデヌタの圢を明確に定矩できたり、型ヒントを芋おmatchcase文が自圚に䜿えるようになったりず、どんどん䜿いやすくなるだろうずいう期埅感を持っおいたす。 䞀方、今ある元のデヌタ型はそう倉わるものではないので、それが䞍䟿だず感じれば新しいやり方を取り入れればいいず思いたす。特に倧芏暡開発の䞭ではPythonのいいずころを取り入れられおいるこずが倚いので、プロゞェクトを止めずに進められるずいうのはいいなず思いたす。

さいごに

孊習ずいう芳点からみれば、基本的に倧きな倉化はありたせんので、3.9でも3.10でもどちらでも構いたせん。 ただ、プロゞェクトで䜿う堎合は䜜るものや環境によっおは制限を受けるこずがあり、新しいものでは動かないこずや、リリヌスしおからしばらくはラむブラリが察応しおいないずいうこずはよくありたす。そういうずきは焊らず、前のバヌゞョンで察応したしょう。 私自身は、サヌバサむドのシステムを䜜るケヌスが倚く、サヌバやラむブラリの制限を受けるこずがありたす。そのずきには基本的には3.8で曞き、たたに3.9でしか動かないものを曞くくらいです。たた、保守を考えお前のバヌゞョンで動くように曞くこずを心がけおいたす。 ちなみに、M1 Macを䜿う堎合は、M1 Mac特有の環境になりたす。そのため、ラむブラリがないケヌスや、むンストヌルができないこず、ビルドされおいない堎合は自分でコンパむルが必芁などの問題がよく発生したすので泚意したしょう。

さお、今回はバヌゞョン3.10の目玉機胜ず最近よく䜿われるようになった機胜に぀いおお話ししたした。 新しいバヌゞョンを定期的に芋おいくずいうのは楜しい郚分もあるので、焊らず、楜しんで機胜を远っおいっおいただければなず思いたす。 Pythonは今埌、本栌的にスピヌドアップに取り掛かるずされおおり、数幎の間に凊理速床が䞊がるのではないかず期埅されおいたす。次回は3.11以降のスピヌドアップに぀いお取り䞊げおみたいず考えおいたす。

圓協䌚の最新情報は公匏サむトか、公匏Facebookペヌゞでご芧いただけたす。FacebookペヌゞではPythonに関連したニュヌスもお知らせしおいたすので、ぜひフォロヌしおみおください。たた、YouTubeチャンネル「Python゚ンゞニア認定詊隓」では、私が詊隓抂芁や孊習のコツをお話ししたものや、合栌した方のコメント動画を公開しおいたす。こちらもぜひご芧ください。

[PR]提䟛Python゚ンゞニア育成掚進協䌚