Skip to content
Latchkey

Lefthook vs pre-commit: Hookマネージャの比較

Lefthookはhooksを並列実行する高速な単一のGoバイナリです。pre-commitは、すぐに使えるhooksの大きなレジストリを持つPythonフレームワークです。

LefthookはhooksをYAMLで設定し並列実行し、依存関係のない単一バイナリとして配布されるため、高速で言語非依存です。Pythonで書かれたpre-commitは、隔離されたhook環境を管理し、バージョンで固定された共有可能なhooksの巨大なエコシステムを提供します。これはリポジトリ間でチェックを標準化するのに優れています。Lefthookは速度とシンプルさを、pre-commitは豊かで再現可能なhookカタログを優先します。

Lefthookpre-commit
ランタイム単一のGoバイナリPythonフレームワーク
hookエコシステムコマンドを自分で定義大きな共有レジストリ
並列性組み込み限定的
環境の隔離なしhookごとの環境
最適な用途速度、シンプルさ共有・固定されたhooks

CIでの利用

pre-commitは、多くのリポジトリで再利用される、キュレーションされバージョン固定されたコミュニティのhooksが欲しいときに輝き、クリーンなCIモードを備えています。Lefthookはより高速で依存関係がなく、主に自分のコマンドを実行し並列性が欲しいときに理想的です。ローカルのhookを超えてチェックが強制されるよう、どちらもCIでも実行すべきです。

高速化する

hook環境(pre-commit)または依存関係をキャッシュして、CIのチェックがウォームな状態で始まるようにします。チェックはランナー上で実行され、より高速なマネージドランナーはhookとlintの実行を短縮します。

結論

リポジトリ間で標準化された、共有可能でバージョン固定されたhooksの大きなレジストリが欲しい場合: pre-commit。自分のコマンドを並列で実行する高速で依存関係のないバイナリが欲しい場合: Lefthook。共有hookカタログを重視するチームはpre-commitに、速度重視のチームはLefthookに傾きます。

関連ガイド