Perl でコードを書く上で、Perl::Critic によるコーディング規約のチェックはかなり便利です。しかし、Perl::Critic はとにかく遅くてつらい。
いやまあ、それでも便利ではあるのですが、CI の速度は開発のテンポを左右しますから、少しでも速いほうがいいよね。そこで、CI で必要なファイルにだけ Perl::Critic を実行する方法を試してみました。
さて、Perl::Critic を実行する必要のあるファイルとは何でしょうか。Perl::Critic はファイル単位でのチェックなので、前回チェックが通った時点から変更されたファイルが Perl::Critic を実行する必要のあるファイルです。
今どきのプロジェクトではだいたい Git でバージョン管理しているでしょうから、git diff
を使えば変更されたファイルはすぐにわかります。master ではすべてのファイルをチェックする (= すべてのファイルがチェックを通過している) ことにすれば、master から派生した各ブランチでは master からの差分だけを見ればいいですね。
ということでやっていくと以下のような感じになります。いろいろ決め打ちなのは各自直してください。
Perl::Critic に限らず、ファイル単位で CI で何か見る場合全般に有効だと思いますので、ぜひぜひお試しください。