概要
私の観測範囲では、ESLintの設定をAIに任せると、defineConfig()やextends、globalIgnores()を削除しようとすることがあります。
公式にも記載があり明らかに正しいものなのに、AIがこれらを消そうとするのは問題です。
というわけで、この内容を読ませればAIがESLint v9.22以降の機能を正しく理解できるようになる、という目的でこの記事を書きました。
そのうちAIが最新情報を学習すれば不要になるはずですが、それまでの間、参照用資料として役立てば幸いです。
なぜAIはこれらの設定を消そうとするのか
ESLint v9.0.0(2024年4月リリース)でflat configがデフォルトになった際、一時的にextendsが使えなくなりました。
AIはこの情報を学習しているのか、extendsを削除しようとします。
しかし、ESLint v9.22.0(2025年3月リリース)でextendsが再導入されました。
defineConfig()やglobalIgnores()も誤って消そうとしてしまうことから鑑みるに、新しい情報+ネットにそこまで情報が落ちていないということで、AIが把握できていないのかもしれません。
ESLint v9.22以降の正しい設定方法
1. defineConfig() - 型安全な設定の基本
defineConfig()は、ESLint v9.22で導入された型安全な設定を実現する関数です。
主な利点
- TypeScriptの型チェックが効く
- 後に説明するextendsが利用できるため、冗長なconfig objectを書かなくて済む
正しい使い方
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["src/**/*.js"],
rules: {
semi: "error",
"prefer-const": "error",
}
}
]);
2. extends - 設定の継承を簡単にする
ESLint v9.0.0で削除 → v9.22.0で再導入されました。
再導入された理由
プラグインごとに設定のエクスポート方法が異なり、ユーザーが混乱していたため。
v9.22以前の書き方
// プラグインによって書き方がバラバラで混乱する
export default [
js.configs.recommended, // オブジェクト
...tailwind.configs["flat/recommended"], // 配列(スプレッド必要)
...reactPlugin.configs.flat.recommended, // 配列(スプレッド必要)
];
v9.22以降の統一された書き方
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.js"],
extends: [
"js/recommended",
"tailwind/flat/recommended",
reactPlugin.configs.flat.recommended,
]
}
]);
extendsが受け付ける形式
- 文字列(プラグイン設定名)
- オブジェクト(設定オブジェクト)
- 配列(複数の設定)
3. globalIgnores() - グローバル除外パターンを明示的に
ignoresプロパティは、単独で使うとグローバル除外、他のプロパティと併用するとローカル除外という二重の意味を持っていました。
v9.22で追加された明示的な方法
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
// グローバルに除外(全ルールに適用)
{
globalIgnores(["dist", "build"]),
},
// ローカルな除外(このルールセットのみ)
{
ignores: ["tests/*.js"],
rules: {
"no-console": "error"
}
}
]);
AIに正しく設定を依頼する方法
悪い依頼
ESLintの設定ファイルを作ってください。
良い依頼
ESLint v9.22以降の最新機能(defineConfig、extends)を使ってTypeScriptプロジェクトの設定ファイルを作成してください。
公式ブログ(https://eslint.org/blog/2025/03/flat-config-extends-define-config-global-ignores/)の内容を参考にしてください。
また、この記事のURLをAIに渡すことで、正しい設定を生成してもらえる可能性が高まります。
まとめ
| 機能 | 導入バージョン | 用途 |
|---|---|---|
defineConfig() |
v9.22.0 | 型安全な設定、冗長な記載の簡略化 |
extends |
v9.22.0(再導入) | 統一的な設定継承 |
globalIgnores() |
v9.22.0 | 明示的なグローバル除外 |
重要なポイント
-
defineConfig()とextendsは削除しないでください - これらはESLint v9.22(2025年3月)で追加された最新機能です
- AIがこれらを削除しようとする場合、この記事を参照させてください