ESLint で「Definition for rule ‘xxx’ was not found」エラーの原因と解決法

ESLint を実行した際に、次のようなエラーを見たことがある人は多いでしょう。

Definition for rule 'react/jsx-uses-react' was not found

このエラーは、指定したルールを ESLint が見つけられない ことを意味しています。主な原因は、プラグインや設定ファイルの バージョン不整合設定ミス にあります。

この記事では、原因別に詳しく分析し、正しい確認手順と解決策を紹介します。

エラーの意味

「Definition for rule ‘xxx’ was not found」は、ESLint の設定ファイル(.eslintrc など)で定義されたルール名に対応する実装が存在しないことを示します。

つまり、設定ファイルに次のような記述があるのに、ESLint がそのルールを提供するプラグインを読み込めていない状態です。

{
  "rules": {
    "react/jsx-uses-react": "error"
  }
}

主な原因と対処法

原因1: プラグインがインストールされていない

もっとも多い原因は、ルールを提供するプラグイン(例: eslint-plugin-react)が依存関係に含まれていないことです。

確認コマンド:

npm ls eslint-plugin-react

解決方法:

プラグインを明示的にインストールします。

npm install -D eslint-plugin-react

または Yarn / pnpm の場合はそれぞれに応じて追加します。

yarn add -D eslint-plugin-react
# または
pnpm add -D eslint-plugin-react

原因2: extends の指定ミス

ESLint 設定で extends にプラグインを含めていない場合、そのルールは自動的に有効化されません。

例:誤った設定

{
  "extends": ["eslint:recommended"],
  "rules": {
    "react/jsx-uses-react": "error"
  }
}

正しい設定

{
  "extends": ["eslint:recommended", "plugin:react/recommended"],
  "plugins": ["react"]
}

plugin:react/recommended を追加することで、React 関連ルールが適切に読み込まれます。

原因3: プラグイン名とルール名の不一致

ルール名の前半(例: react/)は、プラグイン名(eslint-plugin-react)から派生します。
つまり、eslint-plugin-xxxxxx/ルール名 という対応関係です。

たとえば、次のようなルールがあった場合:

ルール名必要なプラグイン
react/jsx-uses-reacteslint-plugin-react
@typescript-eslint/no-unused-vars@typescript-eslint/eslint-plugin
vue/no-unused-componentseslint-plugin-vue

ルール名とプラグインが一致しているか を確認しましょう。

原因4: プラグインのバージョンが古い/ルールが削除された

ESLint のプラグインは頻繁に更新され、新旧バージョンでルール名が変更または削除されることがあります。

例:

  • eslint-plugin-react v7.32 以降では一部の JSX 関連ルールが自動的に無効化
  • @typescript-eslint v6 でルール構成が整理され、一部ルールが deprecated

確認方法:

npm info eslint-plugin-react version
npm info @typescript-eslint/eslint-plugin version

また、各ルールのドキュメントで「Deprecated」や「Removed」になっていないかも確認しましょう。

原因5: ESLint のバージョンが古く、プラグインのAPIに非対応

新しいプラグインを導入した場合、古い ESLint 本体ではルールの読み込みに失敗することがあります。
ESLint 本体も最新安定版に更新しましょう。

npm install -D eslint@latest

原因6: モノレポや複数 ESLint 設定の衝突

Monorepo 構成(例: Turborepo, Nx, Yarn Workspaces)では、各パッケージで別々の node_modules を参照している場合があります。
ルートにインストールしたプラグインが子パッケージから参照できない場合、ルールが見つからずエラーになります。

解決方法:

  • 各サブプロジェクトでも必要なプラグインをインストールする
  • または、ルート .eslintrcroot: true を設定し、統一的に管理する
{
  "root": true,
  "extends": ["plugin:react/recommended"]
}

原因7: VSCode ESLint 拡張のキャッシュ

VSCode の ESLint 拡張が古いキャッシュを保持している場合もあります。
再起動または ESLint サーバーのリロードを試しましょう。

コマンドパレットから実行:

ESLint: Restart ESLint Server

チェックリスト:この順で確認しよう

  1. プラグインが devDependencies に入っているか
  2. .eslintrcplugins / extends に正しく指定されているか
  3. ルール名が正しいか(スペル・命名一致)
  4. プラグインと ESLint のバージョンが整合しているか
  5. モノレポ構成の場合、参照先の node_modules が正しいか

まとめ

「Definition for rule ‘xxx’ was not found」エラーは、ESLint とそのプラグインの設定・バージョンの不整合によって発生します。
特に次の3つを押さえれば、ほとんどのケースは解決します。

  • 対応プラグインを正しくインストールする npm install -D eslint-plugin-react
  • .eslintrc で正しい extends / plugins を指定する { "extends": ["plugin:react/recommended"], "plugins": ["react"] }
  • ESLint / プラグインのバージョン整合を確認する

もし原因が不明な場合は、eslint --print-config <file> コマンドで最終的な設定内容を確認すると、どのルールが読み込まれているかを追跡できます。

参考

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