ESLint

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

品質JavaScript
ESLint」の技術書を見る →

ESLint とは

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

設定形式は Flat Config へ一本化された

ESLint 9 (2024 年 4 月) で設定形式の既定が .eslintrc から eslint.config.js (Flat Config) へ移り、ESLint 10 (2026 年 2 月) で旧形式のサポートが打ち切られた。9 系では環境変数 ESLINT_USE_FLAT_CONFIGfalse にすれば旧形式へ戻せたが、10 系にはその退避路が無い。2026 年 8 月時点の最新は 10 系であり、.eslintrc を残したままメジャーを上げると設定が読み込まれずに失敗する。

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

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

no-floating-promises のように型情報を使うルールは、recommended だけでは動かない。上記のように recommendedTypeChecked を選び、parserOptions から TypeScript の型情報を渡す必要がある。引き換えに解析時間は目に見えて伸びる。

重要なルール

プレフィックスの無いものは ESLint 本体のルール、@typescript-eslint/ 付きは typescript-eslint プラグインが足すルールで、設定ファイルにもこの名前で書く。

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

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

Prettier との役割分担

同じファイルを 2 つのツールが見るため、担当範囲を決めておかないと整形結果が互いに打ち消し合う。

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

ESLint 本体の整形系ルール (no-extra-semi など) は v8.53.0 (2023 年 11 月) で非推奨になり、v11.0.0 で削除される予定である。移管先として @stylistic/eslint-plugin が案内されているが、整形は Prettier に任せて ESLint は品質検査だけを担う分担が広く採られている。

CI での実行

手元での実行は忘れられるため、pull request のチェックに組み込むのが前提になる。

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

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

自動修正

ルールごとに自動修正できるかどうかが決まっており、--fix で書き換わるのは可能なものだけである。

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

prefer-constno-var のように書き換え方が一意に決まるルールは自動修正できる。no-floating-promises のような論理的な問題は手動修正が必要だ。

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

この記事は役に立ちましたか?

関連用語

関連する記事