ESLint の eslint-disable-next-line で警告を抑止できない
コメントでルールを抑止できないのは、ルール名のタイポ、TypeScript-ESLint のプレフィックス漏れ、JSX 内のコメント形式違反、対象行のずれ、--report-unused-disable-directives で逆に警告が出ている、のいずれかが原因。
エラー出力に表示されるルール名と完全一致させる。
公開: 更新:
要約
eslint-disable-next-line が効かないときは、(1) ルール名の不一致、(2) JSX のコメント形式違反、(3) 対象行とのずれ、(4) --report-unused-disable-directives 由来の警告、のいずれか。公式の disabling rules ドキュメント(新しいタブで開く) に沿ってルール名とコメント位置を見直す。
よくある原因
- ルール名の不一致:
no-unused-varsと@typescript-eslint/no-unused-varsを取り違えるなど - JSX 内コメント形式: JSX 子要素として書く場合は
{/* ... */}でないと parse されない - 対象行のずれ: 空行・別のコメントを挟むと
-next-lineの指す行が変わる unused-disable警告: 既に違反していない箇所に disable があると逆に警告される
解決策
1. ルール名を完全一致させる
エラー出力の末尾には (rule-id) が付く。
それをそのままコピーする。
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const _unused = 1;no-unused-vars (素のもの) と @typescript-eslint/no-unused-vars は別ルールなので、TypeScript プロジェクトでは後者を指定する。
2. JSX 内では JSX コメント形式を使う
return (
<div>
{/* eslint-disable-next-line react/no-unescaped-entities */}
<p>It's working</p>
</div>
);JS の // 形式は JSX 子要素位置では構文エラーになるか、コメントとして処理されず効かない。
3. 対象行の直前に置く
// eslint-disable-next-line no-console
console.log("debug"); // ← 直前の disable が効く空行や別コメントを挟むと、-next-line が指す行がずれて抑止されない。
4. 不要な disable を削除する
eslint --report-unused-disable-directives を CI で有効にしておくと、すでに違反していない箇所の disable が逆に警告される。CLI ドキュメント(新しいタブで開く) を参照しつつ、不要なコメントは消す。
実行例
実際に上記の手順を node:20 環境で動かすと、誤ったルール名(@typescript-eslint/no-unused-vars)を .js ファイルに指定した場合はルール定義が見つからないエラーが追加で発生し終了コード 1 となる一方、エラー出力の (rule-id) と完全一致させた場合は終了コード 0 で抑止が成功することが確認できる。
v9.39.5$ npx eslint wrong.js
/tmp/tmp.VuyS2aBENi/wrong.js
1:1 error Definition for rule '@typescript-eslint/no-unused-vars' was not found @typescript-eslint/no-unused-vars
2:7 error 'unused' is assigned a value but never used no-unused-vars
✖ 2 problems (2 errors, 0 warnings)
eslint の終了コード: 1(1 = 抑止されず no-unused-vars が残る)$ npx eslint fixed.js
eslint の終了コード: 0(0 = 抑止された)— 2026-08-02 時点の出力