Next.jsにhuskyとlint-stagedの導入とコミットの時のエラー回避

## 環境

```bash
"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint src",
    "lint:fix": "eslint src --fix",
    "format": "prettier . --write",
    "prepare": "husky install"
  },
  "dependencies": {
    "next": "13.5.6",
    "react": "^18",
    "react-dom": "^18"
  },
  "devDependencies": {
    "@types/node": "^20",
    "@types/react": "^18",
    "@types/react-dom": "^18",
    "@typescript-eslint/eslint-plugin": "^6.19.0",
    "@typescript-eslint/parser": "^6.19.0",
    "autoprefixer": "^10",
    "eslint": "^8.56.0",
    "eslint-config-next": "13.5.6",
    "eslint-plugin-react": "^7.33.2",
    "husky": "^8.0.3",
    "lint-staged": "^15.2.0",
    "postcss": "^8",
    "prettier": "^3.2.4",
    "react-hook-form": "^7.49.3",
    "tailwindcss": "^3",
    "typescript": "^5"
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}
```

## 手順

インストール前に`git  init`コマンドで初期化。

下記コマンドを実行して`husky`と`lint-staged`をインストールしてください。

```bash
//npm
npm i -D husky lint-staged

//yarn
yarn add -D husky lint-staged

//bun 
bun add -D husky lint-staged
```

次に`Git hooks`のインストールを行うために下記のコマンドを実行してください。実行後に`.husky`ディレクトリが自動作成されるはずです。

```bash
bunx husky install
```

次に`package.json`のscriptsフィールドに下記の記述を追加します。

```bash
"prepare": "husky install"
```

次に`lint-staged`の設定を行うために`pacage.json`内のdevDependenciesフィールドの下に下記の記述を追加してください。

```bash
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
```

そうなると`package.json`の記述は下記のようになります。

```bash
"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint src",
    "lint:fix": "eslint src --fix",
    "format": "prettier . --write",
    "prepare": "husky install"
  },
  "dependencies": {
    "next": "13.5.6",
    "react": "^18",
    "react-dom": "^18"
  },
  "devDependencies": {
    "@types/node": "^20",
    "@types/react": "^18",
    "@types/react-dom": "^18",
    "@typescript-eslint/eslint-plugin": "^6.19.0",
    "@typescript-eslint/parser": "^6.19.0",
    "autoprefixer": "^10",
    "eslint": "^8.56.0",
    "eslint-config-next": "13.5.6",
    "eslint-plugin-react": "^7.33.2",
    "husky": "^8.0.3",
    "lint-staged": "^15.2.0",
    "postcss": "^8",
    "prettier": "^3.2.4",
    "react-hook-form": "^7.49.3",
    "tailwindcss": "^3",
    "typescript": "^5"
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}
```

次に下記コマンドを実行してください。`.husky`ディレクトリ内に`pre-commit`ファイルが生成されるはずです。

```bash
//bun
bunx husky add .husky/pre-commit "lint-staged"

//npm
npx husky add .husky/pre-commit "lint-staged"
```

*この時点でプロジェクトはgithub等のリポジトリと連携してある前提の話です。

こちらでgitをコミットしてみてください。

### コミット時にエラーが出た場合

下記のようなエラーが出た人のみみてください。

```bash
.husky/pre-commit: line 4: lint-staged: command not found
husky - pre-commit hook exited with code 127 (error)
husky - command not found in PATH=/Applicaton ~~~~~~パスがなんちゃら
```

## 解決策

`pre-commit`ファイル内の記述に不足している場合が考えられます。`lint-staged`の前に`bunx`の記述が不足していて私もエラーが出ました。(なんで記述が漏れてファイル生成が行われたか有識者の方がいましたら共有いただけると幸いです。)

```bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

//bun
bunx lint-staged

//npm
npx lint-staged
```