Python

Python 3.12 リリース概要と 3.11 との比較・性能向上ポイント

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

1. 全体像とリリーススケジュール

項目 内容
正式リリース日 2023‑10‑02
対象バージョン CPython 3.12(公式ビルド)
主なテーマ 言語機能の拡張、標準ライブラリの整理・安全化、実行速度の改善

出典: Python Software Foundation, What’s New in Python 3.12【1】


2. パフォーマンス向上 ― CPython コアの最適化

2‑1. 改善ポイント(公式まとめ)

項目 変更内容
ガベージコレクタ 世代間スイープ回数を削減し、メモリ管理オーバーヘッドが約5 %低下【2】
関数呼び出し CALL_FUNCTION_EX の内部実装をインライン化。マイクロベンチマークで 10‑15 % の呼び出しコスト削減が確認される【2】
字句解析・バイトコード生成 ソース → バイトコード変換パイプラインを高速化し、スクリプト起動時間が平均5 %短縮【2】

2‑2. ベンチマーク例(公式 pyperformance データ)

ベンチマーク Python 3.11 (sec) Python 3.12 (sec) 改善率
pyperformance 総合スコア 1.00 0.91 9 %
json.loads(10 MiB JSON) 0.84 0.77 8 %
list.sort(1,000,000 要素) 0.36 0.33 9 %
asyncio タスクスイッチ 1.12 1.02 9 %

※ベンチマークは What’s New in Python 3.12 に掲載された pyperformance スイートをもとに算出【1】。実運用コードでは「CPU バウンド」「I/O バウンド」どちらでも 5‑15 % のスループット向上が期待できる。


3. 言語機能の拡張

3‑1. エラーメッセージとトレースバックの改善

  • 列情報の表示
    行番号だけでなく、エラーが起きた も示すことで、同一行に複数ステートメントがある場合でも正確な位置を把握できる。
  • 修正提案
    NameErrorImportError の際に「Did you mean 'os'?」といった候補が自動提示され、タイポの早期発見が容易になる。

3‑2. PEP 695 による 型パラメータ構文 の本格導入

PEP 695(2023‑06)で追加された type キーワードは、型変数の宣言と同時にエイリアスを作れる 構文として利用できる。

  • TypeVarTupleParamSpec の位置付け
    これらは従来通り typing に残るが、PEP 695 の構文内で直接使用できるようになった(「統合」ではなく「利用しやすくなった」)。既存コードの書き換えは不要だが、新規実装では type と組み合わせてシンプルに表現できる。
  • 静的解析ツール は公式サポートを開始(mypy 1.8、pyright 1.1.351 以降)【3】。

3‑3. f文字列内の式評価は既存機能

Python 3.6 から 任意の Python 式{} 内で評価可能であり、比較演算子 == や論理演算子 and/or も問題なく使用できる。
したがって「f文字列に等価比較演算子 == が新たにサポートされた」という記述は誤りである。実務上は次のように利用できる。


4. 標準ライブラリの変更点

4‑1. tomllib(読み込み専用)

  • 提供機能: tomllib.load, tomllib.loads に限られる。
  • 書き込み (dump/dumps) は公式には未実装であり、外部ライブラリ tomli-w などを併用する必要がある【4】。

4‑2. zoneinfo の改善(自動更新コマンドは非搭載)

  • IANA タイムゾーンデータ は従来通り OS パッケージか、ユーザー側で手動取得が前提。
  • Python 3.12 では内部キャッシュ機構が最適化され、同一プロセス内でのタイムゾーン情報取得コストが約30 % 減少した【5】。
  • python -m zoneinfo --update のような自動更新サブコマンドは存在しない。

4‑3. collectionscollections.abc

変更前 (Python 3.11) 変更後 (Python 3.12)
from collections import MutableMapping(非推奨) from collections.abc import MutableMapping に置き換え、古いインポートは DeprecationWarning が出る【6】
MutableSequence, MutableSet など同様 同上

4‑4. デバッグ・プロファイリングツール

ツール 主な追加機能
pdb コマンド履歴が自動的に .pdbrc に保存され、次回起動時に復元可能。display コマンドで任意式のリアルタイム評価を常時表示できる。
faulthandler デフォルトで全スレッドのスタックトレース取得が有効化。クラッシュ時に SIGSEGV などのシグナルから得られる情報が大幅に増加【7】。

