さようならRome、こんにちはBiome:オールインワンフロントエンドツールチェーンの新たな選択肢

5 分

1. フロントエンド開発の「ツール疲れ」

モダンなフロントエンド開発では、プロジェクトを円滑に動かすために、通常は複雑なツールの組み合わせが必要です。

  • Linter:ESLintはJavaScript/TypeScriptコードの品質を検査します。
  • Formatter:Prettierはコードスタイルを統一します。
  • Compiler:BabelまたはTypeScript(tsc)はコードを変換します。
  • Bundler:Webpack、Rollup、Viteはコードをバンドルします。

これらのツールの設定、プラグイン、バージョン、相互作用を管理すること自体が大きな仕事です。これがいわゆる「ツール疲れ」です。コミュニティは長年にわたり、1つのツールですべての問題を解決する「オールインワンツールチェーン」の可能性を模索してきました。

2. Romeの構想とBiomeの誕生

Romeは、Facebookの元従業員でBabelの作者でもあるSebastian McKenzieが始めた野心的なプロジェクトで、フロントエンドツールチェーン全体をTypeScriptで書き直すことを目指していました。その構想は、設定不要で高性能な統合ツールを提供することでした。しかし、長年の開発と商業化の試みを経た後、Rome Labsは2023年に事業停止を発表しました。

幸い、Romeのコアコードはオープンソースでした。コミュニティはすぐに動き、Biomeという名前のフォークを作成し、専用のコミュニティ組織が保守することで、Romeの当初の構想を継承し実現しようとしています。

3. Biomeとは?

BiomeはRustで書き直された高性能なフロントエンドツールチェーンです。ESLintやPrettierなど一連の独立したツールに代わる、統合された非常に高速な開発体験を提供することを目指しています。

2023年末の時点で、Biomeの中核機能は主にLinterFormatterに集中しており、どちらでも驚くべき実力を示していました。

主な利点:

  • 圧倒的な性能:Rustのおかげで、BiomeはJavaScriptで書かれたESLintやPrettierよりはるかに高速に動作します。大規模なコードベースでは、性能向上が1桁違うこともあります。
  • 統一された設定:1つのbiome.jsonファイルだけで、すべてのツールの動作を管理でき、各所に散らばった.eslintrc.prettierrc.editorconfigから解放されます。
  • 詳細な診断情報:BiomeのLinterはエラーを指摘するだけでなく、非常に詳しいコンテキストと修正提案を提供し、開発者が問題の根本原因を理解できるようにします。
  • Prettierとの互換性:BiomeのフォーマッターはPrettierのルールの95%以上との互換性を目指しており、Prettierからの移行コストを非常に低く抑えます。

4. クイックスタート

npxを使って、プロジェクト内ですぐにBiomeを試せます。

# 检查当前项目中的代码问题
npx @biomejs/biome check ./src

# 自动修复可修复的 lint 问题
npx @biomejs/biome check --apply ./src

# 格式化代码
npx @biomejs/biome format --write ./src

biome.jsonファイルを作成すると、ルールと設定をカスタマイズできます。

{
  "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json",
  "organizeImports": {
    "enabled": true
  },
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true
    }
  }
}

5. 今後の展望

Biomeのロードマップは非常に明確です。LinterとFormatterを安定させた上で、Compiler、Bundler、Test Runnerなどの機能を段階的に実装し、最終的に名実ともに「オールインワン」のツールチェーンになることを目指しています。

Biomeはまだ若いものの、優れた性能、コミュニティ主導のオープンなモデル、開発者体験への注力によって、フロントエンドツール分野で無視できない新勢力となっています。ツールスタックを簡素化し、開発効率を高めたいチームにとって、Biomeは非常に魅力的な将来の選択肢です。