一般社団法人Pythonエンジニア育成推進協会(以下、当協会)の顧問理事の寺田学です。 私は試験の問題策定とコミュニティ連携を行う立場です。 Python3エンジニア認定基礎試験の主教材が9月から変わりましたので、前回は新たに教材と指定したチュートリアル第4版についてと、チュートリアルやバージョンアップとの付き合い方についてお話ししました。 今回は10月4日にリリースされたPython3.10の新機能や、これまでのバージョンアップで追加された機能の中から最近よく使われるようになってきた機能について紹介したいと思います。
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以降のスピードアップについて取り上げてみたいと考えています。
[PR]提供:Pythonエンジニア育成推進協会