Python 3.15が2026年10月9日(現地時間)に正式にリリースされました。公式の「What’s New」には、明示的な遅延インポート(PEP 810)、組み込みのfrozendict(PEP 814)とsentinel(PEP 661)、既定のエンコーディングがUTF-8になる変更(PEP 686)などが載っています。3.15で既存の環境に影響しやすいのは、UTF-8が既定になる点と、Windows版のインストール方法の変更予告です。
この記事では、公式ドキュメントとリリースを報じた窓の杜の記事をもとに、Python 3.15の主な変更点と、アップグレード前に確認したいことを整理します。
ニュースの概要
公式ドキュメント「What’s New In Python 3.15」は、Python 3.15が2026年10月9日にリリースされたと記しています。日本の窓の杜は10月13日付の記事で、Python 3.14に続く年次のメジャーアップデートであること、1,012人のコントリビューターによる5,643件のコミットが含まれること、リリースから5年間(2031年10月まで)サポートされることを報じています。
何が変わるのか
言語とインタープリターの主な変更
- 明示的な遅延インポート(PEP 810):
lazy import jsonのようにlazyを付けると、モジュールが最初に使われるまで読み込みが遅れます。モジュールのトップレベルでのみ使え、起動オプション-X lazy_importsや環境変数PYTHON_LAZY_IMPORTS(値はallとnormal)で動作を切り替えられます。 - frozendict(PEP 814):変更できない組み込みの辞書型で、すべてのキーと値がハッシュ可能なときは、自身もハッシュ可能です。
dictを継承せず、objectを直接継承します。 - sentinel(PEP 661):一意の番兵値を簡潔に作れる組み込みです。
- UTF-8が既定のエンコーディングに(PEP 686):
open()などでencodingを指定しない場合、システム設定に関係なくUTF-8が使われます。従来の動作に戻すには、PYTHONUTF8=0または-X utf8=0を指定します。 - 内包表記でのアンパック(PEP 798):
[*L for L in lists]のように、内包表記やジェネレーター式で*と**が使えます。 - エラーメッセージの改善:存在しない属性にアクセスしたとき、
Did you mean '.inner.area' instead of '.area'?のような候補が出る例が公式に載っています。
標準ライブラリとプロファイリング
PEP 799で、専用のprofilingパッケージが加わりました。profiling.tracingとprofiling.samplingを含み、cProfileは別名として残りますが、profileは3.17で削除される予定の非推奨になりました。サンプリング型プロファイラー「Tachyon」は、実行中のプロセスに再起動なしでアタッチして解析できると説明されています。
性能とビルド
実験的なJITコンパイラーが強化されました。窓の杜は、x86-64のLinuxで標準インタープリターに対して幾何平均7〜8%、AArch64のmacOSでtail-calling interpreterに対して11〜12%の高速化が見込まれると伝えています。ただし、JITは実験的な機能にとどまります。また、Windowsの公式64ビット版はtail-calling interpreterを採用し、サポートするプラットフォームではフレームポインターが既定で有効になります(PEP 831)。
型ヒントとC API
型ヒントでは、TypedDictの拡張(PEP 728)、TypeForm(PEP 747)、disjoint bases(PEP 800)が加わりました。C APIではPyBytesWriter(PEP 782)が導入され、フリースレッドビルド向けの安定ABI(abi3t)も用意されました。
読者への影響
最も影響を受けやすいのは、Windowsで日本語を扱うスクリプトです。これまでopen("memo.txt")のようにエンコーディングを省略すると、OSのロケール設定に応じたエンコーディングが使われていました(一般に、日本語版Windowsではcp932系になります)。3.15では省略時もUTF-8になるため、cp932で保存された既存ファイルを読むコードは、そのままでは文字化けやデコードエラーになるおそれがあります。
逆に、これまでencoding="utf-8"を明示していたコードには、ほとんど影響がありません。新しく書くコードでも、読み書きするファイルの文字コードを明示する書き方が、バージョンをまたいで安全です。
Windowsのインストール方法にも変更予告があります。窓の杜によると、バージョンごとのフルインストーラーは3.15が最後で、3.16以降は「Python Install Manager」(pyコマンド)に一本化される予定です。社内の手順書やセットアップスクリプトでインストーラーを直接指定している場合は、見直しの準備が必要です。
また、.pthファイル内のimport行は、警告は出ないまま非推奨扱いになりました。パッケージの起動時処理で使っている場合は、PEP 829で導入された.startファイルへの移行の検討が必要です。
確認すること
- 自分のコードで、
open()やPath.read_text()などにエンコーディングを指定していない箇所を洗い出し、扱うファイルの文字コードを確認する。 - cp932などの既存ファイルを読む処理は、
encoding="cp932"を明示するか、検証環境でPYTHONUTF8=0を付けて挙動を比べる。公式は、encodingを常に明示することと、encoding='locale'の指定、encoding warning(-X warn_default_encoding)による洗い出しも案内している。 - 使っているライブラリが3.15に対応しているか、各プロジェクトの対応状況を確認する。リリース直後は未対応のものもあり得ます。
- 本番環境には、まず検証環境や仮想環境で3.15を試し、テストを通してから移行する。
- Windowsのセットアップ手順で、インストーラーに依存している箇所がないか確認する。
JavaScript側の最近の動きは、Node.js 26.11.0が公開、buffer・httpにAPI追加しsqliteは名称変更でまとめています。
筆者の見解
私見では、3.15で最初に手を付けるべきなのは、新しい構文よりも「encodingを省略しているコードの棚卸し」だと考えます。UTF-8の既定化は、例外を出さずに挙動が変わる場面があり、Windowsで旧来の文字コードのCSVやログを読む処理ほど、テストで見落としやすいからです。PYTHONUTF8=0で元の動作に戻して済ませるのは移行期間の一時しのぎにとどめ、公式が案内するencoding warningで該当箇所を洗い出して、encodingを明示する方向で直すのが、手戻りが少ないと考えます。一方、lazy importやJITは効果が環境によって大きく変わるため、アップグレードの理由にするのではなく、自分のワークロードで測ってから採用を判断するのが妥当だと考えます。
出典(一次情報)
- Python documentation:What’s New In Python 3.15
- 窓の杜:「Python 3.15」が正式公開 ~UTF-8が標準に、“番兵値”などの新しい言語機能も(2026年10月13日)
2026年10月13日時点の情報です。
