Skip to content

ESLint からの移行

このガイドは、現在 ESLint を使用している既存の JavaScript および TypeScript プロジェクトが、Oxlint に移行する場合を対象としています。

概要

Oxlint と ESLint は類似した構成概念を持ちますが、サポートされるルールや構成形式で異なります。

Oxlint は既に、ESLint Core および多数の人気プラグインから得られる 600 以上のルールをサポートしています。現時点では、ほぼすべての既存の ESLint Core ルールをサポートする予定であり、この作業は進行中です。

移行時に以下の点に注意してください:

  • 多くの ESLint Core ルールおよび人気プラグインのルールがサポートされています
  • 一部のルールはまだ利用可能ではない可能性があります
  • ESLint の構成ファイルは、Oxlint の構成形式に変換する必要があります
  • Oxlint は段階的な導入を想定しており、初期段階で完全な移行を行う必要はありません
  • Oxlint の JS プラグインを使用すれば、Oxlint でネイティブに実装されていない ESLint プラグインも利用可能です

ESLint flat config からの移行

プロジェクトで ESLint v9/v10 用の flat config(例:eslint.config.js または eslint.config.mjs)を使用している場合、@oxlint/migrate を使って自動的に移行できます。

移行ツールの実行

プロジェクトのルートディレクトリから実行します:

bash
npx @oxlint/migrate <optional-eslint-flat-config-path>

このコマンドは以下の処理を行います:

  • ESLint flat config ファイルを読み込みます
  • サポートされているルールを Oxlint 構成に変換します
  • ルールの深刻度およびオプションを保持します
  • ファイルやパス固有の上書き設定を保持し、リポジトリ内の異なる部分に異なるルールセットを適用できるようにします
  • globals(例:...globals.browser)を同等の env および globals 値に変換します
  • 特定のパス/ファイルを無視するためのルート ignore パターンを保持します

移行後に生成された .oxlintrc.json 構成ファイルは手動で編集可能です。

.eslintignore ファイルは Oxlint によって尊重され、移行中にそのまま残しておくことができますが、移行後はその内容を .oxlintrc.json 内の "ignorePatterns" フィールドに移動することを推奨します。リポジトリの .gitignore ファイルで無視されたファイル/パスについても、Oxlint は自動的にそれらを尊重します。

詳細については、利用可能なオプションのリストをご参照ください。

タイプ認識型 TypeScript ルール

あなたの ESLint 設定で typescript-eslint とタイプ認識型ルールを使用している場合、--type-aware フラグを指定できます:

bash
npx @oxlint/migrate --type-aware

これにより、生成される Oxlint 構成にタイプ認識型ルールが含まれるようになります。

タイプ認識型のラントは oxlint-tsgolint が必要であり、TypeScript のネイティブ再実装(別名:TypeScript 7)に基づいていますが、ほとんどの TypeScript プロジェクトにおいて大きなアップグレード作業なしに採用可能です。

Oxlint のタイプ認識サポートに関する詳細は、タイプ認識型ラントページをご覧ください。

JavaScript プラグイン

あなたの ESLint 構成が、Oxlint でネイティブにサポートされていないプラグインを使用している場合、JavaScript プラグインを使ってそれらを維持できます。@oxlint/migrate はデフォルトでこれらのプラグインを移行します。

これにより、ネイティブなルール/プラグインとともに、それらのルールを Oxlint を通じて引き続き利用できます。JS プラグイン機能はすべての ESLint プラグインをサポートするわけではありませんが、Oxlint の JavaScript プラグインシステムは、ESLint v9 API の大部分をカバーしており、継続的に改善されています。多くの JavaScript/TypeScript コードをカバーする ESLint プラグインは、問題なく Oxlint で動作するはずです。

もし、ESLint プラグインを JS プラグインとして移行しないことを希望する場合は、--js-plugins=false を指定してください。

JavaScript プラグインに関する詳細は、JS プラグインページをご覧ください。

ローカルのカスタム ESLint プラグイン

自分のリポジトリ内からローカルのカスタム ESLint プラグインを使用している場合(例:import pluginMyCompany from './eslint-plugin-my-company/lib/index.js')、これらは現時点では @oxlint/migrate によって自動的に移行されません。

しかし、移行スクリプトを実行した後、.oxlintrc.json に手動で追加できます:

.oxlintrc.json
json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "jsPlugins": ["./eslint-plugin-company/lib/index.js"]
}

Oxlint と ESLint の併用

すべての必要なルールが Oxlint で利用可能でない場合、Oxlint と ESLint を並行して実行できます。

一般的な設定は以下の通りです:

  1. 全てのサポートされるルールに対して Oxlint を有効化する
  2. サポートされていないルールについては、依然として ESLint を使う
  3. 重複するルールを ESLint で無効化する

Oxlint は ESLint と比べて大幅に高速であるため、エラーを早期に検出するためにまず Oxlint を実行し、必要に応じてのみ ESLint にフォールバックすることをおすすめします。

たとえば:

bash
oxlint && eslint

ESLint での重複ルールの無効化

eslint-plugin-oxlint を使って、すでに Oxlint で処理されている ESLint ルールを無効化できます:

bash
npm install --save-dev eslint-plugin-oxlint

これにより重複診断が削減され、ラント時間の大幅な短縮が可能になり、ESLint は実際にまだサポートされていないルールに集中できます。

長期的には、残りの重要なルールがすべて Oxlint に追加された後、設定を単純化し、プロジェクトの依存関係数を減らすために、完全に Oxlint への移行を強くおすすめします。

旧式の ESLint (v8.x) 構成からの移行

プロジェクトで旧式の構成ファイル(例:.eslintrc.js.eslintrc.json)を使用している ESLint v8.x が使用されている場合、@oxlint/migrate による自動移行はできません。

場合によっては、最初に @eslint/migrate-config でこれらの構成を自動的に ESLint flat config に移行し、その後 @oxlint/migrate で Oxlint に移行できます。

「旧式」の ESLint v8.x 構成ファイルの構造は、Oxlint の構成形式と非常に近いので、シンプルな設定では、ほとんどのルールとオプションを直接変換できます。

ルール/プラグインのサポート

特定のルールを、あなたが依存している ESLint のもので、まだ Oxlint に移植されていないことがあるかもしれません。

私たちがサポートするプラグインからのほぼすべてのルールは移植される予定です — そして多くはすでに移植済みです。移植されないものについては、元のプラグインで非推奨となっているか、すでに代替ルールが実装済みの場合もあります。

必要なルールが実装計画にあるかどうか、または他の同等のルールによってすでに実装されているかを確認するには、メタ課題 をチェックしてください。

Oxlint でネイティブに実装されていないプラグインについては、JS プラグインの使用を推奨します。