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 を使って自動的に移行できます。
移行ツールの実行
プロジェクトのルートディレクトリから実行します:
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 フラグを指定できます:
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 に手動で追加できます:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"jsPlugins": ["./eslint-plugin-company/lib/index.js"]
}Oxlint と ESLint の併用
すべての必要なルールが Oxlint で利用可能でない場合、Oxlint と ESLint を並行して実行できます。
一般的な設定は以下の通りです:
- 全てのサポートされるルールに対して Oxlint を有効化する
- サポートされていないルールについては、依然として ESLint を使う
- 重複するルールを ESLint で無効化する
Oxlint は ESLint と比べて大幅に高速であるため、エラーを早期に検出するためにまず Oxlint を実行し、必要に応じてのみ ESLint にフォールバックすることをおすすめします。
たとえば:
oxlint && eslintESLint での重複ルールの無効化
eslint-plugin-oxlint を使って、すでに Oxlint で処理されている ESLint ルールを無効化できます:
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 プラグインの使用を推奨します。
