Rspack 0.1 リリースのお知らせ

2023年3月6日

本日、Rspack が正式にリリースされたことを発表できることを大変嬉しく思います! Rspack は、ByteDance Web Infra チームによって開発された Rust ベースの JavaScript バンドラーであり、高性能、webpack との相互運用性、柔軟な設定などの機能を備えています。Rspack は、私たちのシナリオにおける多くの問題を解決し、JavaScript エンジニアの開発者エクスペリエンスを向上させました。このエキサイティングなプロジェクトに、より多くの人々が参加できるように、このプロジェクトをオープンソース化することにしました。プルリクエストや issue の作成を歓迎します。

Rspack を選ぶ理由

ByteDance 内には、多くの巨大な JavaScript アプリケーションが存在します。これらは、非常に複雑なビルド構成/スクリプトを持っており、10 分から 30 分かかる場合があります。ビルドパフォーマンスを向上させるために多くの方法を試してきましたが、既存のすべてのソリューションは、いくつかの問題を解決する一方で、他の問題につながります。多くの作業を経て、私たちはバンドラーに対する要件を理解しました。

  • 開発時の起動パフォーマンス。 npm run dev は、開発者が何度も実行する可能性のある日常的なスクリプトです。これらのコストを 10 分から 1 分に削減することは、まさに命を救うものです。
  • ビルドパフォーマンス。 npm run build は CI/CD 環境で一般的であり、起動の効率を決定します。ByteDance の多くの巨大なアプリケーションは、20 〜 30 分でビルドされます。これを 3 〜 5 分に短縮できれば、開発者の生産性は本当に向上するでしょう。
  • 柔軟な設定。巨大なプロジェクトは常に複雑な構成を持ち、標準化することはできません。当時、ビルドパフォーマンスを向上させるために、一部のプロジェクトを他のビルドツールに移行しましたが、最も困難な部分は設定の変更でした。
  • 本番環境の最適化。私たちはコミュニティでさまざまなソリューションを試しましたが、webpack はチャンク分割、ツリーシェイキングなどの本番環境の最適化で最良の結果をもたらしました。より優れたチャンク戦略は、Web アプリのメトリクスのパフォーマンスを向上させるのに役立ちます。

結論として、私たちは独自のバンドラーである Rspack を構築することにしました。

Rspack は現在どうなっているか?

Rspack プロジェクトは約 11 か月前に開始されました。まだ初期段階ですが、アプリケーションのビルドスクリプトを 5 〜 10 倍向上させることができます。すべての最適化が完了すれば、メトリクスはさらに良くなるでしょう。

Rspack は webpack ローダーのアーキテクチャを完成させました。つまり、コミュニティのあらゆる種類のローダー (babel-loader, less-loader, svgr など) を使用できます。私たちは Rspack でローダーのすべての機能をサポートする予定です。その時までに、vue-loader など、現時点ではサポートされていないローダーを使用できます。

Rspack は現在、メモリキャッシュのみをサポートしています。永続的なポータブルキャッシュは将来追加される予定です。2 つのデバイスまたは環境間でキャッシュを共有可能にするビルドシステムに取り組んでいます。Rspack はそれを達成するのに役立ちます。

Rspack は現在、ByteDance 内のすべてのフレームワークで利用可能であり、コミュニティのすべての仲間と協力しようとしています。webpack と同様に、Rspack は JavaScript エコシステムのためのインフラストラクチャです。つまり、フレームワークと Rspack は互いに有益な関係を築くことができます。

謝辞

Rspack は、コミュニティのさまざまなプロジェクトのインスピレーションとサポートなしには、今日出荷することはできませんでした。これらの先駆者に敬意を表したいと思います。

  • webpack チームとコミュニティは、多くのインスピレーションを得た素晴らしいバンドラーとエコシステムを作成してくれました。
  • @sokra は、webpack プロジェクトで素晴らしい仕事をしてくれました。
  • @ScriptedAlchemy は、Module Federation を作成し、Rspack がコミュニティとつながるのを支援してくれました。
  • SWC プロジェクトは、@kdy1 によって作成され、Rspack のコード解析、変換、および最小化を強化します。
  • esbuild プロジェクトは、@evanw によって作成され、Rspack の並行アーキテクチャに影響を与えました。
  • NAPI-RS プロジェクトは、@Brooooooklyn によって作成され、Rspack のノードバインディング実装を強化します。
  • Parcel プロジェクトは、@devongovett によって作成され、Rust バンドラーのパイオニアであり、Rspack のインクリメンタルリビルド設計に影響を与えました。
  • Vite プロジェクトは、Evan You によって作成され、webpack のエコシステムの Rspack の互換性設計に影響を与えました。
  • Rolldown プロジェクトは、Rolldown チーム によって作成され、Rollup 互換の API を使用して Rust で高性能なバンドラーを作成する可能性を探求しています。それは、Rspack の設計原則に影響を与えます。
  • html-webpack-plugin プロジェクトは、@jantimon によって作成され、@rspack/html-plugin は、Rspack でサポートされていない一部の webpack API の使用を避けるために、html-webpack-plugin のフォークです。
  • Turbopack プロジェクトは、Rspack の ast パスロジックに影響を与えました。

今後の計画

基本機能の改善

Rspack の構築を続けることが私たちの最優先事項です。 webpack と比較して、Rspack はまだ生まれたばかりで、複雑な機能が不足しています。機能リクエストに関するフィードバックをお送りください。私たちはそれらを段階的に完了していきます。

コミュニティパートナーとの協力

フレームワークでの Rspack の統合について、いくつかの支援を提供したいと考えています。もしあなたがフレームワークを維持しているエンジニアで、Rspack を試してみることに興味がある場合は、ご連絡ください。また、webpack チームとのパートナーシップも確立しました。Rspack は Rust を使用して webpack のパフォーマンスを最適化する試みであり、将来的には、webpack チームと協力して webpack を最適化するためのさらなる可能性を模索していきます。Rspack が一定の成熟度に達したら、webpack は実験フラグを使用して Rspack を webpack に統合することを試みます。

プラグイン機能の改善

Rspack は、ほとんどのローダー API をサポートしていますが、プラグイン API はごくわずかしかサポートしていません。それらすべてをサポートしていない理由は 2 つあります。1 つは、一部の API がパフォーマンスに悪影響を与えるため、開発者向けに調査しなかったことです。そしてもう 1 つの理由は、単純に時間が不足しているためです。マージリクエストを作成してご協力ください。

高性能なプラグインシステムの議論が進められています。いつか出荷されるかもしれません。うまくいけば、開発者が柔軟な設定にアクセスしながら、ビルド時間を短縮できるようになるでしょう。

継続的なパフォーマンスの向上

現在、Rspack はパフォーマンスを最大の売りとするプロジェクトであるため、今後もこの機能を維持するために、パフォーマンス観察ラボの改善やパフォーマンスの予防策の徹底、より多くのシナリオで同時実行/マルチコア対応のアルゴリズムを使用、プラットフォーム間で共有可能なキャッシングシステムの開発、メモリ使用量と消費の最適化など、多くのことに取り組んでいきます。

品質保証システムの構築

Webpack はすでに非常に豊富なテストケースを蓄積しており、今後 Rspack は Webpack の既存のテストケースを再利用してコードカバレッジを向上させます。より良い CI システムを構築し、コミュニティプロジェクトとのエコシステム CI システムを構築して、プロジェクトのアップグレードがアップストリームプロジェクトに影響を与えないようにし、長期的なプロジェクトの健全性を確保し、テストカバレッジの長期的な増加を保証します。

試用