導入: なぜ今、Git Hooksの自動化が必要なのか
チーム開発において「Lintエラーやテスト失敗が解消されていないコードがリポジトリにマージされる」という事態は、レビューコストの増大やCIパイプラインの停止を招く大きな課題です。個人の意識に頼るのではなく、Huskyを活用してコミット前に自動でチェックを行う仕組みを構築することで、リポジトリの品質を強制的に担保できます。これは単なる規律ではなく、チームの生産性を守るための「技術的な防波堤」です。
基礎知識: Git HooksとHuskyの役割
Git Hooksとは、Gitの特定のアクション(コミットやプッシュなど)の前後で自動的にスクリプトを実行する機能です。通常、hooksはローカルの.gitディレクトリ内に配置されますが、これらはリポジトリにコミットされないため、チームメンバー間で共有できません。
Huskyは、このGit Hooksをプロジェクトのルートディレクトリで管理し、npmパッケージとして共有可能にするツールです。これにより、メンバー全員が同じ環境で「コミット前に必ず静的解析を通す」といったルールを強制できます。
実装/解決策: Huskyとlint-stagedの導入手順
ただコミット前にLintを実行するだけでは、すべてのファイルを対象にすると時間がかかりすぎてしまいます。そこで、lint-stagedを併用します。これにより、「今回コミットしようとしている変更分のみ」に対してLintやテストを実行でき、高速なフィードバックループを実現します。
1. パッケージのインストール: npm install husky lint-staged –save-dev
2. Huskyの有効化: npx husky init
3. lint-stagedの設定: package.jsonに設定を記述
サンプルプログラム: 実践的な設定例
以下の設定をpackage.jsonに追加することで、コミット実行時に自動で静的解析が走るようになります。
{
“scripts”: {
“prepare”: “husky”
},
“lint-staged”: {
“.{js,ts,tsx}”: [
“eslint –fix”,
“prettier –write”
]
}
}
// .husky/pre-commit ファイルの中身(自動生成されたもの)
// コミット前にlint-stagedを実行し、エラーがあればコミットを中断します
npx lint-staged
応用・注意点: 現場で陥りやすい罠
Huskyを運用する上で注意すべき点は以下の通りです。
1. CIとの整合性
Huskyはローカルでの品質担保には有効ですが、CI(GitHub Actionsなど)でも必ずテストを実行してください。Huskyはクライアント側で回避(–no-verify)される可能性があるため、最終的なゲートはCIで守るという二段構えが鉄則です。
2. パフォーマンスの考慮
大規模なプロジェクトでテスト全件を実行させると、コミットのたびに数分待たされることになります。lint-stagedを活用し、影響範囲のみをチェックする構成を徹底しましょう。
3. メンバーの環境差異
HuskyはNode.js環境に依存します。プロジェクトのREADMEに「huskyのインストールが必須であること」を明記し、オンボーディング時に漏れなく設定される仕組みを作っておくのが、トラブル回避の近道です。