Skip to content
Latchkey

Husky vs Lefthook: Git Hooksの管理

Huskyは広く使われているNodeベースのgit hooksマネージャです。Lefthookは、hooksを並列実行する高速で言語非依存の単一バイナリです。

HuskyはNodeプロジェクト向けに最小限の設定でgit hooksをセットアップし、多くのJavaScriptチームのデフォルトで、通常lint-stagedと組み合わせて使われます。Lefthookは任意の言語で動作するスタンドアロンのGoバイナリで、hooksをYAMLで設定し、glob フィルタリングを組み込んでコマンドを並列実行します。HuskyはJSエコシステムにネイティブで普及しており、Lefthookはより高速で言語非依存です。

HuskyLefthook
ランタイムNode単一のGoバイナリ
言語JS中心任意の言語
並列性lint-staged経由組み込み
設定hookスクリプトYAML
最適な用途Nodeプロジェクト多言語、速度

CIでの利用

hooksは主にローカルで実行されますが、本当のゲートとして同じチェックはCIに置くべきです。Huskyはすでにnpmのツールを使っているNodeリポジトリにフィットします。LefthookはNodeなしでどこでも動作しチェックを並列化するため、大きなpre-commitスイートに役立ちます。いずれにせよ、ローカルの設定に関係なくチェックが強制されるよう、hookコマンドをCIジョブでミラーリングしましょう。

高速化する

CIで同じlint/testコマンドを実行し、依存関係をキャッシュしてウォームな状態で始まるようにします。CIのチェックはランナー上で実行され、より高速なマネージドランナーはlintとテストの実行を短縮します。

結論

普及して十分に文書化された選択肢が欲しいNode中心のプロジェクト: Husky。多言語リポジトリ、または並列hooksを備えた高速で依存関係のないバイナリが欲しい場合: Lefthook。どちらを選んでも、hooksだけに頼るのではなくCIで同じチェックを強制しましょう。

関連ガイド