PyCon JP 2026

Pythonの実行はどこまで賢くなったのか:CPythonとPyPyから見る最適化のしくみ

Pythonは読みやすく書きやすいだけでなく、処理系の進化によって実行性能の面でも少しずつ賢くなっています。CPython 3.11以降の高速化、Python 3.13/3.14のexperimental JIT、そしてJITを実用的に活用しているPyPyなど、Pythonコードを効率よく動かすための仕組みは広がっています。一方で、それぞれが何を見て、どのように速くしているのかは、普段Pythonを書いているだけではあまり意識しないかもしれません。

本セッションでは、短いPythonコードを題材に、Pythonが実行されるまでの流れと、実行中に行われる最適化のしくみを示します。あわせて、処理が遅いときにボトルネックの性質をどう見立て、CPythonの最適化、PyPy、NumPy、C拡張といった選択肢をどう考えればよいのかも整理します。

ソースコードは、プログラムの構造を表すASTに変換され、次にCPythonが実行しやすい命令列であるバイトコードになります。さらに近年のCPythonでは、実行中に観測された型や操作に応じて、バイトコード実行を効率化する仕組みがあります。AST、バイトコード、JITといった言葉を知らなくても追えるよう、足し算やループ、関数呼び出し等を例に進めます。

また、PyPyが競技プログラミングなどで選ばれる理由や、反対にNumPyやC拡張との相性で注意が必要な点も、CPythonとの比較から整理します。一方で、Pythonの最適化はgccのような静的コンパイラとは前提が異なり、何でも強力に機械語へ最適化できるわけではありません。「型ヒントを書けば速くなるのか」「PyPyにすると必ず速いのか」といった疑問を通じて、Pythonの速さを複数の層に分けて理解し、日々のコードを見る視点を増やすことを目指します。

Tell us about your own experience with this topic

これまでPyCon JPの登壇で、Pythonの数値型やスレッドやGIL/NoGILなど、CPythonの内部実装に関わるテーマについて発表してきました。普段から、Pythonの機能を単に「使えるもの」として見るだけでなく、その裏側でどのようなしくみで動いているのかを伝え、普段は聞かない話を持ち帰ってもらうことを心がけています。

また、これまでの業務において、コンパイラ、LLMの推論実行、アセンブラレベルの最適化など、プログラムが実際にどのように解釈・変換・実行されるのかに関わる領域にも触れてきました。静的コンパイラが事前に行う最適化、JITが実行時の情報を使って行う最適化、そしてCPythonのような動的言語処理系が安全に行える最適化には、それぞれ異なる制約と面白さがあります。

今回の発表では、そうした背景を活かしながら、AST、バイトコード、CPythonの特殊化、PyPyのJITといった話題を、単なる内部実装の紹介ではなく「Pythonコードがどの層でどのように速くなり得るのか」という視点で整理します。
普段書いているPythonコードを見る視点に色がつくような発表にします

What discussions can you have with attendees through this talk?

この発表をきっかけに、Pythonコードの性能を考えるときに、どの層を見ればよいのかについて議論できると考えています。
たとえば、CPythonの特殊化で効きやすい処理、PyPyを試す価値がある処理、NumPyやC拡張に寄せたほうがよい処理、そもそもアルゴリズムやデータ構造を見直すべき処理は、それぞれ性質が異なります。

また、「型ヒントは実行速度に効くのか」「JITは何でも速くするのか」「gccやJavaScriptエンジンの最適化とPython処理系の最適化は何が違うのか」といった、普段なんとなく理解されがちな話題についても、実行時の観測や処理系の制約という観点から議論できます。

The speaker's profile picture
curekoshimizu

京都大学理学部に首席で合格し京都大学大学院を経てエンジニアの道へ。新卒のFixstarsではExecutive Engineerとして組織リードし上場を経験。その後Mujinではアーキテクト。続くPreferred NetworksではEMを務めるとともに、物流部門の立ち上げを主導。HacobuではCTO室室長・研究開発部部長として着任。2024年5月よりRecustomerにCTOとして参画。Pythonは10年以上つかっており、大好きな言語です!