【実務・中級編】ESLintの推奨ルール「recommended」だけで十分か?環境別おすすめ設定プラグイン集 – デバッグ・コード品質・テストツール生産性向上バイブル

ESLintは「お守り」ではない。開発速度を加速させる「静的エンジン」へ昇華させる技術

多くのエンジニアが陥る罠がある。「とりあえず `eslint:recommended` を入れて、あとは適当にWarningを消す」という運用だ。これは、最高級のスポーツカーにママチャリのブレーキを付けているようなものだ。

静的解析ツールは、単なるコードのチェックリストではない。「人間がコードレビューという高コストな脳のメモリを割くべきではない領域」をすべて自動化し、純粋なビジネスロジックの設計に集中するための武器である。

本稿では、推奨設定の向こう側にある、チームの生産性を極限まで引き上げるアーキテクチャ設計を伝授する。

—

1. 「recommended」の幻想を捨てる

`eslint:recommended` はあくまで「最低限のバグを防ぐ」ためのものだ。実務において、我々が本当に排除したいのは「書き方の揺れ」や「将来のバグの温床となる複雑性」である。

推奨を超えた「神プラグイン」構成

フレームワークごとの最適解は、以下のプラグインを軸に構成する。

  • `eslint-plugin-perfectionist`: インポート文やオブジェクトのキー、型定義を自動でソートする。Gitのコンフリクトを劇的に減らし、脳の認知負荷を下げる。
  • `eslint-plugin-sonarjs`: 循環複雑度(Cyclomatic Complexity)を可視化し、ネストが深いコードに警告を出す。リファクタリングのタイミングを自動で教えてくれる。
  • `eslint-plugin-unused-imports`: 使われないインポートを検知し、保存時に自動削除する。

—

2. フレームワーク別・鉄板構成のベストプラクティス

設定ファイルは「巨大なJSON」にしてはいけない。`overrides`(または新しいFlat Configの `files`)を使い、役割ごとに分割管理するのが鉄則だ。

プロフェッショナルな `.eslintrc.js` (Flat Config対応)

import js from “@eslint/js”;
import ts from “@typescript-eslint/eslint-plugin”;
import reactHooks from “eslint-plugin-react-hooks”;
import perfectionist from “eslint-plugin-perfectionist”;

export default [
// 1. 基本設定:すべての環境に適用する「厳格な」ベース
js.configs.recommended,
{
rules: {
“no-console”: “warn”, // 本番環境で残さないための注意喚起
“prefer-const”: “error”, // 再代入のない変数は必ずconstにする
}
},
// 2. TypeScript専用:型安全を強制する
{
files: [“/.ts”, “/.tsx”],
plugins: { “@typescript-eslint”: ts },
rules: {
“@typescript-eslint/no-explicit-any”: “error”, // anyの使用を禁止し、型安全を死守
“@typescript-eslint/no-unused-vars”: [“error”, { “argsIgnorePattern”: “^_” }]
}
},
// 3. React専用:Hooksの依存配列ミスを許さない
{
files: [“/.tsx”],
plugins: { “react-hooks”: reactHooks },
rules: {
“react-hooks/rules-of-hooks”: “error”, // Hooksのルール違反を即座に検知
“react-hooks/exhaustive-deps”: “warn” // 依存配列の漏れを警告
}
},
// 4. ソートの自動化:チーム開発の衝突を未然に防ぐ
{
plugins: { perfectionist },
rules: {
“perfectionist/sort-imports”: [“error”, { “type”: “natural” }],
“perfectionist/sort-objects”: [“error”, { “partition-by-comment”: true }]
}
}
];

—

3. 開発速度を爆速にする「運用の掟」

どれだけ良い設定をしても、開発者が無視すれば意味がない。以下の3つのアプローチで「強制力」を持たせる。

① Lintの修正は「保存時」に完了させる

VS Codeの `settings.json` で、LintとPrettierを保存時に自動適用する設定は必須だ。

{
“editor.codeActionsOnSave”: {
“source.fixAll.eslint”: “explicit”, // ESLintの自動修正を強制
“source.formatDocument”: “explicit” // Prettierの整形を強制
},
“editor.formatOnSave”: true
}

② チームで設定を共有化する:`.editorconfig` の併用

IDEの設定差異が原因で「保存するたびにインデントが全書き換えされる」という悲劇を防ぐため、`.editorconfig` をルートに置く。

[]
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

③ 「lint-staged」によるコミット前の完全防備

`husky` と `lint-staged` を使い、コミット時に「変更されたファイルのみ」をLintする。これにより、CIの待ち時間を減らしつつ、汚いコードがリポジトリに入ることを物理的に阻止する。

// package.json に記述
“lint-staged”: {
“.{js,ts,tsx}”: [
“eslint –fix”, // 自動修正を試みる
“prettier –write” // その後、整形を確定させる
]
}

—

4. 最後に:テックリードからの提言

コード品質をツールに委ねることは、「人間は人間にしかできない、より創造的な判断に時間を投資する」という意志決定である。

「このルールは厳しすぎるのではないか?」と悩む必要はない。ルールは、チームの平均的な技術レベルを、トップレベルの基準まで引き上げるための「教育装置」でもある。

最初は警告に追われるかもしれない。だが、1ヶ月後には、あなたのチームから「インデントの修正」や「使われていない変数の削除」という無駄な議論が消滅しているはずだ。その時こそ、あなたがエンジニアとして「アーキテクチャの設計」という本質的な仕事に没頭できる時間だ。

今すぐ `npm install` して、チームのOSをアップデートしてほしい。

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