過去1年間にわたり、テーマおよびプラグインのビルドシステムの近代化が成功裏に完了したことから、Discourse コアにおいても同様のアップグレードを実施する準備が整いました。
コアビルドシステムの完全な刷新となりますが、この変更は完全に後方互換性を保つことを意図しています。Discourse の本番環境インストールにおいて、何らかの変更が感知されることはありません。プリコンパイルされたアセット システムは引き続き機能し、サーバー側でコアアセットをビルドする必要はありません。
技術スタック
ember-cli/webpack から、JavaScript 用の Rust ベースバンドラーである rolldown へ移行します。Rolldown は最新バージョンの Vite の中核を担っており、Ember エコシステムの方向性とも一致しています。
Discourse のすべての JavaScript は、ネイティブな ES モジュールとしてビルドされるようになりました。これにより、ランタイムパフォーマンスの向上が図られ、将来の最適化がいくつか可能になります。
ビルドパフォーマンス
開発環境では、ビルドが以前よりも約80%高速化されます。私のマシン[1] では、開発時の起動時間が約30秒から約5秒に短縮されました。ビルドの一部には Babel のような旧技術に依存している箇所も残っていますが、今後のさらなるパフォーマンス向上が見込まれます。
開発者体験
この移行に伴い、開発時に Discourse の前面にプロキシを使用することをやめることにしました。開発は現在、Rails サーバーに対して直接行う必要があります。
bin/ember-cli -u は bin/dev に置き換わりました。これにより、Rails が :3000 で起動し、背景で rolldown ビルドが実行されます。両プロセスのログ出力には適切なプレフィックスが付けられて表示されます。ブラウザで :3000 にアクセスしてください。:4200 はもはや何も提供しません。
移行を支援するため、bin/ember-cli は後方互換性のあるシムとして機能します。ヘルプ情報を表示し、:4200 で軽量サーバーを起動して :3000 への移行を促すメッセージを表示します。
Rails と JS ビルドを別々のコマンドで起動することを好む場合は、そのままで構いません。Rails の起動コマンドに変更はなく、rolldown バンドラーは bin/dev --only ember を使用してウォッチモードで実行できます。
ビルドの古さに関する警告
ディスク上の現在のビルドが rolldown 開発バンドラーによって生成されたものであり、そのバンドラープロセスが実行されていない場合、アセットが古くなっていることを警告するエラーを Rails がスローします。これは開発モードとシステムテストに適用されます。
CI で使用しているワンショットビルドコマンド(pnpm build)を使用する場合は、このエラーはスローされません。
ありがとう!
この取り組みは、Ember/Embroider チーム、および The Ember Initiative の協力によって実現しました。特に、このプロジェクトにおいて共に尽力してくれた @real_ate さんに感謝します!![]()
M3 Pro チップ搭載の MacBook Pro ↩︎