hacking パッケージを pip インストールすると Flake8 のバージョンが巻き戻る

hacking パッケージは、Flake8 プラグインとして提供されるスタイルチェックツールである。

github.com

その特徴は、Google Python Style Guide を元にした スタイルチェックを提供する点である。 実際に使ってみても、Python 3.x 系と互換性がとれるような実装を提案するなど、 実用性を感じられるものとなっている。

興味を惹かれる hacking だが、最新バージョンの 1.0.0 現在、残念なことに Flake8 3.x 系に対応していない。 問題を報告するチケット は存在するが、1年近く放置されている。 メンテが止まっている訳ではないのだが、ここまで放置されている状況を見ると、対応に関して消極的であるのは確かである。

さらに hacking を pip インストールすると、既存の Flake8 のパッケージが 2.5.5 まで戻されてしまう。 これは、pip の依存性解決の実装に基づいた挙動である。 pip install を実行すると、pip は依存パッケージのインストールも併せて行う。 ここでバージョンが新しすぎるパッケージが既にインストールされていると、 pip はそのパッケージのバージョンを戻してしまうようだ。 特にドキュメントでは触れられていないが、 実際にそういった挙動をする。

Flake8 のバージョンが戻ることの弊害を考えてみる。 Flake8 のリリースノート をみる限り、2.5.5 から目立った変更はないように見える。 Flake8 がスタイルチェックツールであることを踏まえると、たとえ古いバージョンでも所望のチェックができるなら良いかもしれない。 ただし問題は、Flake8 の hacking 以外のプラグインへの影響である。 Flake8 パッケージのバージョンが1年前に戻ってしまうことで、多くの別のプラグインも1年前のバージョンに戻ってしまう。 hacking 単体での採用を考えるプロジェクトは少ないだろうし、 複数のプラグインの提供する静的解析を組み合わせられないというのは、Flake8 の特徴をスポイルしてしまっている。

おそらくこの問題に関する唯一の解決策は、自身で hacking パッケージを Flake8 3.x 対応することだろう。 調べても hacking の代替となるスタイルチェックツールは見つからない。 もしくは、hacking の提供するようなスタイルチェックを諦めてしまうか。 とにもかくにも一般論として、今後のプロジェクトへの hacking 導入は慎重に考えるべきである。