logo

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 フックをスマートに運用したい」と考えている方にはぜひ一度試してみてほしいツールです。

参照