ESLint が 30秒 かかって遅すぎる!原因は projectService の設定だった

30秒 もかかるのは遅すぎる!
ESLint を全ファイル対象に実行すると、30秒 もかかってしまう。これは明らかに遅すぎる!
開発中に何度も ESLint を実行するわけですから、30秒 も待たされるのは本当に辛い。もっと早くならないものかと、色々試してみることにしました。
AI さんたちに聞いてみた
まずは ChatGPT に聞いてみました。色々な設定を試してみたけど、全然早くならない。
じゃあ Claude に聞いてみよう。これも色々試してみたけど、やっぱり早くならない。
最後の頼みの綱として Gemini にも聞いてみました。でも、やっぱり早くならない。
AI さんたちのアドバイスを試しても、全然改善しないんだよなぁ。アドバイス結構量が多いから何かが間違ってるのか?なんでだ?何か読み落としてるのか?理解が足りないのか?さらに色々と調査をすることにした。
ルールが多すぎるのか?
もしかして、自分が書いた ESLint の定義が多すぎるのかもしれない。そう思って、徐々にルールを消していく。
でも、全然改善しない。ルールを減らしても、実行時間は変わらんのよねぇ。
他に原因があるはずだ。そう思いながら、設定ファイルを更に見直していく。
最後に残ったのはこれだった
色々試していって、最後に残ったのはこの設定でした。
TypeScript の型チェックを有効にするための設定で、projectService: true というオプションを使っていたんです。これが、TypeScript のプロジェクト全体を管理するためのサービスを起動して、型情報を取得する仕組みになっています。
でも、これが!?もしや!?
projectService を project に変更
projectService: true を project: './tsconfig.json' に書き換えてみました。
すると、新しいエラーが出てきました。エラーはどんどん変化していく。それにも対応してみると、早くなった! これだったのかよ!
設定を変えただけで、実行時間が大幅に短縮されたんです。やっと見つけたという感じでした。
Svelte ファイルでエラーが!
できたと思ったら、Svelte ファイルを開いてみるとエディターにエラーが表示される。うううう。なかなか辛いぞ!
TypeScript ファイルでは project を使い、Svelte ファイルでは projectService を使う必要があったんです。Svelte ファイルは特殊なファイル形式なので、型チェックの方法が違うんかなぁ。もう疲れたのでこれ以上深掘りしたくない。
試行錯誤を繰り返して、ついにできました。どれだけ試行錯誤したことか。
なぜ projectService が遅いのか?
では、なぜ projectService: true だと遅いんやろうか?
projectServiceは、TypeScript のプロジェクト全体を管理するサービスを起動して、型情報を取得する仕組みです。これは、複数のファイルを横断的に解析する必要があるため、時間がかかってしまいます。一方、
project: './tsconfig.json'は、指定した tsconfig.json ファイルを直接読み込んで、その設定に基づいて型チェックを行う方法です。こちらは、必要なファイルだけを解析するため、より高速に動作します。
ほ、ほんまに?でも、3倍も速さ変わったりするんか。なにか読み落としはないんか?設定が間違ってるならいっそのこと動かなくなってほしい。動くけど遅いとか、設定書き換えたら早くなるとか、全然安心できない。
設定ファイルの整理も同時に
今回はこれをきっかけに、eslint.config.js に直接書いていた独自のルールも別ファイルに切り出して管理することにしました。
設定ファイルが長くなりすぎると、管理が大変になるし、何が原因で遅いのかも分かりにくくなるよね。ルールを種類ごとに分けて、別ファイルに整理することで、設定の見通しも良くなりました。
切り出したりしたら動作がおかしくなったり、細かいところで調整が必要だったりと苦労したのですが、結果的には良かったと思います。
結果的に変えたのはほんの数行
結果的に見れば、変えたのはほんの数行です。でも、一週間ぐらい前から悩んでいて、アレやコレやとやってもできなかったので、達成感が半端ないです。
設定を変えるだけで、実行時間が大幅に短縮される。シンプルな解決策だったけど、見つけるまでが大変だった。
ESLint は完璧にマスターしたつもりだった
ESLint は完璧にマスターしたつもりでいたのに、全然マスターできてなかったんです。
課題が発生して、それに立ち向かって、解決したときに成長を感じられる。この繰り返しで強くなるしか無い。そう思いました。
一週間も悩んで、AI さんたちに聞いてもなかなか解決できなかった問題が、試行錯誤して結果として解決できたときの達成感は、本当に大きいです。何度も挫折してやめようと思ったんだけど、「自分ならできる!」という根拠のない自信が毎日湧いてきて、解決するまで夜しか眠れなかったよ。
でも本当にこれで大丈夫なのか?早くなりすぎたんだけど。なんか間違ってそうな気がする。あんなに自信満々だったのに、今は不安でいっぱいだ。