TL;DR

JavaScript や TypeScript、JSX のための静的解析ツール。コードの品質とコードスタイルをチェックする。

なぜ必要か

文法的には正しいが、間違いを含んでいる可能性のあるコードを検出できる。たとえば、比較のつもりで == や === ではなく = を書いてしまったコードを見つけられる。

if ((savings = 0)) {
}

window を wisdom とタイポするような、実行時に初めて分かるエラーにも事前に気づける。

仕組み

v9.0 から、設定ファイルの形式は Flat Config(eslint.config.js)がデフォルトになった。typescript-eslint も Flat Config に対応している。

npm init @eslint/config を実行し、使い方、モジュールの形式(ES Modules か CommonJS か)、フレームワーク(React や Vue.js)、TypeScript の有無、実行環境、パッケージマネージャについての質問に答えると、設定ファイルが作られる。あとは必要に応じて設定をカスタマイズする。React や Angular、Jest 向けのプラグインもある。

例

Jest のプラグインを使う設定の例。

const pluginJs = require("@eslint/js")
const pluginJest = require("eslint-plugin-jest")
 
/** @type {import('eslint').Linter.Config[]} */
module.exports = [
  pluginJs.configs.recommended,
  {
    ...pluginJest.configs["flat/recommended"],
    files: ["*.test.js"],
  },
  {
    languageOptions: {
      sourceType: "commonjs",
    },
  },
]

除外したいディレクトリは ignores で指定する。

export default [
  {
    ignores: [".config/*"],
  },
]

npx eslint で実行する。--fix を付けると、自動で修正できる問題を修正する。package.json の scripts には次のように追加する。

{
  "scripts": {
    "test": "jest",
    "lint": "eslint . && prettier --list-different .",
    "format": "eslint --fix && prettier --loglevel warn --write ."
  }
}

注意点

Visual Studio Code の拡張機能を入れると、コマンドを実行しなくても自動でチェックが走る。ただし、入力し終わる前に警告が出るため、偽陽性が多くなる。気になる場合は、保存時にだけ動くように設定する。

{
  "eslint.run": "onSave"
}

Prettier と併用すると、両者の設定が衝突することがある。これを避けるには、Prettier 公式が提供する eslint-config-prettier を設定に追加する。

const eslintConfigPrettier = require("eslint-config-prettier")
 
/** @type {import('eslint').Linter.Config[]} */
module.exports = [pluginJs.configs.recommended, eslintConfigPrettier]

関連

出典