2系から3系へ、進化の陰にあった日本語対応とパッケージ管理
──Python 2.4の登場から20年が経ちましたが、やはり大きな変化としては2系から3系への移行でしょうか。
寺田:そうですね。Python 2というのは2.7まであって、2020年にサポートが終了しました。その2.7は10年間サポートが続き、その間に3系への移行が徐々に進んできたという感じでしょうか。今振り返ると、2016年、2017年頃、Pythonのバージョンでいうと3.5か3.6のあたりでPython 3に段々と移行できたと感じます。
当時はなかなか移行が進まず、Python 2の世界でやっていたことがPython 3では簡単にできない、大変な問題があって、すごく苦労したのを覚えています。私自身は3.5くらいからPython 3をメインにして、3.6で完全に移行しました。
Python 3での進化について、今の私にとって一番影響が大きいものを挙げると、型ヒントの導入ですね。Python自体は動的型付けの軽量に書ける便利なプログラミング言語ですが、型を指定することによって型安全になります。
もちろんヒントなので、完全に動的型付けというものを失ったわけではないのですが、この型ヒントによってコーディングのスタイルが変わりました。IDEでの支援を受けられたり、バージョンでいうと3.5、3.6あたりでこの機能が徐々に更新されてきたのですが、そこはすごく大きかったんじゃないかと思います。
他には、非同期処理が標準で入ってきたり、今となってはよく使われる型宣言を活用したdataclass(データを保持するためのクラス)を使えるようになったりしています。
──先ほど、2系から3系への移行に苦労した、というお話がありました。ここには文字コードのお話も含まれますか。
寺田:たしかにPython 3で内部で扱う文字コードがUnicodeになったことで、文字列の扱い方がPython 2から大きく変わりました。
Python 2の時代は文字エンコーディングを考慮せずにコーディングしていると、「Unicode Decode Error」というエラーを、日本をはじめアジア圏で利用している人たちはたくさん目にしてきました。これはもう本当に勘弁してくれと(笑)どうやったら直せるのか全然わからなかったです。
このエラーはライブラリの内部の構造が悪いのですが、ライブラリを使っている側からすると、なぜかそういうエラーが起きてしまう。そういう悩みがずっとあったのですが、Python 3になって、状況はずいぶん楽になりました。
Python 3では、内部はすべてUnicodeで扱うので、それによって面倒な部分は少しは増えたかもしれませんが、エラーがなくなったのは本当に大きかったです。これらの問題の修正は2系でももちろんやっていて、標準ライブラリが修正されたりしたんですが、そこはやはり3系になって大きく変わったなという感じがします。当時のことはもう思い出したくないですが(笑)

──そのような歴史を経て、現在の「Python 3.14」時点では、文字コードや日本語対応というのは完了しているのですね。
寺田:それが、まだもう一歩というところがあります。それがOSとのやり取りです。例えばWindowsのディレクトリパス名に日本語が入っていた時に、それを適切に処理できるか、これはプログラミング言語としては気をつけないければならない部分です。
といってもほとんどは対応が済んでいて、特に問題ない状態ですが、私が知る限り唯一残っているのは、ファイルを開くときにUTF-8が標準になっていないことです。これはどちらかというとあえて直していないもので、他に影響が出る可能性を考慮しながら慎重に対応を進めています。来年登場する「Python 3.15」では、ファイルを開く際にもUTF-8が標準になり、一通りの対応が完了すると聞いています。
これによって、ひとまず文字コードに関する長い長い戦いは終わるんじゃないかという気がします。
──文字コード以外ですと、パッケージ配布のエコシステムも1つのトピックでしょうか。
寺田:そうですね、20年前はPyPI(Pythonのパッケージ配布サイト)はなかったと思います。その代わりに別の配布サイトは存在したかもしれませんが、少なくともpipというパッケージマネージャーは存在しませんでした。まだpipで環境構築することができなかった時代です。
pipが標準導入されたのはPython 3.4で、PyPIというパッケージインデックスもしっかり整備されて、そのエコシステムはこの10年間、15年間で整備されてきたものなんじゃないかと思います。
──pipによる環境構築しか知らない私たちには、なかなかそれ以前のやり方の想像がつきません。改めて、この偉大さというか役割を教えてください。
寺田:Pythonは「batteries included」、電池が付属されているという言い方をずっとしていて、つまり一通りのよくある処理、やりたいことは、標準で提供する考え方があります。これを標準ライブラリといいますが、それをすごく充実させています。
その反面、個別のやりたいこと、例えばWeb開発やデータ分析とか、そういうものは外部のライブラリに頼るという方法になっています。そこのエコシステムはうまく出来ていて、先ほどの例でいえばデータ分析をしたいときにはサードパーティ製のパッケージが充実しているので。それがないとPythonがここまで使われることはなかったでしょうし、そういうものがPythonを支える1つの要素になっています。
──ありがとうございます。2章では言語仕様にスポットをあてましたが、最後の章ではコミュニティやPythonユーザーの変化について伺いたいと思います。
