ESLint から Biome に移行したメモ

2024-07-10

はじめに

個人のプロジェクトで、ESLint v9 へのメジャーバージョンアップデートがうまくできなくて辛かった。
なので、Biome (旧: Rome) に移行すると良かったので、何が良かったのかを纏めます。

移行方法

単純に ESLint を削除し、Biome の README にしたがってセットアップすればOK。
ルールは既存のものと差が出ないように調整しましたが、私の設定ならプラグインなどはなくてもできました。

https://github.com/biomejs/biome

ESLint v9 移行への参考記事

一応調べたので、メモとして残しておきます。

が、途中で挫折しました。
移行ツールみたいなのもあるようですが、その後メンテできるんだろうかみたいな不安もあったりして、Biome に移行しました。

良かったこと

実行速度が速くなった

CI (GitHub Actions) 上では、約8秒ぐらい短縮されていました。

手元のPCで実行した結果も、7.7倍ぐらい速くなっていました。
time で計測した結果は以下のとおりです。

$ time npm run lint

> lint
> biome check ./src/

Checked 307 files in 37ms. No fixes applied.

real    0m0.279s
user    0m0.399s
sys     0m0.067s
$ time npm run lint

> lint
> eslint ./src/

...

real    0m2.145s
user    0m3.222s
sys     0m0.290s

依存関係がシンプルになった

package.json の依存が @biomejs/biome だけになりました。
ESLint の頃は、本体+プラグイン複数の依存があり、若干ややこしいな〜、と思っていました。
個人プロジェクトなので、メンテナンスコストを減らすためなるべく依存関係減らしたいので、細かいですが結構嬉しい変化でした。

Biome の継続可能性

Biome は今後も継続的にアップデートされているかどうかも気になります。

少なくとも、直近1年間は継続的にコミットがされていますし、Star は 12.6k あります。

https://github.com/biomejs/biome/community

GitHub commit activity chart

スポンサーもいくつかついているようです。
(Gold Sponsors には、WebRTC で有名な 時雨堂 が入っているんですね)

https://github.com/biomejs/biome#sponsors

[余談] Biome の前身

Biome は、もともと Rome という名前で開発されていました。

https://github.com/rome/tools

Rome を Fork しているようです。
詳細まで読んでいませんが、Rome Tools Inc. が終わり、有志で開発されているような印象です。

https://biomejs.dev/blog/annoucing-biome/

おわりに

Biome はシンプルに使えて、高速に実行できるので移行してよかったと感じています。