😊

ESLintの新機能「Bulk Suppressions」

に公開

2025年4月、ESLint公式ブログにて発表された「Bulk Suppressions」について紹介します。

この機能ではeslintのルールを一括抑制することで、既存コードへのeslintルール導入が容易になります。

https://eslint.org/blog/2025/04/introducing-bulk-suppressions/

使用例

「eslintのルールを新規で追加したいが、既存コードのエラーが多すぎる、、」
→ 「既存コードでは特定のeslintルールを一括抑制し、新しいコードでのみ新規eslintのルールが効くようにする

導入の背景 (公式より引用)

開発チームはいつか必ず同じ課題に直面します。コード品質を向上させるために新しいESLintルールを有効にしたいものの、既存のコードベースにはすでに多数の違反が含まれている、といった状況です。ルールが自動修正できない場合、エラーとして有効にするのは困難です。

既存のプロジェクトでルールを有効化する場合、チームは通常、すべての違反を事前に修正するか、エラーではなく警告を使用するか、特定のファイルでルールを無効化するか、インライン無効化コメントを追加するかのいずれかを選択します。
それぞれのアプローチにはメリットがありますが、新しいコードに標準を適用しながら、既存の違反に徐々に対処するという理想的なバランスを実現できるアプローチはありません。

eslintのエラーをwarnにして回避することが多いので、わかりみが深い、、、

ESLint の新しい抑制システムは、より柔軟なアプローチを提供し、次のことが可能になります。

  1. 既存の違反を、ソース管理にチェックインできる別のファイルに記録します。
  2. ルールをエラーとして有効にします。これで、新しいコードにのみ適用されるようになります。
  3. 抑制ファイルに記録された既存の違反を自分のペースで解決します。

このアプローチでは、新しい違反を防止することを優先しながら、既存のコードを段階的に改善するための明確な道筋を提供します。

既存の違反とその箇所を抑制ファイルに記録し、管理するっぽいですね。

導入方法と使用例

前提

eslintのルールが定義されていること

一括抑制と自動修正の実行

以下のコマンドを実行します。

# Fix all autofixable violations and suppress the remaining ones
eslint --suppress-all --fix # --fixフラグはなくてもよいが推奨

# Fix all autofixable violations, but suppress only violations for <rule-name>
eslint --suppress-rule <rule-name> --fix # --fixフラグはなくてもよいが推奨

これにより、下記が実行されます。

  • 自動修正可能な違反はその場で修正
  • 修正できない違反は eslint-suppressions.json に記録

eslint-suppressions.jsonの中身

{
  "src/file1.js": {
    "no-undef": {
        "count": 1
    }
  },
  "src/file2.js": {
    "no-unused-expressions": {
        "count": 2
    }
  }
}
  • エラーが起きているファイルと個数が記録されます
  • eslint-suppressions.jsonに記録された箇所は違反として報告されませんが、他の行やファイルで同じルールに違反した場合はエラーとして検出されます。
  • 基本的にgit上で管理することが推奨されています。(チーム内で同じエラー抑制ができるため)
  • 同じファイル内で同じルールの違反エラーが増えてた場合は、countが増えます
  • 逆にエラーが修正され、エラー箇所が減った場合は警告が出ます。
There are suppressions left that do not occur anymore. Consider re-running the command with --prune-suppressions.

eslint-suppressions.json(抑制ファイル)の管理

デフォルトでは eslint-suppressions.json がプロジェクトルートに出力されます。
ファイル名や出力先はオプションで変更可能です。

eslint --suppress-all --suppressions-location ./.config/eslint-suppressions.json

導入のメリット

項目 説明
段階的導入 大規模プロジェクトでもLintルールを徐々に強化できる
CIの安定化 既存コードの大量違反を即時抑制でき、CIが通る状態を維持
コード品質向上 新しいコードだけをクリーンに保てる運用が可能

注意点

VSCodeのeslint拡張はまだ、「Bulk Suppressions」に未対応で抑制されているエラーも赤く表示されます。

下記Issueで話しているみたいなので、座して待ちます。

https://github.com/microsoft/vscode-eslint/issues/1997

まとめ

「Bulk Suppressions」は、Lintルールの段階的適用を可能にし、コード品質向上を開発コストを抑えて実現できます。

  • 大規模プロジェクトへの新ルール追加
  • CIでのLint違反によるブロック回避
  • 技術的負債の段階的解消計画の一環

個人的にはすごく便利だと思うので、積極的に使っていきたいです。

Discussion