Biomeはいいぞ

2023/12/03に公開

モニクル Advent Calendar 2023の3日目です。

どうも@circled9です。
モニクルで社内向けの財務システムでTypeScriptのコードを読んだり書いたりしています。

最近Biomeに勢いがあってうれしいので、lintとformatのことをつらつらと書いてみます。

lintとは

まずはlintとはなんでしょうか。

Wikipediaには以下のように書かれています。

lint とは、主にC言語のソースコードに対し、コンパイラよりも詳細かつ厳密なチェックを行なうプログラムである。静的解析ツールとも呼ばれる。以下に挙げるように、コンパイラではチェックされないが、バグの原因になるような曖昧な記述についても警告される。構文(シンタックス)レベルのチェックだけでなく、意味(セマンティクス)レベルのチェックまで実行するものもある。
https://ja.wikipedia.org/wiki/Lint

バグの原因になりそうな記述をチェックしてくれるってことですね、素敵。

formatとは

次にformatですが、単語が一般的すぎてズバリな説明が見つかりませんでした。

インデントにタブを使うのかスペースを使うのか、中括弧の前に改行を入れるのか入れないのかなど、コードの書き方に関するルールのことを指します。
いわゆるコーディングスタイルってやつです。

好みの分かれるやつですね。

JavaScriptのlintとformat

JavaScriptのlintとformatについて振り返ってみます。

JSLint、JSHint、ESLintがそれぞれリリースされ、それぞれ後発のものが流行ってきた印象です。
その後Prettierが出てきて、気づけばESLint + Prettierという組み合わせが鉄板の構成になりました。

ESLintはlintという名前ながら、formatの要素もカバーしていました。
しかし餅は餅屋、formatに関してはPrettierの方が優れている部分がありました。
そのため、ESLintとPrettierを併用するというスタイルが普及しました。

Rome

ESLintでlintしてPrettierでformatする、BabelでtranspileしてWebpackでbundleする、といったようにツールを連携させるためには、そのためにプラグインを入れたり設定ファイルを書いたりする必要があります。

その辺のツールチェインの組み合わせの複雑さ、各ツールがそれぞれ構文解析してASTを作り直すのは無駄だよね、みたいな問題意識からRomeが生まれました。
Romeは、lintやformat、bundleからtestまで全てのツールチェインを一つにしようという野心的なプロジェクトでした。
まさにローマは一日にして成らずです。

Biome

その後色々あって、Romeの主要メンバーによってフォークされたBiomeが生まれました。

Biomeはバイオームと読み、気候などで分けられた生態系の生物の集団という意味です。
ラテン語で二番目という意味のBisとRomeを足して、Biomeという名前にしたそうです。
いい名前を見つけたなと感心します。

Biomeは、最近Prettierの報奨金を獲得して話題になりました。
密かに推していたので嬉しい限りです。

Biomeを使っての感想

個人的にはBiomeをよく使ってます。
残念ながら小規模なコードベースでしか使ったことがないですが、それでもなんとなく速いなと体感できるくらいに速いです。

そして何より楽なのがセットアップです。
ちょっとしたアプリを書いてみようと思ったときに、ESLintとPrettierを入れて、さらにESLintのプラグインも入れて、設定ファイルを用意して.....というのは地味に面倒です。
Biomeですと、とりあえずインストールして、initで設定ファイルを生成して、あとは実行するだけ、という気軽さがあります。

まとめ

Biomeはいいぞ、みんな使ってみよう!


Biomeには今後も期待しています。

明日は@kubioさんです。よろしくお願いします!

株式会社モニクル

Discussion