Upgrade to Pro — share decks privately, control downloads, hide ads and more …

最近の推しリンター、Oxlintをご紹介

 最近の推しリンター、Oxlintをご紹介

Avatar for Ryuya Yanagi

Ryuya Yanagi

February 25, 2026
Tweet

More Decks by Ryuya Yanagi

Other Decks in Technology

Transcript

  1. Oxlintとは Rust 製の JavaScript/TypeScript 向けリンター ドキュメント:https://oxc.rs/docs/guide/usage/linter.html Oxc という JavaScript/TypeScript 向けのツール群の1つ

    Oxlint 以外にも Oxfmt(Prettier 互換のフォーマッター)や、oxc-parser など がある Oxlint の内部で oxc_parser や oxc_allocator などを使用している
  2. Oxlint のベンチマーク ESLint の50~100倍、同じ Rust 製のリンターである Biome の約2倍速い https://github.com/oxc-project/bench-linter 手元検証(MacBook

    Pro M1 Max / 64GB): 個人プロジェクトで ESLint 約6秒 → Oxlint 約0.9秒(約6.7倍高速化) プロジェクトの規模が大きくなるほど倍率は上がっていく
  3. 組み込みのプラグイン 690以上のルールが Rust で実装されている ESLint のコアルールや、 eslint-plugin-import 、 eslint-plugin-react 、

    @next/eslint-plugin-next などよく使うプラグインのルールが実装されている Vue.js は script タグの部分のみ対応済みで、Svelte などは今後対応予定
  4. 組み込みのプラグインの使用例 .oxlintrc.json に以下のような設定を書くことで有効にできる { "$schema": "./node_modules/oxlint/configuration_schema.json", "plugins": ["react", "import"] }

    ESLint だと eslint-plugin-react などを依存関係として追加する必要があるが Oxlint の場合はその必要がない 昨今のサプライチェーンアタックのリスク軽減になるかも これらのルールは Rust で記述されているため、実行速度は ESLint プラグインより も高速に動作するメリットもある
  5. JS Plugins とは JavaScript で記述されたプラグイン、カスタムルールを実行する機能(Technical preview) Oxlint のプラグインAPIは ESLint v9

    以上と互換性があるので既存の ESLint プ ラグインがほぼ動く TypeScript の型情報が必要な場合や、Svelte、Vue などのファイルは動かない 対応状況:https://github.com/oxc-project/oxc/discussions/14862 JavaScript でプラグインを書いても Rust <-> JavaScript 間のオーバーヘッドが少な くなるように設計されている https://github.com/oxc-project/oxc/issues/2409
  6. JS Plugins の使用例 @tanstack/eslint-plugin-query を使用する例 { "$schema": "./node_modules/oxlint/configuration_schema.json", "jsPlugins": ["@tanstack/eslint-plugin-query"],

    "rules": { // 現状 recommended などの preset を一括で有効にすることはできないので1つずつ指定する必要がある "@tanstack/query/exhaustive-deps": "error", "@tanstack/query/no-rest-destructuring": "warn", "@tanstack/query/stable-query-client": "error", "@tanstack/query/no-unstable-deps": "error", "@tanstack/query/infinite-query-property-order": "error", "@tanstack/query/no-void-query-fn": "error", "@tanstack/query/mutation-property-order": "error", }, } 既存のプラグインや、カスタムルールがそのまま動くため、ESLint からの移行がしや すい
  7. Type-Aware Linting とは TypeScript の型情報を使用したリント機能のこと ESLint では typescript-eslint を使用することで機能するが、内部で TypeScript

    を使用しているため、速度が遅いという問題がある Oxlint では typescript-go(tsgo)を使用した tsgolint を使用して、型情報を利用し たリントの高速化を行なっている(alpha) 実行コマンド: oxlint --type-aware tsgo はまだ型情報を取得するAPIを公開していないため、非公開のAPIを無理 やり使用して実装されている
  8. Biome の Type-Aware Linting との違い Biome にも Type-Aware Linting があるが

    TypeScript / tsgo を使用せず、独自に型推 論を行なっている TypeScript コンパイラの挙動を完全に再現できてはいないが、noFloatingPromises のルールでは85%ほどは網羅できているとのこと https://biomejs.dev/blog/biome-v2-1/#improved-type-inference Oxlint は tsgo の非公開APIを使用しているため、tsgo の変更に追従していけるのか どうかが問題になるが、Biome は自前で実装しているため、精度はやや劣るが運 用の安定性は高そう
  9. 開発スピードの速さ 週に1 ~ 2回マイナーバージョンが上がっており、直近1週間(2026/02/18〜 2026/02/24)でマージされた Pull Request は109個 VoidZero という会社が開発しており、フルタイムメンテナーの存在が大きい

    VoidZero は Vue.js / Vite を開発したEvan Youさんが立ち上げた会社 またクォーターごとに何をやるのかが明確になっているため、今後追加・改善さ れる機能を先にキャッチアップできるのも嬉しい Plan for 2026 Q1 (Jan - Mar)
  10. まとめ ESLint の50~100倍、同じ Rust 製のリンターである Biome の約2倍速い 組み込みのプラグインが多数実装されており、依存関係を追加しなくても様々な ルールを有効にできる JS

    Plugins を使用することで既存の ESLint プラグインや、カスタムルールが動作す る tsgo を使用した Type-Aware Linting が実装されており、型情報を使用したリント ルールも高速に実行できる 毎週多くの新規のリントルールや機能が追加されている