LovableがViteをRustで再構築……?(っぽいことをしてみた)
BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00また新たなRust書き換えプロジェクトが登場しました。今回はVite開発
00:00:03サーバーがLovableチームによってRustで再構築され、メモリ使用量が
00:00:074分の1になり、コールドスタートが2倍高速化したと謳われています。少し誤解を招く
00:00:12表現かもしれないので、その主張を検証しつつ、将来移行すべきものなのか、
00:00:15そしてViteの作者がオープンソースの未来についてどう考えているかを見ていきましょう。
00:00:24今回取り上げるプロジェクトは「OJ(Orange Juice)」と呼ばれ、
00:00:29既存のViteプロジェクトに向けて実行するだけで動く1つのRustバイナリです。Viteの
00:00:33設定を読み込み、既存のViteプラグインも動作しますが、その水面下にある開発サーバー、つまり
00:00:38ファイルウォッチャー、モジュールグラフ、HMR、React Fast RefreshがすべてRustで書き直されています。
00:00:44面白いことに、これはVite自体も採用し、voidzeroがメンテナンスしている
00:00:49RolldownとOxcを使って作られています。自分でも試すためにTanStackアプリを作成し、
00:00:53Vite devとOJ devで動かした際に違いがあるか検証しました。一見するとほぼ同じように動作し、
00:00:58SSR、ハイドレーション、サーバー関数、Fast Refresh、
00:01:03動的ファイルルーティング、サーバー形式ルート、Tailwind、アセットのインポートなど全て動きますが、
00:01:07詳しく調べていくと、いくつかの些細な違いに気づきました。1つ目はFast Refreshです。ファイルを編集すると、
00:01:13Viteではカウンターの状態が保持されますが、OJではカウントが0にリセットされ、
00:01:17変更されたコンポーネントだけでなく全体のリロードが行われていることがわかります。そこで、
00:01:22TanStack Startではない普通のReactアプリでも同じ動作を試してみたところ、
00:01:26興味深いことに、こちらでは問題なく動作しました。同じ編集をしてもカウントは保持され、
00:01:30ページ全体の更新は行われないため、真のホットアップデートが機能しているようです。なぜ
00:01:35TanStack Startと普通のReactアプリでこのような違いがあるのかは分かりませんが、まだ考慮されていない
00:01:39エッジケースの1つかもしれません。2つ目の違いは
00:01:42サーバー関数に関するものです。このサーバー関数はアプリ内部から開発サーバー全体のプロセスツリーのメモリを計測します。
00:01:46このアプリにおいてViteでは2つのプロセスで約380MBであり、OJでは
00:01:53同じく2つのプロセスで約320MBでした。したがって、このような規模の小さなアプリでは
00:01:59メモリ使用量はほぼ同じで、OJがわずかに勝っている程度です。では、このプロジェクトは
00:02:04完全に無意味なのでしょうか?いいえ、OJは元々そのような用途のために作られたわけではないからです。OJが最も力を発揮するのは
00:02:09非常に大規模なアプリです。5,000個のコンポーネントを持つReactアプリでテストを行った際、各開発サーバーを起動し、
00:02:14実際のChromeブラウザでページを開き、最も深い階層のコンポーネントがDOMに現れた時点でタイマーを止め、
00:02:19プロセスツリー全体のメモリを計測するスクリプトを使用しました。結果として、OJの通常モードは
00:02:24デフォルトのViteよりも描画完了まで約1.7倍高速で、メモリ使用量は
00:02:29約4分の1でした。もっともViteの擁護をしておくと、Vite 8.1では「bundled dev mode」という実験的機能が導入されており、
00:02:34それを有効にするとViteは1.18秒で完了し、実はOJの通常モードよりも
00:02:40少し速くなりますが、メモリの削減にはなりません。また、OJにもバンドルモードが存在し、それを使用すると
00:02:45約0.89秒とさらに高速化され、メモリもViteの約4分の1に抑えられます。
00:02:51このようにOJには確かにメモリ面での利点があり、それこそがLovableが
00:02:55このプロジェクトを開発した最大の理由です。Lovableのプレビューは実際のVite開発サーバーを動作させており、
00:03:00彼らによれば1日に約100万個のサンドボックスを稼働させているため、そのようなスケールでは
00:03:04リソース消費が非常に重要になってきます。そのため、Lovableはアプリを動作させているエコシステムを損なうことなく、
00:03:09即座に起動し軽量であり続けるプレビューを実現するためにOJを構築しました。
00:03:13また、彼らはそのユースケース、つまりAIエージェント向けに実に素晴らしい設計上の決断を下しています。編集時、
00:03:17人間は通常1ファイルずつ保存しますが、エージェントは一度に10ファイルほどを短時間で書き出します。
00:03:22Viteであればこれらの保存を個別の更新として処理してしまいますが、OJではウォッチャー、
00:03:26モジュールグラフ、コンパイラ、ホットアップデートが単一のパイプラインになっているため、連続した変更が1つの更新に統合されます。
00:03:32さらに、エージェント自身がflushエンドポイントにポストするまで更新を保留するゲート機能を有効化することもでき、
00:03:35完了した変更のみをプレビューに適用することが可能です。ご覧のように、これは
00:03:40Lovable独自のユースケースを解決するための非常に特化したプロジェクトであり、Viteの作者であるEvan You氏も
00:03:45その点を認めています。ツイートでの彼の最初の指摘は、Lovable自身の問題を見事に解決する
00:03:49非常に印象的なプロジェクトではあるものの、Vite全体の書き換えではないという点です。書き換えられたのは開発サーバーのみであり、
00:03:54またvoid0がメンテナンスするRolldownとOxcの上に構築されているため、それらを置き換えるものではありません。
00:04:00OJのパーサー、トランスフォーマー、プロダクション用バンドラーはすべてvoid0のものであり、
00:04:04Lovableはその周りにサーバーを書いたに過ぎません。本質的には、ViteがRustを駆動するNode
00:04:08プロセスであるのに対し、OJはRustプロセスがRustを駆動しており、ViteのプラグインAPIと対話できるように
00:04:13中間にJavaScriptのレイヤーがあるというイメージです。Evan氏はさらに続けて、
00:04:17OJが高速なのは単一の形式のアプリしかサポートしていないからだと指摘しています。OJは実際には
00:04:22Reactアプリ(Lovableが生成するもの)でしか動作しません。一方Viteは、
00:04:27あらゆるフレームワーク、あらゆる特殊な設定、その周りに作られたあらゆるツールをサポートする必要があり、esbuildや
00:04:31Reactプラグインのようなものは、必要に応じて各自で追加できるよう意図的に別パッケージに分けています。
00:04:36その後、彼はベンチマークの欠陥についても触れています。ブログ内のViteのコールドスタートには
00:04:40バックグラウンドワーカーでTypeScriptを実行するvite-plugin-checkerが含まれていますが、OJは実際には
00:04:45そのプラグインをサポートしていないため、その処理を完全にスキップしています。また、bundled dev
00:04:50modeを使用したViteの速度はOJのコールドスタートに近く、私たちが検証した数値とも一致していると指摘しています。しかし
00:04:55OJのメモリ使用量が著しく少ないことは認めており、Viteもその改善を目指すべきだろうと述べています。
00:04:59このツイートの中で私が最も興味深いと感じたのは、Evan氏の最後の主張です。オープンソースの力学は
00:05:03変化しており、AIによって再実装のコストが激減したため、今後は彼が言う
00:05:08オープンソースツールの「特定の用途に特化した派生版(tailored projections)」が増えるだろうということです。つまり同じ依存関係であっても、
00:05:13単一コンポーネントの制約とユースケースに合わせて再構築されるのです。彼はもう一つの例としてTanStackのRedactを挙げています。
00:05:19起こり得る未来として、メンテナーが大量のスロットPR(細かなPR)に追われる代わりに、誰もが
00:05:23自身に特化したフォークをメンテナンスするようになるかもしれません。正直なところ、それが良いことなのかは分からないものの、
00:05:28数年以内には高い確率でそうなっていくだろうと彼は考えています。一側面では、細かなフォークの存在は
00:05:33大量のPRを捌くよりメンテナーにとって都合が良いですが、エコシステムの断片化というリスクも孕んでいます。
00:05:39これがどう展開し、オープンソースの未来がどうなるかは、時が経ってみなければわかりません。
00:05:43総じて、サンドボックス内で何百万ものVite開発サーバーを動かすという全く同じ課題に
00:05:47直面していない限り、Lovable以外の人が使うようなツールではありません。
00:05:52自分のノートPCでViteが遅い、あるいはメモリを食い過ぎていると感じたことはありますか?私自身は
00:05:57ありませんが、これが実に興味深いプロジェクトであり、彼らがこれを成し遂げたのは素晴らしいことです。
00:06:01これについてどう思うか、ぜひコメント欄で教えてください。チャンネル登録もよろしくお願いします。それでは
00:06:04また次回お会いしましょう。
00:06:09また次回お会いしましょう。
Community Posts
No posts yet. Be the first to write about this video!
Write about this video