ESLint

JavaScript/TypeScript のコード品質と一貫性を自動検証する静的解析ツール

品質JavaScript

ESLint とは

ESLint は、JavaScript/TypeScript のコードを静的に解析し、バグの可能性がある箇所やコーディング規約違反を検出するツールである。Nicholas C. Zakas が 2013 年に開発し、JavaScript エコシステムで最も広く使われている Linter だ。

ESLint 9 の Flat Config

ESLint 9 で設定形式が .eslintrc から eslint.config.js (Flat Config) に変更された。

// eslint.config.js
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';

export default tseslint.config(
  eslint.configs.recommended,
  ...tseslint.configs.recommended,
  {
    rules: {
      'no-console': 'warn',
      '@typescript-eslint/no-unused-vars': 'error',
      '@typescript-eslint/no-floating-promises': 'error',
    },
  },
  { ignores: ['dist/', 'node_modules/'] },
);

重要なルール

ルール 検出する問題
no-unused-vars 未使用の変数
no-floating-promises await されていない Promise
no-explicit-any any 型の使用
no-non-null-assertion ! (Non-null Assertion) の使用
prefer-const 再代入されない let
eqeqeq == の代わりに === を強制

no-floating-promises は特に重要だ。await を付け忘れた Promise は、エラーが握りつぶされるバグの原因になる。

Prettier との役割分担

ツール 役割
ESLint コード品質 (バグ検出、ベストプラクティス) 未使用変数、any 型、floating promises
Prettier コードフォーマット (見た目の統一) インデント、セミコロン、引用符

ESLint のフォーマット系ルールは非推奨になり、フォーマットは Prettier に任せるのが現在の標準だ。

CI での実行

# GitHub Actions
- name: Lint
  run: npx eslint . --max-warnings 0

--max-warnings 0 で警告もエラーとして扱い、CI を失敗させる。警告を放置すると、いつの間にか数百件に膨れ上がる。

自動修正

npx eslint . --fix  # 自動修正可能なルールを修正

prefer-constno-extra-semi などは自動修正できる。no-floating-promises のような論理的な問題は手動修正が必要だ。

全体像を把握するには関連書籍も有用。

関連用語