😺

wp-envでのビルドツールをRspackへの移行してみる

2024/10/18に公開

プロジェクトをRspack化する方法

この記事では、wp-env 環境下でのビルドツールを Rspack に移行する手順について、備忘録としてまとめています。

Rspackは、ビルド時間を短縮し、開発者により効率的な体験を提供する 最新のJavaScriptバンドラー です。
この記事では、Rspackのセットアップや使い方、Webpackからの移行方法について詳しく解説します。
また、Rspackをさらに活用するために、JavaScriptランタイム Bun を使って高速なパッケージ管理やビルドを行うので、事前にBunのインストールもお忘れなく!

なぜRspackなのか?

Rspackは、従来のバンドラーである Webpack の高速な代替手段として設計されています。
特に以下の点で優れています:

  • 高速なビルド時間:最適化されたアーキテクチャにより、ビルドが非常に速い。
  • 最新の機能:CSSやTypeScriptの組み込みサポートなど、モダンな開発をサポート。
  • 使いやすさ:Webpackに似た設定スタイルなので、移行もスムーズ。

パッケージのインストール

まず、プロジェクトで必要なパッケージをインストールしましょう。Bun を利用して、高速にインストールできます。

bun add -D typescript sass sass-loader sass-embedded @rspack/cli @rspack/core @types/node autoprefixer css-loader postcss postcss-loader tailwindcss

TailwindCSSやPostCSSを使用しない場合は、適宜パッケージリストから削除してください。

Rspackのセットアップ

次に、Rspackの設定ファイルである rspack.config.ts を作成します。
このファイルは、Webpackと同様にエントリポイントや出力先、プラグインの設定を記述するもので、Rspack用に最適化されています。

以下が基本的な設定例です。

import path from "node:path";
import type { Configuration } from "@rspack/cli";
import { CopyRspackPlugin, CssExtractRspackPlugin } from "@rspack/core";

const mode =
	process.env.NODE_ENV === "production" ? "production" : "development";

const config: Configuration = {
	mode: mode,
	devtool: mode === "development" ? "source-map" : false,
	experiments: {
		css: true,
	},
	entry: {
		main: ["./src/ts/index.ts"],
	},
	output: {
		path: path.join(__dirname, "./wordpress/themes/dist/assets/"),
		filename: "js/index.js",
		clean: true,
	},
	watch: mode === "development",
	watchOptions: {
		aggregateTimeout: 300,
		poll: true,
	},
	module: {
		rules: [
			{
				test: /\.ts$/,
				exclude: [/node_modules/],
				loader: "builtin:swc-loader",
				options: {
					jsc: {
						parser: {
							syntax: "typescript",
						},
					},
				},
				type: "javascript/auto",
			},
			{
				test: /\.(css|scss)$/,
				use: [
					CssExtractRspackPlugin.loader,
					"css-loader",
					{
						loader: "sass-loader",
						options: {
							api: "modern-compiler",
							implementation: require.resolve("sass-embedded"),
						},
					},
					{
						loader: "postcss-loader",
						options: {
							postcssOptions: {
								plugins: {
									tailwindcss: {},
									autoprefixer: {},
								},
							},
						},
					},
				],
				type: "javascript/auto",
			},
		],
	},
	plugins: [
		new CopyRspackPlugin({
			patterns: [
				{
					from: path.resolve(__dirname, "src/img"),
					to: path.resolve(__dirname, "wordpress/themes/dist/assets/img"),
				},
			],
		}),
		new CssExtractRspackPlugin({
			filename: "css/index.css",
		}),
	],
};

export default config;

この設定では、TypeScriptやSass、TailwindCSSのサポートを含んでいます。

必要に応じて、自分のプロジェクトに合わせたカスタマイズを行いましょう。

プロジェクトの実行

Rspackの設定が完了したら、次にプロジェクトのビルドスクリプトを追加します。
package.json に以下のスクリプトを追加しましょう。

"build": "rspack --config rspack.config.ts --mode production",
"watch": "rspack --watch --config rspack.config.ts --mode development",

build コマンドで本番用のバンドルを作成し、watch コマンドで開発モードでのリアルタイムビルドを行います。

まとめ

Rspackを使うことで、従来のWebpackに比べてビルド時間が大幅に短縮され、開発効率が向上します。Webpackからの移行も比較的スムーズに行えるため、試してみる価値があります。

もし改善点やおすすめの設定があれば、ぜひ教えてください!

公式ドキュメントも参考にしつつ、今後もRspackを活用していきましょう。

https://rspack.dev/

Discussion