1. 導入: なぜHuskyが必要なのか
チーム開発において、「Lintエラーやテスト失敗のコードがメインブランチにマージされてしまう」という経験はありませんか?これを手動のチェックに頼るのは限界があります。Huskyは、Gitの「コミット」や「プッシュ」という操作をトリガーにして、自動的にチェックツール(ESLintやPrettierなど)を実行するツールです。これにより、品質の低いコードがリポジトリに紛れ込むのを未然に防ぐ「水際対策」が可能になり、チーム全体の心理的安全性を高めることができます。
2. 基礎知識: Git HooksとHuskyの役割
Git Hooksとは、Gitの特定のイベント(コミット前、プッシュ前など)が発生した際に、特定のスクリプトを実行できるGit標準の機能です。しかし、この設定をチームメンバー全員のPCで手動設定させるのは困難です。
そこで活躍するのがHuskyです。Huskyは、Git Hooksの設定をリポジトリ内にプロジェクトの一部として含めることができるため、インストールするだけでチーム全員が同じルールに従って開発を進められるようになります。v9からは設定がよりシンプルになり、シェルスクリプトベースで直感的に管理できるようになりました。
3. 実装/解決策: husky-initによる導入手順
Husky v9では、`husky-init`コマンドを使うことで、必要な設定(.huskyディレクトリの作成とpackage.jsonの修正)が自動で行われます。
1. プロジェクトルートで以下のコマンドを実行します。
npx husky-init && npm install
2. これにより、`.husky/pre-commit`というファイルが生成されます。
3. このファイルの中に、実行したいコマンドを記述するだけで、コミットのたびにそのコマンドが走るようになります。
4. サンプルプログラム: pre-commitフックの設定
以下は、`.husky/pre-commit`ファイルの内容例です。コミット前にLintとテストを実行し、失敗したらコミットを中断させる設定です。
!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" 1. Lintを実行して、コードの構文チェックを行う echo "--- Lint実行中 ---" npm run lint 2. Lintが失敗した場合、終了コード1を返してコミットを中断する if [ $? -ne 0 ]; then echo "Lintエラーがあるためコミットを中止します。" exit 1 fi 3. テストを実行して、ロジックの健全性を確認する echo "--- テスト実行中 ---" npm test 4. テストが失敗した場合も同様に中断 if [ $? -ne 0 ]; then echo "テストが失敗したためコミットを中止します。" exit 1 fi echo "品質チェックOK!コミットを続行します。"
5. 応用・注意点: 陥りやすいバグの回避策
Husky運用で最も多い失敗は、「Huskyが動いているかわからない」というケースです。特に注意すべき点は以下の3つです。
・権限の問題: LinuxやmacOSでは、`.husky/`配下のスクリプトに実行権限が必要です。もし実行されない場合は `chmod +x .husky/pre-commit` を実行してください。
・lint-stagedの併用: プロジェクトが巨大になると、全ファイルのLintは時間がかかりすぎて開発効率が下がります。その場合は、コミット対象のファイルだけをLintするlint-stagedというツールを併用するのが現場のスタンダードです。
・CIとの役割分担: Huskyはあくまで「個人のミスを防ぐ水際対策」です。最終的な品質担保は、GitHub ActionsなどのCI環境で行うのが鉄則です。Huskyはローカルでの開発体験を向上させるもの、と割り切って運用しましょう。

コメント