autopep8 version 2.0を目指して

autopep8は初版であるバージョン0.1 をリリースしてから7年程経過していて、 2018年09月現在のバージョンは1.4 である。 Pythonのオートフォーマッタ界隈は割と戦国時代で、autopep8の他にも、 非公式だがGoogle傘下のyapf 、 ここ最近急速に人気を博してきている Black なんかがある。 GitHubスター数でいくとyapfもBlackもautopep8を遥かに凌駕している。

競合分析

yapf

初期コミットは2015年頃。 autopep8にも一時期コミットしていただいてたメンバーがいて面白い。確かグーグラーのはず。すげぇ。 autopep8の動作に嫌気が差したのかもしれない。 どちらかというとPEP8にフォーマットするというより、定義したスタイルにフォーマットするという用途の模様。 yapfのREADMEを見るとgofmtっぽいとも書いている。

Black

初期コミットは2018年。 今 著作者のGitHubページ を見てみると、 燦然と輝く Python core developer の文字。 あとはPython使ったプロジェクトが多めでPythonのスペシャリストが作ってるのだなという感想。 単純にすげぇという感想。

その他の要素

yapf、Blackともにオンラインで動作を試せるページがある。autopep8は無いぞ!!

少し前には この3つのツールを比べる記事 なんかも出ていた。 記事を書いた方は今後はBlackを使うだろう、と書いていた。なんだと!!貴重なユーザーを一人失った。

というようなところをここ最近頭の中に浮かびつつ消えていっているのだが、 Blackの爆誕によりautopep8が押されている状況も勝手にだが感じていて、 改善できるところはやりたいなぁというのを最近強く感じてきた。

思想

そもそものautopep8の設計思想は、 PEP8に従うようにフォーマットするというもので、これは開発初期から変わっていない。 もっというと pycodestyle が指摘した警告をフォーマットして 指摘されないようにするということ。

現状の動きがやや思想からブレている部分もあり、その辺りも2.0に向けて改善していきたい。

実装したい機能

以下のようなものが頭の中に浮かんでいる。

  • オプション指定による想定動作が見えにくい -a, -aa, -aaa, --experimental オプションの削除
  • デフォルト設定のフォーマット結果の驚きを少なくする
  • フォーマットオプションを追加
  • プラグイン機構を導入し独自でやりたいところはユーザー自身に開発してもらう
    • autopep8本体はPEP8のチェック部分のみをメンテナンスし、その他の部分については拡張性や自由度が上がる
    • さらには開発コミュニティ(ユーザーコミュニティ)を活性化できるかも
  • オンラインでautopep8を試せるプレイグラウンド

1, 2年かかるかなーw

終わりに

マイペースに開発を進めていきたいですね。 幸いある程度使って頂けているみたいで、GitHub Issueもちょこちょこあがってくるので、 そういうのを励みにしつつ細く長く開発を続けていけたらと。

この記事に関しては、ややおもしろおかしく書いた面もあるのであまりマジメに読まないように。 特に他のツールを批判したりという意図はありません。 色々なツールがお互いを意識しつつ少し競争がある中で開発を進めたほうが良いものができると思いますし。

autopep8の著作者としての一意見でした。