huskyとlint-stagedでコミット時にlintチェックをする方法

共同開発において、あらかじめ定めたコーディングルールに沿って実装することは、統一されたコードを保つ上で重要です。

今回は、静的解析を強制しコードをきれいに保つために、huskyを使用してESLintなどのLinterやPrettierなどのフォーマッタがコミット時に自動で実行させる方法を紹介します。

インストール

必要なライブラリをインストールします。

huskyをインストールする

huskyGit hooksをトリガーに、タスクの実行をプログラムできるnpmライブラリです。

用途としては、例えばソースをコミットする前に静的解析やフォーマッタのタスクを実行させたり、リモートにプッシュする前にテストを実行させたりすることがよくあります。

以下のコマンドからインストールできます。

npmの場合

npx husky-init
npm install

pnpmの場合

pnpm dlx husky-init
pnpm install

lint-stagedをインストールする

Gitでステージしたファイルに対して特定のコマンドを実行してくれるライブラリです。

以下のコマンドからインストールすることができます。

npmの場合

 npm install --save-dev lint-staged

pnpmの場合

 pnpm install --save-dev lint-staged

pre-commitファイルの設定

コミット前にlint-stagedを実行するよう.husky/pre-commitに以下を記述します。

 npx husky set .husky/pre-commit "npx lint-staged"

lint-stagedで実行するコマンドの設定

package.jsonにlint-stagedで実行するコマンドを定義します。

この時、「実行対象のファイル」と「実行するコマンド」の組み合わせで定義します。

{
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": "eslint --fix"
  }
}

上の例では、拡張子がjs, jsx, ts, tsxのいずれかのファイルに対し、eslint --fixコマンドを実行するように設定しています。

ちなみに、ESLintを実行する場合、.eslintignoreの指定に沿ってLintチェックの対象を無視してくれます。

エラーが発生した時の対処方法

上記の手順を適切に実施すれば、問題なくコミット時にESLintなどの静的解析やPrettierなどのフォーマッタを実行できます。

ただ、設定時に以下のエラーが出ることがありますので、その対処方法を残しておきます。

エラー① 「hint: core.useBuiltinFSMonitor=true is deprecated;please set core.fsmonitor=true instead」

このエラーが出たときは、fsmonitor の設定値をtrueにすることで解決できます。

以下のコマンドを実行します。

 git config --global core.fsmonitor true

core.fsmonitorがtrueに設定されている場合 、git statusなどのコマンドがデーモンに変更を要求し、必要に応じて自動的に起動するようになります。
それにより、gitコマンドの動作を高速化することができるようです。

エラー② 「No valid configuration found.」

huskyの設定が.git/hooks/filesと競合しているため発生するエラーです。

.git/hooksフォルダを削除することで解決することができます。

エラー③ 「prettier –write:[error] No parser could be inferred for file: .husky\pre-commit」

これは、lint-stagedでPrettierを実行するように指定した場合に発生しうるエラーです。

.husky/pre-commitにもフォーマッティングを実行しようとして発生します。

例えば、以下のようにPrettierの実行コードを定義していると発生します。

prettier --write

解決のためには、Prettierの実行コードを以下のように書き換えます。

prettier --ignore-unknown --write

コメント

タイトルとURLをコピーしました