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の著作者としての一意見でした。

2018.Q2

だいぶQ2過ぎ去ってしまったがログ残し。

虫垂炎

一番大きかった出来事は虫垂炎で手術したこと。 2月3月頃から少し右腹下部に違和感あるなぁと思っていて、 5月くらいに夜中に腹痛で起きて病院行ったりしてたのですが、 ついに6月下旬に2度目の結構な痛みが来て病院行ったらそのまま 緊急入院して手術になってしまった。

PyCon Mini Osaka 2018 も 登壇予定だったのですが、穴を空けてしまって色々とご迷惑をかけてしまいました。

これを書いてる8月下旬現在はピンピンしてます。 ほんと健康重要ですね。

転職

4月中旬に人生2度目の転職。 ブロックチェーン、暗号通貨方面で頑張ってみようと。

Pythonメインに使っているところなので、 今までのエンジニアリング経験活かしつつ新しい知識も吸収していけるかなというところで。

Rust

主なものは pgstatprof くらいか。 公開したのは8月ですが、下調べや実際にがっつり検証コード書いてたりしていたのは 転職してすぐだったので、この期の成果という感じ。

あとは metalクレートimageクレート とで RustでMetal2を触ってみたりとか。

その他

システムトレード勉強して手を出してみたり、 本も色々読んでいた気もしますが、 4-6月は病気と転職で過ぎ去っていったなーってな感じです。

2018.Q1

2018年ももうすぐ4月になろうとしている。 振り返りとログ残し。

Rust

いろいろ書いていた。

PythonなモジュールをRustで書いたのが2つ。 fcsvfpathfcsvrust-csv が確か速かったはずなので使ってみたかったのとクラスを書いてみたかったので。 fpathfaster_path というRustで高速化したRubyのパスマニピュレーション用のgemが目に飛び込んできたので、 Pythonでもできるかなと思って書いてみました。 去年 fast-woothee-python 書いてたので3つめか。

メモリリークとかありそうだけど、実戦で使って鍛えたい。

httpstat のRust版 rust-httpstat に、 モジュールとして使える対応H2対応 を入れたりもした。 これ便利なんだよな。作者に感謝。

あとは、 cargo-strict という unwrap() を使ってる箇所を指摘修正してくれるツールを書いた。 書き捨てのツールだとついつい unwrap() を使ってしまって、 久しぶりに使ったりするとエラー出たときにどこでエラーがでているのかわからなかったりすることがあります。 なので、一括で obj.expect("ERRORID") 的な感じに置き換えて素早くデバッグできるようにしました。 まぁ、そもそも unwrap() 使うなって話ですがついつい使っちゃうんですよねー。

Blockchain

ブロックチェーン関連をもう少し掘り下げて行こうと思ってます。 ブロックチェーン勉強し始めたので、Rustで書いてみたり した。 感覚的に1周遅れ感あるので、めちゃくちゃ勉強しないとな。 新しい単語が出てきて勉強するの楽しい。

Python

autopep8v1.3.4v1.3.5 をリリース。 バグフィックスといくつか機能を追加。 何度か挑戦しては諦めていたバグを直せた。寝かせると良いことがあるものだ。バグなおってよかった。

PyCon mini Osaka 2018 が5/19に開催されるということで、二つほどトーク応募してみた。 autopep8 、フォーマッタ関連とRustを組み合わせて高速化なネタ。 複数応募大丈夫だったかな?

仕事

4月中旬から新天地で仕事スタートする。 ついつい張り切っちゃう人なので体壊さないようにゆっくりスタートしたい。

その他

転職するということで休みをとってディズニーリゾートに行ったりした。 娘はディズニーシーの火山に驚いてたみたいだけど、アナと雪の女王な感じで総じて楽しんでました。 また遠出したいね。

あと、お金の勉強大事なと思い、3級FP技能検定を受けようとしてます。

ぐらいか。 ぼちぼち行こう。

2017年のふりかえりとか

pit in Rust

fast-woothee-pythonを書いていました

Older Blog Posts