5. アップグレード時の互換性チェックリスト

5‑1. 削除・非推奨 API の代表例

カテゴリ Python 3.11 → 3.12 の変更点 推奨代替
distutils パッケージ 完全削除(PEP 632) setuptools, sysconfig
collections の古い抽象基底クラス MutableMapping などのインポートが非推奨 collections.abc.MutableMapping
parser モジュール 非推奨 → 将来的に削除予定 ast.parse を使用
asyncio.get_event_loop()(暗黙取得) 呼び出し時に DeprecationWarning 発行 asyncio.get_running_loop() へ置換

詳細は What’s New in Python 3.12 の「Deprecated APIs」章を参照【1】。

5‑2. 実務向け導入手順

  1. ローカル環境での検証
    bash
    python -m venv .venv-3.12
    source .venv-3.12/bin/activate
    pip install -U pip setuptools wheel
    pip install -r requirements.txt
    pytest -q
  2. CI/CD の Python バージョン更新
    yaml
    # GitHub Actions の例
    jobs:
    test:
    runs-on: ubuntu-latest
    strategy:
    matrix:
    python-version: ["3.12"]
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python
    uses: actions/setup-python@v5
    with:
    python-version: ${{ matrix.python-version }}
    - run: pip install -r requirements.txt
    - run: pytest
  3. 型チェックの再実行(PEP 695 対応)
    bash
    mypy --strict src/
  4. 非推奨 API の置換
  5. collections 系は一括検索/置換ツールで MutableMappingcollections.abc.MutableMapping に変更。
  6. distutils がインポートされている箇所は setuptools もしくは標準モジュールへリファクタリング。

  7. パフォーマンス測定(任意)
    bash
    python -m cProfile -o profile_3.12.prof your_app.py
    snakeviz profile_3.12.prof

    旧バージョン (python3.11) と比較し、期待通りの速度向上が得られるか確認する。

5‑3. チェックリスト(実装者向け)

  • [ ] Python バージョンを 3.12 に切替えた仮想環境で全テストが成功する
  • [ ] distutils のインポート・使用箇所をすべて削除または代替に置換
  • [ ] collections の古い抽象基底クラスインポートを collections.abc に変更
  • [ ] 依存ライブラリが 3.12 対応pip list --outdated で確認し、必要なら更新
  • [ ] 静的型チェック (mypy, pyright) がエラーなしで完了する
  • [ ] プロファイル測定結果が公式ベンチマークと同等(5‑10 % の速度向上)であることを確認

6. まとめ

項目 Python 3.12 の特徴
言語機能 PEP 695 による型パラメータ構文、改善された例外情報、既存の f文字列式評価はそのまま利用可
標準ライブラリ tomllib は読み込み専用に留まり、zoneinfo の自動更新コマンドは未実装。非推奨 API が体系的に整理され、デバッグツールが強化された
パフォーマンス ガベージコレクタ・関数呼び出し・バイトコード生成の最適化で平均 8‑10 % の速度向上(公式 pyperformance データ)
移行コスト 主に distutils と古い collections 系の置換、CI 設定のバージョン更新程度。互換性チェックさえ実施すれば大規模障害は起きにくい

結論:Python 3.12 は「安全性・可読性・速度」の三側面で前バージョンを上回る成熟版となっている。既存プロジェクトが依存している非推奨 API を把握し、上記チェックリストに沿って段階的に移行すれば、実務上のメリット(デバッグ効率向上+数パーセントのスループット改善)を確実に享受できる。


参考文献

  1. What’s New in Python 3.12https://docs.python.org/3/whatsnew/3.12.html
  2. PEP 695 – Type Parameter Syntaxhttps://peps.python.org/pep-0695/
  3. mypy 1.8 Release Notes, pyright 1.1.351 Release Notes – 各公式ドキュメント
  4. tomllib – TOML parserhttps://docs.python.org/3/library/tomllib.html(読み込み専用)
  5. zoneinfo performance improvements – Python dev‑mail archive, 2023年6月号
  6. Deprecations in Python 3.12https://peps.python.org/pep-0642/(collections の非推奨項目)
  7. faulthandler enhancementshttps://docs.python.org/3/library/faulthandler.html#enhancements-in-python-3-12

スポンサードリンク

-Python