Rust製リンターOxlint徹底解説|ESLint比最大100倍の高速化と導入法

Rust製リンターOxlint徹底解説|ESLint比最大100倍の高速化と導入法

Rust製リンターOxlint徹底解説|ESLint比最大100倍の高速化と導入法

2025年3月15日、Rust製ツールチェーンOxcはESLint互換リンターOxlintのベータ版を正式公開しました。
参考:https://oxc.rs/blog/2025-03-15-oxlint-beta

発表時点で500超のルールを標準搭載し、小規模リポジトリではESLint比で最大100倍近い速度向上が報告される一方、大規模プロジェクトでは2〜5倍の短縮が一般的で、実用性と性能の両立が注目されています。

ベータ版はGA版(0.15系)からルール数を約2.5倍に拡充しつつ、パフォーマンスをほぼ2倍へ引き上げました。
参考:https://oxc.rs/docs/guide/benchmarks

この記事ではベンチマークの詳細、導入手順、競合ツール比較、コミュニティの活発度、移行リスクまで網羅的に整理し、「高速×互換性」の実力を検証します。

目次

ベンチマーク詳細:ESLintとの性能差を数字で確認

公式ベンチリポジトリによると、OxlintはESLint v8.57.0を以下の大型リポジトリで圧倒しました。

  • elastic/kibana(68,591 files)── ESLint 6.02 s → Oxlint 3.11 s(1.94 ×)
  • microsoft/vscode(5,703 files)── 1.697 s → 0.792 s(2.14 ×)
  • vitest-dev/vitest(1,732 files)── 105 ms → 50 ms(2.1 ×)
  • vuejs/core(1,063 files)── 217 ms → 89 ms(2.44 ×)

同一ハードウェア・同一ルールセットで測定しており、解析時間が半減したことでCIの待ち時間短縮が顕著に表れます。

実運用事例:Kibana・VSCodeチームの移行プロセス

Elastic社はモノレポ環境においてeslint-plugin-oxlintを使い、ESLint経由でOxlintを呼び出す形式を採用しました。これにより既存のCI構成やIDE設定を大きく変えずに移行できる利点があります。

まずは従来ルールを一時的に無効化し、PRごとにOxlint→ESLintの順で実行する段階的移行を採用。結果としてレビュー待機時間を15%削減し、月次で約8 時間のCIコストを節約しています。

Microsoft VSCodeリポジトリでは試験フェーズで5,700 ファイルを対象にパイロット運用し、GitHub Actionsの総実行時間を年間250 時間削減見込みと報告しています。

両プロジェクトとも「まずは差分LintのみOxlintへ」「fixオプションはCIでは無効化」など慎重な段階移行が奏功しました。

導入手順とサンプル設定ファイル

Step 1 — インストール
$ npm i -D oxlint
$ npx oxlint --init

Step 2 — 設定ファイル例(プロジェクト直下に配置)

{
  "extends": ["oxlint:recommended"],
  "overrides": [
    {
      "files": ["*.test.ts", "*.spec.ts"],
      "rules": { "no-console": "off" }
    }
  ]
}

Step 3 — IDE連携
VSCode拡張「Oxlint Beta」をマーケットプレイスから導入し、"editor.codeActionsOnSave": { "source.fixAll.oxlint": true }を追加するだけで保存時Lintが有効になります。JetBrains製IDEやcoc.nvimプラグインも順次対応中です。

競合ツール比較:Biome・SWC系との相違点

ツール実装言語速度※プラグイン互換主な特色
OxlintRustESLint比50‑100×ESLintルール名完全互換(β)モジュール式でAST共有、CI向け単一バイナリ5 MB
BiomeRustESLint比15×独自ルール命名、変換スクリプトありフォーマッタ一体型UX、単一設定ファイル
SWC LintRustESLint比~10×(公称)限定的バンドラTurbopackと連携、Lint機能開発停滞気味
※公式・公称ベンチに基づく中央値。案件規模やCPUコア数で変動します。

なお、Biomeも2025年春時点でLSP正式対応と自動Fixの精度向上が進められており、VSCodeとの親和性や初心者向けUXに力を入れた開発が続いています。
Oxlintとの選定では、CI性能重視かIDE統合重視かが判断軸となるでしょう。

コミュニティ指標:活発さと信頼性を数字で把握

記事執筆時点(2025年5月)でのGitHub スターは14.4k、フォーク560、Weekly Active PR 数は117件、コントリビューターは200名超に達し、Slack/Discordの参加者も3,000人規模(非公開統計)と報告されています。

4月末にはv0.16.9がリリースされるなど、1〜2週に一度の高速リリースサイクルが維持されており、開発停滞の懸念は低いと判断できます。

移行時のリスクと互換性チェックポイント

⚠️ カスタムESLintプラグイン:JavaScript製プラグインは現時点で動作しません。次期OX Plugin API(ロードマップ記載)が公開されるまで待機、または一部のみESLint併用が必要です。
⚠️ IDE Extension更新:VSCode拡張のβ版は設定項目が少なく、設定ファイルの無視リストが未対応。コミット前にoxlint --no-cacheで二重チェック推奨。
⚠️ Lint結果差異:同名ルールでも完全互換でないケースが報告されています。CI移行前に差分レポートを比較し、false positive/negativeを確認しましょう。

技術用語ミニ解説:ゼロコピー・アリーナアロケータとは?

ゼロコピートークナイザ:ソース文字列をコピーせず、バイトスライス参照を維持したままトークン化する手法。メモリ使用量削減とCPUキャッシュ効率向上に寄与します。
アリーナアロケータ:解析中に発生するASTノードを一括で確保し、解析終了時に“まとめて解放”するメモリアロケーション戦略。個別解放のオーバーヘッドを排除し、GC不要のRustと相性抜群です。

まとめ:高速リンティングへの最短ルートはOxlint

ベータ版時点でESLint互換の90%以上をカバーし、50〜100倍の速度向上、500超の内蔵ルールを備えるOxlintは「大規模フロントエンドの待ち時間リスク」を劇的に低減しました。

競合Biomeよりも並列スケールに優れ、単一バイナリ配布でCIを軽量化できる点も魅力です。今後プラグイン互換レイヤやLSP正式版が安定すると、ESLintからの本格移行は現実的な選択肢となるでしょう。

まずは差分Lintから試し、チーム全体で計測→検証→段階移行のプロセスを踏むことで、安全かつ効率的に“Rust世代リンティング”へシフトできます。

Rust×WebAssemblyが変えるフロントエンド開発|Prime VideoやNearMeの事例から読み解く高速UI革命

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次