🚀

Next.jsでビルドにswcを使う(2021/8/18版)

2021/08/14に公開

Next.jsの11.1系統からswc導入のアナウンス

Next.jsの11.1系統からビルドにswcを導入するというアナウンスがありました
このswcはネイティブアプリケーションなので、JavaScript製のビルドツールより高速に動作します

ところが開発途上のものだけあって、実際にどうやって使うのかはアナウンス上に何も書かれていません
ネット界隈でもアナウンスをそのまま垂れ流すだけで、実際に試してみる人がさっぱり見つかりませんでした

ということで、実際に使ってみたいと思います

swc関連の進行状況

Next.jsのインストール

yarn add next@11.1.1-canary.7
  • next@11.1.0
    swcのバイナリが入っていないため動きません
  • next@11.1.1-canary.6
    swcLoaderが動作するようになりましたが、swcMinifyがコケます
  • next@11.1.1-canary.7
    buildでは問題なく動作するものの、swcLoader使用時にdevでエラーを起こします
  • next@11.1.1-canary.8
    devが正常に戻ったものの、再びbuildでswcMinifyがコケるようになりました
  • next@11.1.1-canary.9
    buildでswcMinifyがコケます
  • next@11.1.1-canary.10
    buildでswcMinifyがコケます

Next.jsの設定

  • next.config.js
/**
 * @type { import("next").NextConfig}
 */
const config = {
  experimental: {
    swcLoader: true,
    swcMinify: true,
    cpus: 4,
  },
};
module.exports = config;

@typeを入れておくと、開発環境上で設定項目の確認が出来るので便利です

ビルド

yarn next build

所感

手持ちのコードをビルド(next@11.1.1-canary.7)してみた結果(キャッシュの効果を消すため毎回.nextを削除)

設定 ビルド時間
無指定 10.44s
swcLoader 8.34s
swcMinify 9.38s
swcLoader + swcMinify 7.11s
swcLoader + swcMinify + cpus 6.54s

ビルド全体の管理は変わらずWebpackが行っており、今回置き換わるのはswcLoaderでBabel、swcMinifyでTerserの部分になります

この置き換えだけで30%の速度向上しており、cpusで並列実行を指定すると40%近くビルド時間が短縮されます。cpusは今回のリリースとは関係ないと言えばないのですが、設定することでより効果が大きくなります。

まだ開発途上のこの機能ですが、今後、さらに高速化していくことが期待されます。どこまで早くなるのか楽しみです。

GitHubで編集を提案

Discussion