大量のエラーに対して rule ごとに高速に eslint --fix
できるツール 「eslint-interactive
」 を作ったので、その紹介です。
動機
ESLint のデフォルトの出力はエラーの発生源や修正のためのヒントなど、開発者に役立つ多くの情報を含みます。これは多く場合機能しますが、膨大な量のエラーが報告される状況ではあまり機能しません (例えばプロジェクトに ESLint を導入する時や、プロジェクトの .eslintrc
に大幅な変更を加える時など)。そうした状況では ESLint の出力が膨大になってしまい、開発者による出力の分析が困難になってしまいます。また、多くの種類のエラーがごちゃまぜになって出力されているため、エラーを修正するのも困難です。
そのため、このような多くのエラー発生する状況では、以下の 2 つの事柄が重要であると考えています。
- 全てのエラーをまとめた概要を表示し、簡単に全体を把握できること
- エラーごとの詳細を表示しても、かえって開発者を混乱させてしまいます
- 大量のエラーを効率よく修正する手段が提供されていること
eslint --fix
はエラーを効率よく修正する優れた手段の 1 つですが、一括で全ての rule のエラーを auto-fix してしまいます- rule によってはコードの挙動に影響を与える auto-fix を行うため、auto-fix は慎重に実施する必要があります
- そのため
eslint --fix
よりも小さい単位で auto-fix できる手段が提供されていることが望ましいです
eslint-interactive
の紹介
そこで eslint-interactive
という ESLint を wrap したツールを作成しました。このツールでは全てのエラーを rule ごとにグルーピングし、rule あたりのエラー数を整形して出力します。rule ごとの warning
と error
の内訳に加え、fixable なエラーの数など、開発者がエラーを修正するためのヒントも出力されます。また、いくつかの rule を指定して、生の ESLint のエラーメッセージを表示したり、auto-fix を実行することができます。
こんな感じに rule ごとのエラー総数を眺めつつ、rule ごとに auto-fix していけます。
インストール方法や使い方は README を見てもらえれば分かると思うので、先程貼ったリポジトリから辿って下さい。
eslint-nibble
との違い
eslint-interactive
とよく似たツールに eslint-nibble があります。どちらも同じ問題を解決するツールですが、eslint-interactive
には eslint-nibble
にないいくつかの機能があります。例えばeslint-interactive
はruleごとのfixableなエラー数を出力しますが、eslint-nibble
は出力しません。また、eslint-interactive
はruleごとのauto-fixのサイクルを高速で回すための様々な工夫 *1 がありますが、eslint-nibble
は一度 auto-fix を行うと毎回プロセスが終了するため、eslint-interactive
ほど高速にauto-fixのサイクルを回すことはできません。
どちらも同じ問題を解決できるツールではあるのですが、これらの機能が自分にとって非常に重要だったので、新規にeslint-interactive
として実装してみました。
おわりに
元々とあるプロジェクトの.eslintrc
を大改修する機会があって、その作業を円滑に進めるために用意したツールでした。実際に eslint-interactive
を何度か使って作業してみていますが、最初に semi
などコードの挙動を変えない rule の auto-fix を適用 => 次に import/order
などコードの挙動を変えうる rule の auto-fix を適用、といったように段階的に安全に作業を進めることができて、快適に過ごせてます。皆さんも同じような状況に遭遇したらぜひ eslint-interactive
を試してみて下さい。
*1:Lint結果をキャッシュする機能や、プロセスを維持したまま連続で auto-fix できる機能が備わってます。