Blog Blog

Unwritten Chapters

Geometric JF Fusion

Blog

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

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

30秒 もかかるのは遅すぎる!

ESLint を全ファイル対象に実行すると、30秒 もかかってしまう。これは明らかに遅すぎる!

開発中に何度も ESLint を実行するわけですから、30秒 も待たされるのは本当に辛い。もっと早くならないものかと、色々試してみることにしました。

AI さんたちに聞いてみた

まずは ChatGPT に聞いてみました。色々な設定を試してみたけど、全然早くならない。

じゃあ Claude に聞いてみよう。これも色々試してみたけど、やっぱり早くならない。

最後の頼みの綱として Gemini にも聞いてみました。でも、やっぱり早くならない。

AI さんたちのアドバイスを試しても、全然改善しないんだよなぁ。アドバイス結構量が多いから何かが間違ってるのか?なんでだ?何か読み落としてるのか?理解が足りないのか?さらに色々と調査をすることにした。

ルールが多すぎるのか?

もしかして、自分が書いた ESLint の定義が多すぎるのかもしれない。そう思って、徐々にルールを消していく。

でも、全然改善しない。ルールを減らしても、実行時間は変わらんのよねぇ。

他に原因があるはずだ。そう思いながら、設定ファイルを更に見直していく。

最後に残ったのはこれだった

色々試していって、最後に残ったのはこの設定でした。

TypeScript の型チェックを有効にするための設定で、projectService: true というオプションを使っていたんです。これが、TypeScript のプロジェクト全体を管理するためのサービスを起動して、型情報を取得する仕組みになっています。

でも、これが!?もしや!?

projectService を project に変更

projectService: trueproject: './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 さんたちに聞いてもなかなか解決できなかった問題が、試行錯誤して結果として解決できたときの達成感は、本当に大きいです。何度も挫折してやめようと思ったんだけど、「自分ならできる!」という根拠のない自信が毎日湧いてきて、解決するまで夜しか眠れなかったよ。

でも本当にこれで大丈夫なのか?早くなりすぎたんだけど。なんか間違ってそうな気がする。あんなに自信満々だったのに、今は不安でいっぱいだ。

いいなと思ったら応援しよう!

Support チップで応援する

応援してもらえると最高に嬉しいです!