Biome と ESLint の lint ルールの互換性
Biome では、現在約 150 個程度の JavaScript・TypeScript に関する lint ルールを実装しています。
これらのルール多くは既存の ESLint 関連で実装されているルールと同じものになっているのですが、ルールの名前が異なることもあり、その対応関係がわかりにくくなっています。
そこでこの記事では、フロントエンド開発をする場合によく設定していそうな次の lint ルールについて、Biome で実装されているかどうかの対応表を紹介します。
-
eslint (
eslint:recommended
) -
typescript-eslint (
plugin:@typescript-eslint/recommended
) -
eslint-plugin-jsx-a11y (
plugin:jsx-a11y/recommended
) -
eslint-plugin-react (
plugin:react/recommended
) -
eslint-plugin-react-hooks (
plugin:react-hooks/recommended
)
ESLint から Biome への移行を考える際の参考にしてもらえればと思います。
また、この記事よりさらに細かい対応表については次のディスカッションや公式サイトにもまとまっているので、興味ある人はこちらも参考にしてもらえればと思います。
まとめ
対応表がずらっと並ぶので、まとめを先に書いておきます!
- ESLint でよく利用されている recommended ルールの 8 割以上は Biome でも実装されています
- exhaustive-deps などの hooks 関連のルールも実装されています
- Biome では linter と一緒に import 文をソートする機能も含む formatter も利用できます
-
prettier
やeslint-plugin-import
などをインストールする必要はありません
-
ESLint との互換性を意識した設定は次のようになります。
{
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"correctness": {
"noUndeclaredVariables": "error",
"noUnusedVariables": "error"
},
"style": {
"noNamespace": "error"
},
"nursery": {
"useExhaustiveDependencies": "error",
"useHookAtTopLevel": "error"
}
}
}
}
ESLint recommended
no-mixed-spaces-and-tabs などのスタイルに関するルールを除いた対応表は次のようになります。🚧 になっているルールは、今後実装される予定があります。
TypeScript ESLint recommended
型情報を必要しないルールとの対応表は次のようになります。Biome では TypeScript の型情報を扱うことができないので、型情報が必要なルールについては基本的にサポートしていません。
eslint-plugin-jsx-a11y recommended
対応表は次のようになります。eslint-plugin-jsx-a11y は、Next.js や Remix が提供している ESLint ルールにも利用されています。
eslint-plugin-react/react-hooks recommended
eslint-plugin-react の recommended ルールの中には、hooks が登場する以前のクラスコンポーネントなどに関連する古いルールも多く含まれています。古いルールを除いた対応表は次のようになります。
eslint-plugin-react-hooks の対応表は次のようになります。
react-hooks recommended | Biome | recommended |
---|---|---|
exhaustive-deps | useExhaustiveDependencies | |
rules-of-hooks | useHookAtTopLevel |
最後に
Biome の discussion の投稿を元に、ESLint 関連の recommended ルールにフォーカスした対応表を作ってみました。コントリビューターとしては、思ったより a11y のルールの実装が足りてなかったことに気づけてよかったです。
ちなみに、Biome が対応してないルールの中には、parser や formatter などで部分的に対応がされているものがあります。例えば no-octal のケースでは、パーサーがエラーを報告し、エディタで確認することができます。
また、Biome は linter だけではなく import 文をソートする機能も含む formatter の機能も使えるので、formatter や linter の設定で楽をしたい人は是非使ってみてもらえるとよいと思います。
Biome の Discord に日本語のチャンネルも作ってみたので、Biome について質問したい方がいれば次のリンクからでもお待ちしています。
Discussion