huskyのメリット
eslintを使用すればチーム内でコーディングのルールが統一することができます。
しかし、たまにエラーをうっかり見落として、eslintのエラーが出ているままコミットしてしまうことがあります。
そこでhuskyを使用することで、「eslintでエラーが出ている時はコミットできない」というルールを設定することが可能になります。
手順
create-react-appでプロジェクトを作成する
yarn create react-app my-app
上記のコマンドでプロジェクトを作成しましょう。
eslintの設定
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
+ "lint": "eslint --ext .jsx,.js .",
+ "lint:fix": "eslint --fix --ext .jsx,.js ."
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
+ "rules": {
+ "quotes": "error"
+ }
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
上記の修正で以下3点の修正を行いました。
①「yarn lint」でeslintにエラーがないか確認できるようになった。
②「yarn lint:fix」でeslintにエラーがあれば自動で修正が可能になった。
③「ダブルクオートではなく、シングルクオートを使用していたらエラー」というルールが追加された。
huskyの設定
huskyと必要なライブラリのインストール
yarn add -D husky lint-staged
上記のコマンドでhuskyと必要なライブラリのインストールを行います。
huskyの初期設定
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"lint": "eslint --ext .jsx,.js .",
"lint:fix": "eslint --fix --ext .jsx,.js ."
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"rules": {
"quotes": "error"
}
},
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.{js,jsx}": [
+ "eslint --ext .jsx,.js ."
+ ]
+ },
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"husky": "^8.0.0",
"lint-staged": "^13.2.0"
}
}
ルート直下にある「/package.json」を上記のように修正します。
npx husky-init
以上のコマンドを叩いてください。huskyの環境が構築されます。
「/.husky/pre-commit」が自動で生成されるので以下のように修正します。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
- npm test
+ yarn lint-staged
確認
それではhuskyが問題なく動いているか確認します。
まずは全ての変更をステージング追加してコミットしてください。
何かしらのエラーが表示されるはずです。
(私はgit graphを使用しています。なんでもOKです。)
yarn lint
エラーがないか確認しましょう。
以下のようにエラーが見つかるはずです。
エラーがあったため、huskyが起動し、コミットできなかったということですね。
エラーを修正するコマンドを叩きましょう。
yarn lint:fix
無事エラーが自動修正されたことを確認します。
もう一度全てのファイルをステージングに追加し、コミットします。
無事コミットできたらhuskyの導入成功です。