PyCon JP 2020 で弊社メンバーが発表しました


2020年 09月 04日

CTOの小宮です。

先月開催された PyCon JP 2020で「How Sphinx generates document from Python code」というテーマで発表してきました。

トークの内容はちょっと濃い目で、Sphinx の autodoc をテーマに Python コードの動的および静的なコード解析方法を解説するいうものでした。

普段から Python のコードを書いている方でも、この手のコード解析をする機会は少ないと思います。

自分も Sphinx のメンテナンスをするまでは inspect や ast 、tokenizeといったモジュールには触れる機会が殆どありませんでした。

しかし、開発の中で普段つかっている flake8 や black、mypy などの開発補助ツールはこうしたコード解析手法を組み合わせて実装されています。

普段の開発に役に立つわけではありませんが、こうしたコード解析手法はソースコードを分析したり書き換えたりするツールを作ることができるので、知っておくと面白いです。実際には泥臭い処理をたくさん書く必要があるため、かんたんに作れるとは言えませんが、夏休み明けのおもちゃとして遊んでみるのに丁度いいかもしれません。

なお、尺の都合で資料、トーク内では説明することはできませんでしたが、Object Inspection と静的コード解析はお互いに補完しあう関係にあります。

静的コード解析は強力で幅広い情報が取得できますが、ファイルをまたがった解析をし始めると複雑度が一気に上がってしまうなど、実装コストが高くなりがちです。一方、動的コード解析は利用しやすい反面、コードをインポートの苦労や Python のサポート不足など、制約もあります。双方のメリット・デメリットを理解しつつ、組み合わせながら使うと良いでしょう。

興味がある人はこのあたりの技術をいじってみると良いと思います。気になること、わからないことがあれば @tk0miya に声をかけていただければ、お手伝いできるかもしれません。