ユーザーインターフェース構築のためのMetaのオープンソースライブラリであるReactは、React CompilerのRust移植版をメインリポジトリへ統合した。この取り組みは、ビルド時間の短縮と、RustベースのJavaScriptツールチェーンとの連携強化を目的としている。
React Compiler(旧称: React Forget)は、コンポーネントやReact Hooksを自動的にメモ化する仕組みだ。そのため、開発者がuseMemo や useCallbackを手動で記述する必要がなくなる。今回のプルリクエストでは、このReact Compilerの実装がTypeScriptからRustへ移行された。ただし、ReactチームはこのRust版について、まだ実験段階にある開発中の移植版であると位置付けている。
注目すべき数値はパフォーマンスに関するものだ。ドロップイン型のBabelプラグインとして、Rust版はTypeScript版と比べて約3倍高速に動作する。また、変換ロジック単体を評価した場合には、一部のケースで最大10倍の性能向上を達成している。ただし、実運用ではシリアライズ処理のオーバーヘッドが加わるため、実際の改善幅はこれより小さくなる。『Rust Bytesニュースレター』によると、1,725件のテストフィクスチャすべてに合格しており、中間状態もTypeScript版とほぼバイト単位で一致しているという。これは、arenaアロケーションやインデックスベースのデータ構造を用いて内部実装を再構築したことで実現した。
もっとも大きな効果が現れるのは、コンパイラがプラグインとしてではなく直接組み込まれた場合だ。これまでReact Compilerは Babelの変換処理として実行されていたため、バンドラーはビルドのたびにそのオーバーヘッドを負担していた。しかし、VercelのRust製バンドラーであるTurbopackにRust版を直接組み込むことで、そのオーバーヘッドが解消される。VercelのエンジニアであるAndrew Imm氏は、この変更を同社の大規模なNext.jsアプリであるv0で検証した結果、コンパイル速度が40%以上向上したと報告している。また、従来のSWCプラグイン経由の実装では、WebAssemblyのコールドスタートによる長い初期化時間が課題だったと説明している。一方、Next.jsの公式アカウントによると、テストアプリ全体でルートコンパイル速度が20〜50%向上しており、この機能の実験的サポートはNext.js 16.3で提供される。
この移植作業では、機械的な変換作業に大規模言語モデル(LLM)が積極的に活用され、人間はアーキテクチャ設計とコードレビューを担当した。この点が大きな注目を集めている。 Hacker Newsでは、ある読者がコンパイル言語への移行を歓迎する一方で、「その認知的負債を返済することは、長期的に保守を担うチームにとって非常に厳しいものになるだろう」と警告した。また別の読者は、同様のアプローチを採用しているBunと比較しつつ、この種のプロジェクトでLLMを活用することが長期的にどのような影響を及ぼすのかについて疑問を呈した。
Bunに続き、LLMを大規模に活用してRustへ移植された著名なプロジェクトがまた一つ登場しました。こうした書き換えが今後どのような結果につながるのか、非常に興味深いところです。
LLMによって生成された基盤は、その上に機能を追加したり改良を重ねたりするのに十分な堅牢性を備えているのでしょうか。それとも、実装を理解している人がいなくなり、結果としてプロジェクトの保守が困難になってしまうのでしょうか。
同じ議論に参加していた別のユーザーは、「Rustで書かれているからといって、それが良いRustコードであるとは限らない」と警告した。そのユーザーによれば、モデルは借用チェッカー(borrow checker)を満たすために RefCell を利用し、その結果、本来であればコンパイル時に検出される問題を実行時へ先送りしてしまう可能性があるという。
既存ユーザーへの影響はほとんどない。公開APIは従来と同様にBabelライクなままであるため、アップグレードは設定を変更することなく、そのまま置き換えるだけで完了することを想定している。
React Compilerを初めて導入するチームは、Reactの導入や段階的導入ガイドを参照するとよい。これらのガイドでは、React Compilerの要件に準拠していないコードを対象外として除外できるため、コードベース全体を一度に修正する必要はないと説明している。
この書き換えは、Rustがフロントエンド開発ツールの領域で存在感をさらに高めている流れにも合致している。SWCは公式Rustコンパイラへ移行しており、OxcはReact Compilerをリリース可能なRustクレートとして取り込み管理している。また、Rspack 2.1ではネイティブサポートが提供されている。ただし、すべての統合が順調に進んでいるわけではない。RolldownのメンテナーであるBoshen氏は、RolldownおよびVite向けのRust版React Compiler統合をいったん取り下げたと述べている。その理由は、まずコードの品質改善に取り組むためである。初期段階の結果では最大2倍の性能向上が確認されていたものの、チームは統合を正式に進める前に実装を見直す判断を下した。
Rust版への移植はReactモノレポ内で管理されており、React Compilerワーキンググループを通じて追跡できる。