ESLint
JavaScript/TypeScript のコード品質と一貫性を自動検証する静的解析ツール
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_CONFIG を false にすれば旧形式へ戻せたが、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-promises | await されていない Promise |
@typescript-eslint/no-explicit-any | any 型の使用 |
@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-const や no-var のように書き換え方が一意に決まるルールは自動修正できる。no-floating-promises のような論理的な問題は手動修正が必要だ。
全体像を把握するには関連書籍も有用。
この記事は役に立ちましたか?
関連用語
リンター (Linter) とは - 静的解析ツールの役割と導入方法
リンターはソースコードを静的解析してバグやスタイル違反を検出するツール。ESLint / Biome / Ruff など言語ごとのリンターの比較と CI への組み込み方を解説
静的解析
コードを実行せずに構文・型・データの流れから性質を推論し、バグ・脆弱性・規約違反の候補を検出する手法
TypeScript
JavaScript に静的型付けを追加した言語で、大規模開発の安全性と生産性を向上させる
Prettier
コードのフォーマットを自動的に統一するオピニオネイテッドなコードフォーマッター
シフトレフトセキュリティ
セキュリティ対策を開発ライフサイクルの早い段階 (左側) に組み込むアプローチ
SAST/DAST
ソースコードの静的解析と実行中のアプリケーションの動的解析によるセキュリティテスト