【Biome】フロントエンドをひとつにまとめる垂直統合ツールチェーンBiome爆誕

[Rome](https://rome.tools/)は、混沌の極みであるフロントエンドツールをひとつに纏め上げようという気宇壮大なプロジェクトです。
当初はOSSとして始まり、その後は資金提供を受けて会社を設立し、メンバーは給料をもらってフルタイム開発に従事していました。
さらに[元々JavaScriptで書かれていて低速だったのをRustに切り替え](https://qiita.com/rana_kualu/items/dcadf11b3e97db1dded6)、2022年11月には[無事Stableまで辿り着く](https://qiita.com/rana_kualu/items/47341ce38b3df6a75559)などなど順風満帆であるように見えました。

しかし、その裏では大きな問題が発生していたようです。
開発は2023年1月あたりで停滞し、さらに一部の主要開発者が[相次いで](https://twitter.com/MichaReiser/status/1613474278808162304)[脱退](https://twitter.com/ematipico/status/1614980505018982402)してしまいました。
どうやら資金が尽きて給料を支払えなくなったようです。

このあたりの経緯は、ちょうど同時期に加入した[nissy_dev](https://twitter.com/nissy_dev)さんの[Rome の core contributor になった](https://zenn.dev/cybozu_frontend/articles/become-a-core-contributor-of-rome)に詳しく記載されています。

その後2023/09/03には[Rome公式サイト](https://rome.tools/)のSSL証明書が有効期限切れになり、10月にはrome.tools自体が消滅するなど、Romeはもはや終わったといっていいでしょう。
というわけでRomeの開発メンバーの一部が新たにRomeのfork、[Biome](https://biomejs.dev/)を立ち上げました。
以下はBiomeのアナウンス記事、[Announcing Biome](https://biomejs.dev/blog/annoucing-biome)の紹介です。


# Announcing Biome

Webの垂直統合ツールチェーン、Biomeを発表できてうれしく思います。
BiomeはRomeのオフィシャルなforkであり、Romeの後継です。
Biomeの中の人は、これまでRomeを維持してきたメンテナと同じです。

・[Github organization](https://github.com/biomejs)
・[GitHubリポジトリ](https://github.com/biomejs/biome)
・[Discordアカウント](https://discord.gg/BypW39g6Yc)
・[Twitterアカウント](https://twitter.com/biomejs)


## Background

なぜコアチームが新しいプロジェクトを立ち上げたのか、その背景や状況を解説します。

### How it started

フォークした理由を説明する前に、これまでの経緯と背景を説明します。
この決断に至った理由を理解する助けになるでしょう。

私が[Romeに参加した](https://github.com/rome/tools/pull/794)当初、プロジェクトはまだまだ未熟で、[TypeScriptで書かれて](https://github.com/rome/tools/tree/archived-js)いました。
時間の経過とともに、プロジェクトは様々な変遷を経てきました。

Romeは当初MetaによるOSSとしてリリースされました。
Metaは優れたOSSの創造主ですが、それを好まない人も多くいます。
少なくとも私の感じた印象では、彼らは忌避されるべき対象ではありませんでした。

Romeという名前のnpmパッケージは既に別の人が使っていたので、その権利を受け取ったときには既に多くのバージョンが使われていました。
そのため、開発チームはバージョニングにいつも苦労していました。
バージョニングなんて本来苦戦するようなところではないはずなのに。

数か月後、プロジェクトはMetaから離れました。
半年後にSebastian McKenzieはRome Tools Inc.という会社を設立し、Romeを持続可能なプロジェクトにすることを目標としました。

私はすっかりRomeに心酔していたので、このニュースを聞くやいなや仕事を辞めて冒険の旅に出ることを決意しました。
数週間後、私はRome Tools Inc.に正社員として入社しており、開発ツールの開発に取り掛かっていました。
私にとって、夢が実現したかのような瞬間でした。


### How it ended (or did it?)

全ての新興企業が必ずしも成功するわけではなく、Rome Tools Inc.もその運命から逃れられませんでした。
結局、全社員が解雇されました。

Rome Tools Inc.での私の冒険は残念ながら終わってしまいましたが、幸いなことに私のキャリアは終わらずに済みました。
数か月後、私は[Astro Technology Company](https://astro.build/)に拾われ、フルタイムで働くことになりました。
素晴らしい職場で、素晴らしいチームメイトたちと共に、好きなことを仕事にできて最高です！

とはいえ、私はまだRomeに心残りがありました。
さらにそれだけではなく、私は暇なときにパーサーやコンパイラに取り組むのが大好きでした。
私は[Rust](https://www.rust-lang.org/)が大好きで、そしてRomeはそれを最大に引き出すことのできる完璧なOSSプロジェクトでした。

だから、私は自由時間にはRomeへのコントリビュートを可能な限り続けていました。
幸いなことに、私にはまだRomeの権限を剥奪されていませんでした。
Rome Tools Inc.との冒険は失敗してしまいましたが、Romeプロジェクトそのものは諦めたくありませんでした。

幾人かの[コントリビュータが参加して](https://biomejs.dev/blog/annoucing-biome#the-core-team)、プロジェクトを手伝ってくれました。
私は孤独ではありませんでした。
これこそがOSSの素晴らしいところであり、プロジェクトが好きで好きで自分も参加したい、そんな人たちを見つけることができるのです。

6月には[Rome at JsNation 2023でトークもしました](https://portal.gitnation.org/contents/rome-a-modern-toolchain)。

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/79a217ec-f836-5f83-b982-d9ee6cfa7494.jpeg)


さて、Romeプロジェクトはかろうじて生きていましたが、維持することが困難になってきました。
・Discordの管理者権限を持っていないため、権限の委譲ができない。
・Webサイトのホスティングにアクセスできない。
・npm、VSCodeなどのレジストリにアクセスできない。
・Romeプロジェクトは未だRome Tools Inc.の所有であるため、法的に帰属が曖昧である。

オーナーにコンタクトを取ろうとしましたが、接触することができませんでした。
我々にできることは、たったひとつしかありませんでした。
[私たちなら、それができます](https://biomejs.dev/blog/annoucing-biome#the-core-team)。

## Enters: Biome

我々はBiomeを立ち上げました。
コアチームのメンバー同士で何週間も議論し、友人たちと話をした結果、一から出直すことを決意しました。

新しいプロジェクトでも"rome"の名前を残したいと考えてはいましたが、それは難しいことがわかりました。
・既にSebastianが"rome"の名前でGitHubやドメイン、open collectiveなどの名前を取得しているため、正当に引き継ぐことが困難。
・Discordサーバを委譲する権限がない。Discordコミュニティはたいへん重要な資産である。
・この名称はRome Tools Inc.に帰属するため、法的にどうなるかはっきりしない。
・"rome"の名前が商標登録されているかわからないため、法的問題が発生する可能性がある。
・この名は、前述のように多くの負の遺産を背負っている。

これらの状況を鑑み、我々は新しい名をつけることにしました。


### “New is always better.”

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/b7a60f8e-3966-9eb5-f29d-008715614697.png)

新しいことは、常に良いことだ。

Biomeは、Romeと同じ[哲学](https://biomejs.dev/internals/philosophy)、同じ使命を担います。
しかし、ロードマップはこれまでと変わるでしょう。
新しい機能を追加するよりも、現在の機能をより安定化させる方向に進むかもしれません。

Biomeは万能ツールチェーンを目指しています。
最近我々はtransformationに取り組み始めましたが、これは最終的にコンパイラへと進化するでしょう。

## Why Biome

なぜBiome？

我々は新たな"Rome"を作り上げたかった。
そこで我々は、"Bis"と"Rome"を融合させました。
"Biome"の誕生です。


## I still use the rome package. What should I do?

まだRomeを使っています。どうすればいい？

Romeパッケージは既にメンテナンスされていません。

1. `@biomejs/biome`に変更する。

Biomeにはたくさんの新機能とバグの修正が含まれています。
詳しくは[blog記事](https://biomejs.dev/blog/biome-v1)を参照ください。

```js
{
-  "rome": "12.1.3"
+  "@biomejs/biome": "1.0.0"
}
```

2. scriptsのCLI名を変更する。

```js
{
  "scripts": {
-    "format": "rome format --write ./src",
+    "format": "biome format --write ./src"
  }
}
```

3. `rome.json`の`$schema`を変更する。

```js
{
-  "$schema": "https://docs.rome.tools/schemas/12.1.3/schema.json",
+  "$schema": "https://biomejs.dev/schemas/1.0.0/schema.json"
}
```

4. オフィシャルの[VSCode](https://marketplace.visualstudio.com/items?itemName=biomejs.biome)もしくは[open VSX](https://open-vsx.org/extension/biomejs/biome)エクステンションをインストールする。


5. settings.jsonを編集する。

Rome関連の記述がある場合は更新する必要があります。

```js
{
  "[javascript]": {
-       "editor.defaultFormatter": "rome.rome"
+       "editor.defaultFormatter": "biomejs.biome"
  },
  "editor.codeActionsOnSave": {
-    "quickfix.rome": true,
-    "source.organizeImports.rome": true
+    "quickfix.biome": true,
+    "source.organizeImports.biome": true
  }
}
```

Biomeは`rome.json`を認識するため、`rome.json`については何もする必要がありません。
また設定ファイル`biome.json`も受け取ります。

いずれは`rome.json`を全て`biome.json`に置き換える予定ですが、その際はBiomeが自動的に作業を行います。
従って手動で何かを行う必要はありません。

## The core team

[Emanuele Stoppa](https://github.com/ematipico) わたしです。プロジェクトリーダーだよ🤓

[Denis Bezrukov](https://github.com/denbezrukov) Denisは長いことプロジェクトに貢献してきました。フォーマットやパーサなど多くのツールを手掛けています。

[Victorien Elvinger](https://github.com/Conaclos) Victorienは情熱的なキャラで、Linterにルールを追加したり、既存のルールを最適化したりしています。

[Daiki Nishikawa](https://github.com/nissy-dev) ルールの追加修正、内部セマンティックモデルの改善、JavaScript/TypeScriptパーサーへの文法の追加など。

[unvalley](https://github.com/unvalley) Linterとパーサーに貢献し、特に正規表現の複雑なルールに取り組んでいます。


## Special thanks

[Strager](https://github.com/strager) 彼のインプットと適切な指摘により、Biomeはここまで成長することができました。

[Boshen](https://github.com/Boshen) Rustへの書き替えなど、このプロジェクト最大の貢献者のひとりです。彼は現在、Biomeと同じようなプロジェクトである[oxc](https://github.com/web-infra-dev/oxc)を率いています。

[Micha](https://github.com/MichaReiser) Rome Tools Inc.の元社員で、現在は[Ruff](https://github.com/astral-sh/ruff)プロジェクトの開発者。我々の良き相談相手であり、多くのアドバイスをもらいました。


# 感想

見える、見えるぞ。
ボランティアベースでの開発が行き詰まった結果[資金調達して会社を立ち上げる](https://codezine.jp/article/detail/16428)ところが見えるぞ。


さて、[Romeのnpmパッケージ](https://www.npmjs.com/package/rome)のバージョンがどうこうというところがよくわからなかったので調べてみたところ、どうやら元々のRomeは、全く別の人が開発していた全く別のパッケージだったようです。
[バージョン3.0.0](https://www.npmjs.com/package/rome/v/3.0.0)では[romeというDatePicker](https://github.com/bevacqua/rome)でした。
ところがその次で[0.0.23](https://www.npmjs.com/package/rome/v/0.0.23)と大幅にバージョンダウンされ、さらに中身も完全に入れ替わったみたいです。

円満譲渡なのか[無理矢理奪い取った](https://opensource.srad.jp/story/16/03/25/0639250/)かはわかりませんが、これDatePickerだったころのromeを使っていた人にとっては大迷惑だったのでは？

さらにその後も[10.0.0](https://www.npmjs.com/package/rome/v/10.0.0-beta)が出てきたと思ったら[0.0.0に戻った](https://www.npmjs.com/package/rome/v/0.0.0)り[0.3.0に進んだ](https://www.npmjs.com/package/rome/v/0.3.0-next)りと、極めて意味のわからないバージョニングがされています。
たしかにこれは混乱しますね。


それではBiomeはというと、[@biomejs/biome](https://www.npmjs.com/package/@biomejs/biome)という新しいnpmパッケージで公開されています。
これは[最古のバージョン](https://www.npmjs.com/package/@biomejs/biome/v/0.1.0-nightly.54e85a2)から既に現在のBiomeであり、バージョンによる問題などは起こらないでしょう。

ちなみに[biome](https://www.npmjs.com/package/biome)というパッケージが遥か昔から存在しています。
最終更新が7年前、週間ダウンロード数も1桁であり、当然ながら今回のBiomeとは一切関係のないパッケージですが、何故か2023年8月末あたりから週間ダウンロード数が3桁に跳ね上がっています。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/a106b348-71ad-d2ff-6cda-508d42c114f8.png)


明らかに`@biomejs/biome`と間違った奴ですね。
感想をちょっと聞いてみたいですね。