ろぼいんブログ

VS CodeやZedでOxlintを使うとTypeScriptなどの開発ツールの応答性が低下する問題の対処法

約2分で読めます
目次

症状の詳細

ZedにOxcの拡張機能をインストールしてOxlintの言語サーバーを有効化すると、コードを変更した際に次のような症状が発生しました。

  • コードを変更してからOxlintの診断結果が更新されるまで異常に時間がかかる
  • コードを変更してからTypeScript(typescript-ls)の診断結果が更新されるまで異常に時間がかかる
  • しばらくコードを編集していると、言語サーバーを再起動するまでOxlintやTypeScriptの診断結果が更新されなくなる
  • ターミナルで実行するVitestの処理に時間がかかるようになる

原因

調べた結果、これらの症状は実質的に1文字入力するごとにOxlintが新しいTypeScriptのプロセスを起動していることが原因でした。これにより、システムのリソースが圧迫されます。

広告

これらの問題は、プロジェクトでtype-aware lintingが有効になっている場合で、コードエディター側で入力のたびにlinterが実行される設定になっている場合に発生します。

TypeScriptのプロセスを大量に起動してしまう問題は、Oxlintのtype-aware lintingが使用しているtsgolintの問題です。tsgolint側でもこの問題は認識しているようで、VS Codeでも同様の問題が発生するとの報告があります。

対処法

根本的な対策はtsgolintの修正を待つしかありませんが、一時的な回避策としてエディター側の設定を変更できます。

Zedの場合

Zedの場合は、診断にデバウンスを追加して診断の呼びだし頻度を減らす方法があります。デバウンスの最適な長さはPCのスペックによって変わりますが、筆者の環境では1,000msに設定しました。

キー入力を停止してから少なくとも1,000msは診断が更新されなくなりますが、デバウンスなしでは前述の問題で10秒以上診断が更新されないのでそれよりはよいと思います。

広告
settings.json
{
"diagnostics": {
"lsp_pull_diagnostics": {
"debounce_ms": 1000
}
}
}

VS Codeの場合

VS Codeでは確認していませんが、VS Codeの場合はデバウンス設定がなく、"oxc.lint.run": "onSave"に設定して保存時にのみOxlintが走るようにするしかないようです。

settings.json
{
"oxc.lint.run": "onSave",
// 自動保存を有効化している場合は自動保存にデバウンスが必要
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000
}
この記事の検証内容と情報源

検証環境

  • OS:Windows 11
  • エディター:Zedバージョン1.21.0
  • Oxc拡張機能:バージョン0.4.8

検証内容

ZedのOxc拡張機能で記事に記載の問題が発生し、デバウンス設定で軽減できることを確認しました。

最終検証日

参考リンク

記事をシェア

フォローして最新情報を入手

Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。

Googleの優先ソースとして追加するGoogleの優先ソースとして追加する
広告
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。