husky v4 から v7 へ移行する手順の覚書

husky を v4.3.8 から v7.0.0 へアップグレードする。

※ v5 はライセンス問題があるため、MIT に戻った v7 へアップグレードする

CHANGELOG

  • husky-4-to-6 CLI → husky-4-to-7 CLI に変更になったので修正

環境

  • husky: 4.3.8 -> 7.0.0
  • lint-staged: 10.5.4

方法

husky のドキュメントにあるMigrate from v4 to v7を参照した。

husky-4-to-7 CLI

husky-4-to-7 CLI という CLI が用意されており、簡単に移行ができる模様。

npm で管理しているプロジェクトだったので、README の内容通り下記を実行した。

npm install husky@7 --save-dev \
  && npx husky-init \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

実行すると要所でOk to proceed? (y)と訊かれるのでyと続けていく。

removed 16 packages, changed 2 packages, and audited 950 packages in 4s

8 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
Need to install the following packages:
  husky-init
Ok to proceed? (y) y
husky-init updating package.json
  setting prepare script to command "husky install"
husky - Git hooks installed
husky - created .husky/pre-commit

please review changes in package.json
Need to install the following packages:
  github:typicode/husky-4-to-6
Ok to proceed? (y) y
husky - created .husky/pre-commit
husky - deleted husky field from package.json

⚠️ pre-commit hook may need to be manually updated to be run via package manager.

Examples:
  jest → npx --no-install jest
       → yarn jest

  jest && eslint → npx --no-install jest && npx --no-install eslint
                 → yarn jest && yarn eslint

  commitlint -E HUSKY_GIT_PARAMS → npx --no-install commitlint --edit $1
                                 → yarn commitlint --edit $1

See https://typicode.github.io/husky/#/?id=migrate-from-v4-to-v7

処理後、以下のような差分が出る。

  • 変更:
    • package.json
    • package-lock.json
  • 追加:
    • .husky/.gitignore
    • .husky/pre-commit

package.json の差分

+    "prepare": "husky install"
-    "husky": "^4.3.8",
+    "husky": "^6.0.0",
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },

.husky/pre-commit

CLI で移行されていた記述だと package.json に記述していた"pre-commit": "lint-staged"lint-stagedがそのまま記述されていた。これを実行できるようにnpx経由で実行できるようにnpx lint-staged.husky/pre-commitに追加した。

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

これで pre-commit 時に lint-staged の設定のものが適応される。

参考: https://typicode.github.io/husky/#/?id=locally-installed-binaries

まとめ

  • 移行は husky-4-to-7 CLI を実行するだけで良い
  • .husky/pre-commit に lint-staged を実行できるようにする
    • lint-staged の定義はそのままで良い