Archive

みんなのPython勉強会#77 (#stapy)で Python3.6から3.10までの変更振り返りの話をさせてもらった

先日主催の一人であるあべんべんさん(@abenben)にお声がけいただき、 久しぶりにみんなのPython勉強会で登壇させていただきました。

スライド

ref. Python3.6から3.10までのおよそ5年間の間の進化を振り返る - みんなのPython勉強会#77

内容としてはタイトル通りで Python3.6 から Python3.10 の間にどんな新機能が入ったかをざっくりまとめたものです。ただ、まとめたとはいえ、30分で質疑応答含めて話しきれそうなものに絞っているので到底網羅的には紹介はできていません(Python3.6周辺であった非同期周りの機能の追加などカットしているもの多くあります)。

なぜ Python3.6 からにしているかという点で言えば、去年にEOLを迎えたバージョンであるということと、完全に個人的な事情ですがスラスラわかる第1版の対応バージョンがPython3.6だったということが挙げられます。また更に個人的な感覚で言えば Python3.6 あたりから Python3 系が主流になりはじめ、Amazon Lambda をはじめとするマネージド・サービスでも多くサポートされるバージョンとなった記憶があることも相まっています。

当日回答しきれなかったQ&A

いただいていたQ&Aに対して、私なりの考えを回答してみます

Pythonに限らず新しいバージョンや機能を使う場合は、チーム内のエンジニアとどのように調整しあうか何かよい方法はありますか?こういった切り替えには踏み込めないものなので。。。

開発しているシステム・アプリケーションの種類や規模、そしてそのチームがどういった趣向かに依存するところも多いので一概にこうすべきという答えは残念ながら思いつきません。ですが、新しいバージョンを導入するメリット(例えば新しいシンタックスを採用することで冗長な書き方を回避できる、システムパフォーマンスの向上が期待できるなど)とアップデートをしないデメリット・リスク(利用しているライブラリのサポート終了、マネージドサービスでのサポート終了、環境の再現が困難になっていくなど)は提示していく必要はあると思います。

提示の方法もチームのワークフローによってやり方は考える必要がありそうですが、例えばGitHub IssueやJira、Redmineなどである程度自由に起票をできる習慣があればそこで情報を取りまとめつつ提案することはできそうです。またスプリントを行っているのであれば、レトロスペクティブのタイミングでプロブレムとして問題提起をしたり、プランニングのタスクに入れられないか相談するといったやり方はできそうな気がします。1on1がある場合は、そこで一旦自分の考えを示して、展開方法を相談するのも良いかもしれません。どんな方法であれ、工数をとって対応する必要があることなので、チーム・組織で取り組むべき課題と認識してもらわないと厳しいとは思うので、チームの状況に合う方法で勇気をもって提案していく必要はあると思います。

3.11にはどのような機能が入りますか?

2022-02-01 時点では 3.11.0a4 がリリースされているようで、以下のページに変更内容がまとまっています。公式のドキュメントですので、このWhat's newのページを見るのが一番確実だと思います。

まだすべてが確定しているわけではないでしょうが、例えば新たに PEP 654 が採択されるようで、複数の例外を扱える Exception Groups という機能とそれを扱うための except* 節が利用可になるようですね。

Pythonで型を書くメリットはどのような時でしょうか?

一般的に言われるのは、VS CodeやPyCharmなどのIDEの強力な開発支援機能を生かせるというものがあります。 例えば、VS Code の Python Docstring Generator という docstring を生成してくれるプラグインでは、型ヒントの記載があるとそのまま docstring の内容に反映されます。

私の個人的な感覚では、関数定義の際に型を書いて置くことでその引数の役割がより明確になり、いい加減な実装や設計を未然に防ぐのに役に立っている感じはあります。(その引数が list でも dict でも処理できる関数を書いてしまうとか)あくまで定性的なものではありますが。そのため、規模の大きなアプリケーションであったり、自分以外の人間もメンテナンスに関わる機会が多いのであれば基本的に書いておいた方が良いと考えています。

ただ、基本的には型は書いておいた方が便利な事が多いと考えつつも、書いているコードがどういったものなのかにもよるところはあるかなとも思っています。特に1ファイルだけの小さなタスクをこなすためのスクリプトであれば、標準的な(str, int, list, dict などの)型ヒントのみを書いて、サードパーティーライブラリ関連の型はコメントでオブジェクトの元となるクラス名を書く程度で済ませてしまうことも多いです。これは、私個人的には小さなタスクをこなすための1ファイルスクリプトの場合、目の前の問題を解決する事の方が優先度は高いと考えているためです。

バージョンが新しいとIDEやプラグインなどに影響が発生することは有りますか?VSCodeやPyCharmはどの程度最新に追随してくれるものなのでしょうか?

(プラグインというものが、VS Code等のコーディングを行うエディタ向けであるものと仮定して回答します)

私の観測範囲の話にはなってしまいますが、PythonのバージョンをあげることでIDEやテキストエディタのプラグインが全く利用できずに困ったという話はあまり見かけません。Pythonそのものの新しい機能に追従できていない(例えばPython3.10のパターンマッチングのシンタックスハイライト)という事はあるかもしれませんが、リリース後しばらくすれば余程の事が無い限り追従されているイメージです。

どちらかと言えば、テキストエディタのプラグインそのもののバージョンアップによる仕様変更による影響の方が、個人的に多い感覚があります。

感想とか

前回呼んでいただいたのが第33回で実に4年ぶりに参加させていただいた感じです。前回同様、書籍の出版に絡めてお声がけいただいたこともありとてもありがたい限りです。

ただ、お声がけいただいてから家庭や業務状況が想定外にとてつもなく忙しくなってしまい、なかなか準備に時間が割けずで準備にあたって運営皆様にはご迷惑をおかけしてしまいました🙇

当日はいただいていた時間よりもかなり早めにトークが終了してしまったのですが、ありがたいことに多くの質問をいただきその応答に時間を回すことができたので結果オーライだったかなという感じです。また、質疑応答の際には特に @tsjshg さんの進行にとても助けられた感じがありました。対談に近い形で質問に答える流れは私自身とても楽しんで答えることができました。Zoom チャットでも @aodag さんからも一部フォローいただきとても助かりました。本当にありがとうございました。

リモート会での初参加ではありましたがリモートの勉強会でありながら、会自体の雰囲気の良さみたいなものも感じました。 スライドのアップロードに手間取ってしばらく残っていた感じだったのですが、結果的に懇親会でほどよい軽さで色々お話しできて楽しかったですし、最後まで残っていてよかったなと思いました。こういう雰囲気なら、時間に余力があるときは参加者としてまたお邪魔したいなと思いました。