Lefthookの良いところ(huskyとの比較)
2025-09-23
21 days ago
開発環境
- Node.js 18以上
- Git
この記事では Node.js プロジェクトを前提にしていますが、Lefthook は Ruby や Python など他の言語環境でも利用できます。
前提
Git のフック管理といえば「Husky」が長年デファクトスタンダードの立場にありました。
ただし、Husky は以下のような癖や課題が指摘されています。
- .husky/ ディレクトリを作成し、その中にシェルスクリプトを直接置くという独特な運用
- バージョンアップのたびに設定方法が変わり、キャッチアップコストが高い
- ライセンスやサポート方針が安定していない
そうした背景もあり、近年急速にユーザーを増やしているのが Lefthook です。
本題
Lefthook の特徴
- Go 言語で実装されており高速
- 並列実行が可能
- 複数言語に対応
- ステージングファイル検出が標準搭載
- カレントディレクトリの移動が可能
- 設定の上書きが可能
設定例
以下は pre-commit フックで ESLint と Prettier を実行する設定例です。
pre-commit:
parallel: true
commands:
lint:
run: npx eslint {staged_files}
format:
run: npx prettier --check {staged_files}
- parallel: true により lint と format が同時並行で実行されます
- {staged_files} というプレースホルダでステージング中のファイルのみを対象にできるため、余計なチェックを走らせる必要がありません
モノレポでパッケージごとに処理を切り替えたい場合は root オプションでカレントディレクトリを移動できます。
pre-commit:
commands:
backend:
root: "apps/backend"
run: pnpm lint
frontend:
root: "apps/frontend"
run: pnpm lint
さいごに
Husky は確かにメジャーでドキュメントや記事も豊富ですが、
- 設定の一貫性がなくなりやすい
- lint-staged のような追加ツールが必要
といった悩みが付きまといます。
Lefthook は軽量・高速・多機能で、モノレポや複数言語環境とも相性がよく、今後ますます普及していく可能性があります。 「Git フックをスマートに運用したい」と考えている方にはぜひ一度試してみてほしいツールです。