ESLint の --fix で自動修正が適用されない
eslint --fix で直らないのは、そのルールが自動修正に非対応、対象ファイルが ignore されている、--fix-dry-run で書き込んでいない、などが主因。
fixable でない指摘は手動修正が必要。
公開: 更新:
要約
eslint --fix を実行しても警告が消えないのは、そのルールが自動修正に対応していないか、対象ファイルがそもそも修正されていないかのどちらかが大半です。
ESLint の自動修正は「安全に書き換えられる」とルール側が宣言しているものだけが対象です。
設計上の指摘(未使用変数の削除など意味が変わりうるもの)は --fix では直りません。
まず「fixable かどうか」と「ファイルが走査されているか」を切り分けます。
実行例
semi と no-unused-vars の両方に違反したファイルへ --fix を掛けると、セミコロンだけが補われて no-unused-vars は残る。
終了コードも 1 のままなので、「--fix したのに失敗する」ように見えるのは fixable でないルールが残っているからだと出力から読み取れる。
v9.39.5$ npx eslint app.js
/tmp/tmp.BuvRrWs9WA/app.js
1:15 error Missing semicolon semi
2:7 error 'unused' is assigned a value but never used no-unused-vars
2:17 error Missing semicolon semi
3:18 error Missing semicolon semi
✖ 4 problems (4 errors, 0 warnings)
3 errors and 0 warnings potentially fixable with the `--fix` option.
$ echo $?
1$ npx eslint app.js --fix
/tmp/tmp.BuvRrWs9WA/app.js
2:7 error 'unused' is assigned a value but never used no-unused-vars
✖ 1 problem (1 error, 0 warnings)
$ echo $?
1$ cat app.js
const used = 1;
const unused = 2;
console.log(used);$ npx eslint app.js
/tmp/tmp.BuvRrWs9WA/app.js
2:7 error 'unused' is assigned a value but never used no-unused-vars
✖ 1 problem (1 error, 0 warnings)
$ echo $?
1— 2026-08-31 時点の出力
検証環境
- 検証日
- 実行環境
node:20Debian GNU/Linux 12 (bookworm)- バージョン
- Node.js 20.20.2
- npm 10.8.2
- Python 3.11.2
- Git 2.39.5
この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。
よくある原因
- ルールが非対応: そのルールに自動修正が実装されていない
- 走査されていない: ignore 設定や拡張子の対象外で、ファイルが対象になっていない
- dry-run:
--fix-dry-runを使っていて、表示のみで書き込まれない - 設定の限定: flat config の
filesが狭く、対象ファイルにルールが効いていない
解決策
1. fixable か確認する
ルールが自動修正に対応していなければ --fix では直りません。
対応状況は公式のルール一覧で確認できます(修正可能なルールにはレンチアイコンが付きます)。
非対応なら手動修正が必要です。
2. 対象が走査されているか確認する
ファイルが ignore されていないか、拡張子が対象かを確認します。
# カレント配下を対象に自動修正
npx eslint . --fix
# 特定の種類だけ自動修正(problem / suggestion / layout)
npx eslint . --fix-type problem,layout--fix-dry-run は結果を表示するだけで書き込みません。
実際に直すときは --fix を使います。
3. flat config の対象を見直す
eslint.config.js(flat config)では files / ignores で対象が決まります。
対象から外れているとルール自体が適用されません。
// eslint.config.js
export default [
{
files: ['**/*.{js,ts,tsx}'],
rules: {
semi: ['error', 'always'], // fixable なので --fix で付与される
},
},
];各オプションの詳細は公式の CLI リファレンス(新しいタブで開く)を参照してください。