PyMySQLのメンテナにSQLAlchmey開発者のMike Bayer (@zzzeek)さんが参加しました

このブログでも数回紹介していたとおり、今メジャーな PythonMySQL ドライバ3つのうち2つ (MySQL-python の fork の mysqlclient と PyMySQL) を僕がほぼ単独でメンテナンスしている状況でした。

メンテナンスしているといっても、両方とも MySQL-python との互換性を第一に掲げているので、 Python 3 対応が終わった後はほとんど進化は無くて、淡々とバグの修正を積み重ねては1年に1度以上リリースするという程度です。

実際には Python では PostgreSQL 周りに比べて MySQL 周りは遅れていて幾つか改善案はあったのですが、子育てや他にも Python でやりたい事があったり仕事でも Go で楽しんでたりして手を付けられていませんでした。

そんな状況の中、 Mike さんが PyMySQL-Users ML に突然投稿をされました。 OpenStackの開発でPyMySQLを利用する事を検討していて、問題点・改善点が上がっているんだけど、PyMySQL側にプルリクエストなどを受け入れる準備があるかどうかを質問するものでした。

もともとmysqlclientとPyMySQLも個人でメンテナをするべきでないと思っていましたし、MikeさんはPythonで一番高機能なORMであるSQLAlchemyの開発者、そしてOpenStackといえば今Pythonで最も活発なプロジェクトの1つと呼べる巨大プロジェクトです。このチャンスを逃す手はありません。すぐにGithubのPyMySQL Organization に追加することを提案し、快諾してもらいました。

PyMySQLは性能や非同期対応についてのアイデアがあって、これはまさに OpenStack でも求められているものなので、これからOpenStackコミュニティと協力して進化させていこうと思います。

一方 mysqlclient は、最近 MariaDB が非同期APIを追加した MySQL Connector/C をリリースしているので、それに対応させる手段を検討していたのですが、ビルド時に上手く検出できるのか、PyPyでの速度を上げるために ctypes か cffi を使う別プロジェクトを fork するべきか、その場合 CPython では速度低下するけどどうするか…といった問題があり、メンテナンスコストと両立する解決策が見つかってなかったので、これを機に考えるのをやめることにします。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。