こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。
2025年10月7日にPython3.14が予定通りリリースされました。
今回はバージョンアップで追加された機能の中から目玉機能についてお話したいと思います。
Pythonのバージョンアップにおける基本的なこと
さて、Pythonは年1回、10月頃に新バージョンがリリースされるが決まっています。今回、2025年10月7日にPython3.14が予定通りリリースされ、来年は3.15が同じく10月ごろにリリースされることになります。
現時点では保守期間は5年間と決まっていますので、2025年10月にEOLを迎えるPython3.9は最期のセキュリティバグフィックスが出ればサポートが終了することになります。
以下のページにリリースサイクルが掲載されていますので、こちらのページを確認しておくと今の状況を見ることができて便利なので、適宜ご確認ください。
https://devguide.python.org/versions
ちなみに、Python3台はもう長く続いていますが、今後もしばらくPython3台で運用されることはステアリングカウンシルが公式に述べており、Python4が来る未来は現段階ではありません。
- 使うバージョンの選び方
私が何かを作る時、最新のものに飛びつかないというのが信条です。今なら3.12か、稀に3.11を選択します。もちろん、古いものを選ぶのが良いというわけではありませんが、古いバージョンは技術的に習熟していたり、サードパーティ製ライブラリの対応が済んでいたりと安定しています。むしろ古いバージョンに対応したものしかないというケースもあります。そのため、もし最新のバージョンを使うとしても、リリースから数か月経ってから採用するようにしています。
今は3.14がリリースされたばかりで、3.14に対応しているパッケージがない可能性が高いため、今考えるのなら、3.13を使うと安定していて良いと思います。
とはいえ、1年に1度、新しいものが出てくると決まっていますので、古いものを使い続ける必要性もないだろうなとは思っています。特に、Python3台は相互換性がかなり保たれていますので、基本的に古いPythonのバージョンで作られたコードが新しいPythonで使えないということはありません。ただ、稀に予約語が増えたり、一部の機能がなくなったりといったことがあるため、そういったときには新しいPythonでは動かないということが起きる可能性があります。非常に少ないケースではありますので、安心してバージョンアップをしてもらって問題ないと思いますが、バージョンアップをする際はもう一つ環境を用意し、テストをして適切に動くか確認しましょう。用意されているドキュメンテーションを適切に読んでいけばそう難しいことはなく移行できるのではないかと思います。
Python3.14の新しい目玉機能について
Python3.14では、久しぶりに新しい目玉となる機能が入りました。リリースノートを確認すると、圧縮系のライブラリや対話モードの進化、型ヒント周りの改善などの細かいものも実際にはありますが、大きなものとしてはこの3つになるかと思います。
◆t-string(テンプレートストレーティング)
こちらはf-stringに似た表現(fを頭に書いてから文字列を宣言)で書くことができるもので、「f」の代わりに「t」をはじめに書きます。f-stringの場合は文字列の宣言になりますが、これは文字列オブジェクトではなく、テンプレートオブジェクトという新しいオブジェクトが返ってくる言語仕様となります。これが今回のバージョンアップで一番大きな変化なのかなと思っています。
現段階ではこのt-stringを使ったより良い事例というものほとんど無いのですが、今後、標準ライブラリの内部実装などの一部がこのt-stringを使うものに変わる可能性はあります。また、t-stringをサポートした標準ライブラリを経由することで利用されるというケースというのも徐々に出てくると考えられます。
現段階の利用用途の想定としては、HTMLテンプレートを作る際にt-stringを使ってHTMLを表現したり、SQL文の中にt-stringを使ってSQL文を安全に生成したりといったサードパーティ製ライブラリが対応していくという動きもあります。
その背景には、f-stringでHTMLやSQLを組み立てることはしてはいけないという理由があります。なぜかと言えば、SQLの場合、SQLの中に不正な文字列が入ることで、SQLデータベースに問い合わせる際に、余分なものまで出力されてしまったり、SQLで何かしらの操作がされる際に本来はしたくない動作が発生してしまったりといったことがあります。つまり、SQLインジェクションを起こしてしまう可能性が出てくるということです。f-stringの場合や.formatなどでSQL文を組み立ててしまうとSQLインジェクションの恐れが出てきてしまいます。
また、HTMLを組み立てる場合に、f-stringでHTMLに直接記述すると、scriptタグが中に埋め込まれて実行されてしまう可能性があるため、クロスサイトスクリプティングの恐れが出てきます。
そのため、SQLの場合はORマッパーや適切に文字列を処理してくれる方法などの手法を使い、f-stringや.formatを使わずに組み立てます。
また、HTMLを書く際には、Jinja2のようなテンプレートエンジンが使用されます。テンプレートエンジンにはクロスサイトスクリプティングを防止する機能が必ず入っていますので、これらを使用して安全なHTMLを出力するように心がけるというようになっています。
今後、t-stringを使いHTMLを生成するような良いものができてくれば、簡単なHTMLのテンプレートをt-stringで書けるようになりますので、デファクトスタンダード的なものが出てくるかと思います。そうなればわざわざテンプレートエンジンを導入する必要もなくなりますし、既存のテンプレートエンジンがt-stringを使った新しいテンプレートエンジンとして、登場する可能性もあります。
また、t-stringはテンプレートオブジェクトを返すため、文字列になるものではなく、t-stringを宣言した時点では途中に処理を加えないと利用できません。ですが、その後の処理によって、例えばHTMLに対してクロスサイトスクリプティングが仕掛けられて防止されたらHTMLになったり、安全なSQL文になったり、またはほかのアイディアが出てくることが期待されています。
実際に私もいろいろ試していますが、遅延評価などもt-stringとうまく組み合わせることで出来るようになります。今までの文字列の生成方法とちょっと変わってくるため、Pythonのコードも簡潔で読みやすく、実装しやすくなってくるのではないかと期待をしているところです。
ただ、すぐにt-stringに飛びついても、今の時点ではそんなにいいことはないと思います。ライブラリを作る側としては、いろいろな可能性を考えられますが、使う側が普通にライブラリを使ってコーディングをしているような段階であれば、どうしてもt-stringを使う、もしくは学ばなければならないという状況ではないかなと思っています。
◆フリースレッティング
Pythonのバージョンアップで、フリースレッティングをどのように実現するか、ずっと取り組んできましたが、今回のバージョンアップで正式にサポートされることが決まりました。
これまで、GILと呼ばれるグローバルインタープリターロックという問題を抱えていました。これは、複数のスレッド間で同時にメモリーアクセスしないようにすることで、安全にコードを動かすという仕組みですが、これによってスレッディング化しても、そんなにPythonのパフォーマンスが上がらないといった問題を引き起こしていました。コアチームはこの問題の解消に以前から取り組んでおり、直近のバージョンでPythonの内部に実験的に組み込んでいましたが、今回の3.14からはオフィシャルサポートという形で提供されることになりました。ただ、Python3.14を入れればフリースレッティングがそのまま利用できるというものではなく、オプションで採用できるようになっていますよという形での提供です。というのも、まだまだこのフリースレッティングを使って動かした方が良いという状況にまで至っていないためです。ただ、徐々にフリースレッティングを上手く動くようにしていかなければなりませんので、実験という段階から正式にサポートを開始する段階に移ったということです。
フリースレッティングはオプションのため、使うには切り替える必要があります。
私自身はまだ試していませんが、フリースレッティングの導入によって速くなる部分はもちろんあると思いますが、部分的に遅くなってしまう部分も出てくる可能性はあるのではと思っています。また、標準ライブラリやサードパーティ製ライブラリが確実に動くかについても、まだ怪しいところはあります。だからこそデフォルトではオンにせず、内部的に使える状況だということに留めている可能性があると思っています。
とはいえ、正式にサポートされ始めたこと自体は素晴らしいことで、次の段階に一歩ずつ進んでいるんだなと感じています。よほどの事情がない限り、今の時点でこれを意識することはないと思いますが、適切な形でどんどん良くなっていくという意味での進化は見えていると思います。
◆インラインでデバックしやすくなる機能
実際に動いているものの中の状況を見たい場合、デバックコードを入れてその状況を発生させるというのがよくあるパターンですが、状況の再現性の難しさやシステムを止める必要があります。
今回、外側からオーバーヘッドなしでデバックができるデバックインターフェースが内部実装されました。これによって普通に動かしているときに内部の状況を見ることができるようになります。
この機能はシステムのプロセスIDを持ってきて、プロセスIDを使って別のPythonのコードを実行させ、外部から実際の内部の状況を見に行くことができます。
見た目にはわかりにくい機能ではありますが、とても便利ですごい機能です。実際にはやってみないと使い心地などはわかりませんが、これまでできなかったことができるようになる新しい大きな進化です。
Python3.14のリリースでPython試験への影響はあるか?
現在提供している試験については、まだバージョンが古いものが結構残っています。
例えば、バージョンが上がっていくことによって、if文ではなくmatchケースで書く、ライブラリの変化、型ヒントがより高度に書けるようになっているといった状況や、今回のようなt-stringなどの新しい機能が追加されるといった状況は確かにありますが、Python3全体で考えると、基本的な考えは変わりませんので、古いバージョンで学んだからダメというものはありません。
中には古いもので学習することを心配する人もいると思いますが、そんなに心配せず、まずはPythonの基本的な部分を今ある教材で学習してもらえればと思います。
さいごに
Pythonのリリースの考え方として、慌てて急な変更をさせないというものがあります。丁寧にゆっくり周知のための時間を取ったり、他のサードパーティ製ライブラリを含めた様々なものが動作するかを一つずつ確認しながら新しいものをリリースしています。
Pythonの進化が遅いと思われることもありますが、進化を急ぐよりもみんなが安心して使えるものをリリースするという心掛けが表れているものだと思いますので、安心して使ってみてもらえればと思います。