JavaScriptビルドツール徹底ガイド──歴史と進化、LINEヤフーの技術選定
本記事は、LINEヤフー株式会社のフロントエンドスペシャリスト、浜田真成さんによる寄稿です。
JavaScriptのビルドツールについて、その役割や歴史的な変遷をたどりながら、2025年現在の主要ツールの特徴と選定ポイントを解説します。LINEヤフーでのユースケースも交え、アプリケーション開発における最適なビルドツール選びの参考となる内容です。
はじめに
この記事は、Web開発におけるJavaScriptのビルドツールの役割やその特徴について解説するものです。
2025年現在までのビルドツール事情を整理し、アプリケーション開発者が「どのビルドツールを、何の目的で選択すべきか」を判断する1つの指針となれば幸いです。
1. ビルドツールの役割と歴史的変遷
1-1. ビルドツールがなぜ必要なのか
Webアプリケーション開発では、JavaScriptを用いることが主流です。
一方で、JavaScriptはWeb開発においてプリミティブな役割を担っており、開発者にとっては「近くて遠い存在」といえます。アプリケーション開発の際に、直接コードに触れる機会は少なくなっているからです。
大規模なアプリケーションでは、JavaScriptではなくTypeScriptを用いて型安全な開発を行ったり、ファイルを分割してモジュールに分けてコードを読み込ませたり、JSXによってDOMを扱ったりすることがあります。さらに、CSSや画像といったJavaScript以外の静的ファイルをWebアプリケーションに取り込んで利用するケースもあるでしょう。
これらWeb開発における一連の複雑なユースケースは、JavaScriptのビルドツールで変換をかけることで解決を図っています。ビルドツールを通し、複雑な開発のユースケースを反映させ、アセットを事前にビルドして、ブラウザで実行可能な形式へと変換します。
複雑な処理をビルドツールに肩代わりさせることで、私たちは開発体験をシンプルな状態に保てるのです。
ビルドツールが担っている主な役割は以下のとおりです。
- 依存性の解決: 機能別に分割して開発されたモジュールを、実行可能な状態にバンドルする
- 変換: 新しいECMAScript構文やTypeScriptなどを、実行可能な形式に変換する
- 最適化: 余分なコードを削減してファイルサイズを小さくし、実行内容を最適化して、パフォーマンスの向上を図る
- 開発体験の向上: 開発サーバーを立ち上げたり、即時リロードする機能を用いてデバッグを容易にしたりする

これらは現役で利用されており、開発体験を維持して機能の拡張を図るために必要不可欠な役割であることがわかります。
1-2. Module Bundler、Transpiler、Minifierの役割
2025年現在、多種多様なビルドツールが公開されており、その選択に迷う事があるかもしれません。
大別すると、ビルドツールは以下に示す役割に分類できます。各ツールが何を実行しているものか、事前に理解しておきましょう。
種類 | 代表ツール | 主な役割 |
---|---|---|
Module Bundler(モジュールバンドラー) | Webpack / Rollup / Vite など | モジュール単位に分けられた複数のファイルを解析して、必要に応じて1つまたは複数の出力(チャンク)にまとめます。 |
Transpiler(トランスパイラー)または Compiler(コンパイラー) | Babel / SWC / esbuild など | 新しい文法や型付きコードを実行可能な文法に変換します。TypeScriptやESNextのような形式を、純粋なJavaScriptに変換してブラウザやNodeなどのランタイムで実行可能にするのが役割です。 |
Minifier(ミニファイアー) | Terser / esbuild など | デッドコードを削除し、変数名を短縮するなどして、サイズを小さくすることが役割です。 |
一般的には、モジュールバンドラーを起点にトランスパイラーやミニファイアーを順に呼び出して実行し、その最終出力結果を得ます。
例えば、モジュールバンドラーにあたる、Webpack、Vite、Rollupは、プラグインによる拡張性を備えており、複数のトランスパイラーやミニファイアーを柔軟に組み合わせて設定できるように設計されています。
また、設定の複雑性を回避するとか、高速化を実現するために、複数の機能をまたいで実現しているツールもあります。例えば、esbuildやRspackは、「Bundler + Transpiler + Minifier」をひとつのバイナリで同時に行うことで、高速なビルドを実現しています。
1-3. フロントエンドの進化とビルドツールの変遷
なぜコミュニティにこれだけ多くのツールが登場したのか、その背景を時代背景とともに簡単に追ってみましょう。
ブラウザの読み込み順の制御(2010-)
主に使われたツール: RequireJS
大規模なフロントエンド開発が増えはじめた当時、課題となったのは複数に分割されたJavaScriptファイルの読み込み順を管理することでした。ブラウザの仕組みだけでは読み込み順を正確に担保するのが難しく、すべてをまとめて読み込んでから実行するケースも珍しくありませんでした。
RequireJSは、分割されたJavaScriptモジュールの依存関係を整理し、その読み込み順を自動的に解決する機能を提供しました。
タスクの実行順序の管理の必要性(2011-)
主に使われたツール: Grunt、Gulp、Browserify
次に課題となったのは、Web開発におけるアセットのビルドプロセスです。主流となっていたのはコマンドラインで、Makefileによる変換等で単純に実現していました。こうした処理は徐々に限界を迎え、複雑に組み合わされたビルド処理を順序立てて実行するために「タスクランナー」が必要不可欠な存在になります。
GruntはJavaScript製のタスクランナーで、複雑化した処理を順序立てて実行する機能を提供しました。
Gulpはこれらに加え、ストリーム処理を完結に扱うインターフェースを備え、Web開発で担うファイルの変換をより効率的に実行できる環境を整えました。
統合的なバンドル管理の必要性(2013-)
主に使われたツール: Webpack、Rollup
Webpackはこれまでの「タスクランナー」と異なり「モジュールバンドラー」としての機能を備えています。Webpackは、起点となるファイルから依存するファイルをグラフ的に解析し最終的な出力を得るアプローチをとり、その機構により様々な最適化を組み込むことを可能としました。
結果としてこのアプローチは、将来的に以下のような最適化を可能にしました。
- Hot Module Replacementで状態を保ったまま即時リロードする
- 依存関係を解析して処理を削減し、最適化したバンドルを生成する
特に、Hot Module Replacement(= 開発されたファイルのみを更新して反映させる仕組み、以下HMR)の開発体験は、巨大なアプリケーションの開発を扱う上で必要不可欠となりました。
Instagramが当時のWebアプリケーションにWebpackを採用したことや(※)、エコシステムに多種多様な機能やライブラリが備わったことで急速に広まり、WebpackはWeb開発における標準となっていきました。
数年後登場したRollupは、新たに策定されたESモジュール形式と静的解析の組み合わせで、Tree Shaking(不要な処理を削減する)というアプローチが有効であることを示し(※)、多くのライブラリに影響を与えました。
設定の複雑化の回避(Zero Config)(2017-)
主に使われたツール: Parcel、Snowpack、React Create App
Webpackの1つの問題点は、設定の複雑さです。
Webpackの設定は柔軟さと強力な機能を備える反面、設定が複雑化するケースが後を立ちませんでした。設定を経験した者にしか手が付けられない複雑さを揶揄して、"Webpack職人"というネット用語が生まれたほどです。
Webpackの設定の肥大化と、増え続けるWeb開発の学習コストへの反動として「Zero Config」を掲げるツールが幾つか登場しました。
Parcelは、Web開発で本来やりたかったユースケースをもとに、細かい設定なしで開発を可能にしたビルドツールです。
React Create Appが、Web開発における大量のボイラープレートを1コマンドで生成するツールとして登場した時でもあります。この考え方は、後続のツールにも影響を与えました。
ファイルの肥大化への対処、高速化(2020-)
主に使われたツール: Vite、esbuild、SWC
Webpackのもう1つの問題点は、巨大なアプリケーションのビルドに時間がかかることです。
この課題の解決策として、複数の処理を単一のバイナリで実行し、ビルド速度を飛躍的に高めたツールが登場しました。
esbuild(Go製)、SWC(Rust製)といったネイティブ言語で開発されたビルドツールは、Node.jsのシングルスレッド実行の限界を超えていきます。実行バイナリとして配布され、AST(抽象構文木)の生成から書き出しまでをメモリ上で並列化することで、ビルド時間を高速化するアプローチを取っているのです。
Viteは、「開発サーバ + 本番ビルド」を良いバランスで組み入れたモジュールバンドラーで、開発時のコールドスタートや精度の高いHMRによって快適な開発環境を提示しました。
その設定のシンプルさと開発体験の良さから、2025年現在は多くのアプリケーション開発で取り入れられています。
さらなる高速化の模索 (2022-)
主に使われたツール: Turbopack, Rspack, Bun
近年は、ネイティブ言語で開発されたビルドツールによる、さらなる高速化のアプローチが主流となっています。
Next.jsは、Turbopack(Rust製)のバンドラーへの切り替えを計画し、Rspack(Rust製)はWebpackの互換性を重視しながら高速化するアプローチを模索しています。
また、別のアプローチとして、Bun(Zig製)のように、実行ランタイム・バンドラー・パッケージマネージャ・テストランナーまでをも含んだ「統合環境」として、ツールチェーンを1本化する動きも出てきています。1つでポータブルに実行環境が整う観点から、単体ツールやサンプルでの利用の拡大がみられます。
現在の開発へ
このようにビルドツールは、各時代に発生してきたWeb開発の課題を、都度解決してきました。Web標準が進化した現在でも、その役割は引き続き重要です。各ツールはより高速で快適な開発体験を提供するべく、進化を続けています。
2. 最新の主要ビルドツール比較
各時代に登場したビルドツールの背景を知れば、それぞれが本来解決しようとした課題を理解でき、技術選定の一助となるでしょう。
本章では、主要なビルドツールの詳細と、選定時に参考となるポイントを解説します。
2-1. Webpack
2012年に開発されたWebpackは、長年にわたりWeb開発のスタンダードとして利用されてきたビルドツールです。
当時、複雑な処理を要していたWeb開発に、画像・CSS・JavaScriptといった多数のアセットを束ね、効率的に処理する方法を提供しました。リリースから長い年月を経て、機能は大幅に改善され、豊富なドキュメントやエコシステム、そして採用実績を有しています。
2025年現在は"安定期"に入っており、コミュニティは積極的な技術開発をすることよりも、既存のアセットを維持し安定化させることに重きをおいています。
柔軟なカスタマイズが行えることで知られ、特にファイル分割の機能は非常に高機能です。
Next.jsやGatsbyといったフレームワークは、Webpackのファイル分割の仕組みを用いてGranular Chunking(※)と呼ばれる最適化を実現しました。GranularChunkingは、ルートとコンポーネントに基づいてコードを自動的に複数のチャンクに分割する仕組みで、現在も現役で利用されています。
考慮が必要な点として、「Webpackの設定の保守性」と「ビルド速度」の2つの問題があります。
アプリケーションの規模が大きくなり多数の用途が追加されていくにつれて、その設定が複雑化してしまうケースが見られます。
また、ファイル数の増加に伴いビルド時間は長くなる傾向にあります。
ビルド速度の問題に対処したい場合、Webpackの設定と互換性のあるRspack(Rust)に移行する手段があります。
Rspackは、Rustによる並列化によってビルド速度を高速化し、HMRの改善が図られています。Webpackの代表的なプラグインが利用でき、内蔵されているか互換性を持っています。
向いているケース | 良い点 | 考慮が必要な点 |
---|---|---|
Webアプリケーションの開発。特に、豊富なプラグイン資産を活かした安定した開発に重きを置く場合。 | - 豊富なプラグインによる拡張が可能 - 柔軟なローダー設定によりカスタマイズを容易に行える | - 保守性: 用途が増えていくにつれて設定が複雑化しやすい - ビルド速度: アプリケーションの肥大化に伴って、ビルド速度が低下するケースがある。また、HMRの精度が低いことがある - ビルド速度に課題がある場合、プラグインの拡張によって別のトランスパイラーを指定するとか、Rspackによる処理の代替を模索する必要あり |
TypeScriptで記述されたReactアプリケーションを変換する例
module.exports = {
entry: "./src/index.tsx",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
clean: true,
},
resolve: {
extensions: [".tsx", ".ts", ".js"],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
{
test: /\.module\.css$/,
use: [MiniCssExtractPlugin.loader, {
loader: "css-loader",
options: { modules: true }
}],
},
{
test: /^((?!\.module).)*\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
plugins: [
new HtmlWebpackPlugin({ template: "./public/index.html" }),
new MiniCssExtractPlugin({ filename: "style.css" }),
],
devServer: {
static: "./dist",
hot: true,
open: true,
},
mode: "development",
};
2-2. Vite
2020年にEvan You氏によって開発されたViteは、開発体験にもフォーカスしたビルドツールです。
特徴的なのは、開発時と本番ビルド時で異なる動作を採用している点です。Viteは開発時に内部的にモジュールバンドルを行わず、esbuildによる高速な変換処理とNative ES Modulesの読み込みによって、非常に高速な起動と表示を実現しています。一方、ビルド時には内部的にRollupを使用しており、精度の高い最適化を行うことで、ブラウザの読み込みの遅延にも現実的に対処しています。
プラグインによる拡張性も豊富に存在し、現時点で多くのフロントエンドフレームワーク(Nuxt.js、Svelte、Astroなど)がViteを採用しています。State of JSの調査からも高い満足度と年々シェアを拡大していることがわかります。
現在は内部的にesbuild/Rollupを使用していますが、将来的にRust製のバンドラーであるRolldown、Rust製のミニファイヤーであるOxcに置き換える計画があり、Rustによるさらなる高速化が実現される見込みです。
また、Vite 6から、複数の実行環境に向けて出力先を変更可能とする「Environment API」が導入されることが発表されました(※)。フロントエンド開発では単純なJSの配信だけではなく、ページごとの処理ランタイムの切り替えや、React Server Components(RSC)のように、同じソースを複数の環境下で実行できるように出力を分ける必要が生じています。Environment APIは、このような要求に対処するため、ツールレベルで出力層とのIFを抽象化できる機構を設けています。
向いているケース | 良い点 | 考慮が必要な点 |
---|---|---|
Webアプリケーションの開発、UIライブラリの開発。 | - 豊富なプラグインによる拡張 - 現在のWeb開発に特化したシンプルな設定 - 高速な開発体験(ESMベースの精度の高いHMR、高速なビルド) | - 最適化の処理によっては、開発時と本番時で動作が異なる可能性がある点に注意する |
TypeScriptで記述されたReactアプリケーションを変換する例
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({
plugins: [react()],
css: {
modules: {
scopeBehaviour: "local",
},
},
build: {
outDir: "dist",
},
});
2-3. Rollup
2015年にRich Harris氏によって開発されたRollupは、ESM形式に最適化したモジュールバンドラーとして登場しました。
当時、多数の出力形式が混在しておりファイル肥大化の課題に直面していたコミュニティに、ESM形式を活用したTree-Shakingの概念を導入しました(※)。
Tree-Shakingとは、モジュールの依存を含むコードの静的解析から未使用のコードを削減する技術です。従来の出力結果から不要な処理を見つけ出す"デッドコード削除"だけではなし得なかった高い精度で、削減を行うことが可能になります。
Tree-Shakingを初めてJavaScriptの世界に持ち込み実装したバンドラーがRollupであり、シンプルな設定と出力フォーマットの変更の容易さから、現在はライブラリの開発で多く利用されています。
現在でもRollupのTree-Shakingの精度は非常に高く、そのブラッシュアップは継続して実施されています。関連するオプションで、非常に細かくチューニングできることからもその方針が見てとれます(※)。
Tree-Shakingの効率を上げるためには、コードに副作用があるかどうかを判別することが重要なポイントになります。
Rollup 4.x系ではASTをたどって副作用の有無を判定し、その精度を高める改良が継続的に行われているのです(※)。
向いているケース | 良い点 | 考慮が必要な点 |
---|---|---|
JavaScriptライブラリ、SDKの開発。 | - 多数の出力形式に対応しており(ESM、CJS、UMD、iifeなど)、ライブラリとしてのパッケージ品質を満たす構成を構築しやすい - Tree-Shakingの精度が高く、バンドルサイズを小さくできる | - 開発サーバ機能や、HMR機能が限定的で、Webアプリケーションの開発には手間がかかる |
TypeScriptで記述されたアプリケーションを変換する例
// rollup.config.mjs
import dts from 'rollup-plugin-dts';
import terser from '@rollup/plugin-terser';
import nodeResolve from '@rollup/plugin-node-resolve';
export default [
/** ESM/CJS形式の出力 */
{
input: 'src/index.ts',
output: [
{ file: 'dist/index.mjs', format: 'esm', sourcemap: true },
{ file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'named' }
],
external: ['react'], // peerDeps を外部化
plugins: [
nodeResolve({ extensions: ['.js', '.ts'] }),
terser()
]
},
/** 型定義の出力 */
{
input: 'src/index.ts',
output: { file: 'dist/index.d.ts', format: 'es' },
plugins: [dts()]
}
];
2-4. esbuild
Evan Wallace氏によって開発されたesbuildは、Go製のモジュールバンドラー/トランスパイラーで、並列実行と独自のTypeScriptパーサーによって圧倒的なビルド速度を誇ります。
公式ベンチマークでは、特定環境下の巨大なファイルをWebpack 5の100分の1以下でビルド完了することが示されています(※)。
ViteやAngularのビルドシステムでは、内部でesbuildが採用されており、基盤としての地位を築いています。
esbuildはビルドの高速性と設定のシンプルさから、サーバーレス関数やCLIなどにおいて、複数のファイルにわたる中規模な実行環境をビルド+ミニファイし、1つの実行ファイルとして実行させるケースに最適といえます。
一方、アプリケーション開発の機能も備えていますが、HMR機能を持っていません。この場合は、ViteやWebpackなど別のバンドラーを経由してトランスパイラーとして呼び出して使うことで、機能を補完するとよいでしょう。
また、デッドコード削除やTreeShakingの最適化は安全側に倒しており、最終的なファイルサイズは大きくなる傾向にあります。
向いているケース | 良い点 | 考慮が必要な点 |
---|---|---|
CLIの開発、Edge Functionやサーバーレス環境での開発、CI/CDでのビルド。 | - 高速にビルドを実行できる | - アプリケーション開発で利用する場合は、直接利用するのではなくWebpackやViteなどのモジュールバンドラーを通して実行することを推奨 - デッドコード削除を安全側に倒しているため、ファイルサイズは大きくなる傾向にある |
TypeScriptで記述されたファイルをEdgeランタイムで実行可能な形式に出力する例
npx esbuild src/edge.ts \
--bundle \
--platform=browser \
--format=esm \
--target=chrome113,firefox113 \
--outfile=dist/edge.js \
--conditions=worker \
--minify
2-5. 比較
上記にあげた代表的なビルドツールについて、シェア、ビルド速度、Tree-Shaking精度の各観点について、調査されている内容をみてみましょう。
シェア
State of JavaScriptの2024年のビルドツールの利用状況における調査結果(※)では、下記のような結果となっています。
State of JavaScriptの2024年のビルドツールの利用状況における調査結果
(State of JavaScript 2024の調査結果より引用)
依然としてWebpackの使用率は高く、Viteの利用割合が急速に高まっていることがわかります。また、RolldownやRspackの選択肢が、満足度の高い状態で増加してきていることが見てとれます。
ビルド速度
s1owjke氏による主要なビルドツールの速度比較(※)では、Reactを用いたライブラリのビルド速度の比較を行った結果が掲載されています。
s1owjke氏による主要なビルドツールの速度比較
(js-bundler-benchmark(MITライセンス)より引用)
結果としては、上の特徴として述べてきたように、バンドルからトランスパイルまでを単一のバイナリで実行するesbuild(Go製)とBun(Zig製)が突出して高速なことがわかります。
また、Webpack + babelのような標準構成からみれば、WebpackやRollupを通して高速なトランスパイラーを用いるパターンでも、十分な速度改善余地があることもみてとれます。
TreeShaking精度
上記の比較でビルド後のファイルサイズに関してみてみると、Rollup 4 + Terserの組み合わせが最小となっています。
一方でesbuildは、ファイルサイズは大きくなる傾向があります。最適化よりも高速化に重きを置いていることもわかります。
LINEヤフーにおける用途別のビルドツール構成
ここからは、2025年時点で弊社LINEヤフーにて「ユースケース別」に推奨しているビルドツールとその意図について記載します。あくまで参考となりますが、技術選定の1例となれば幸いです。
ページングやSSRが必要な、大規模なWebアプリケーションの開発
推奨: SSRを前提としたフレームワークの採用と、それに付随する標準ビルドツールを推奨します。
- Next.js + Turbopack または Webpack
- Remix (React Router) + Vite
商用サイトでは引き続きSSR(サーバーサイドレンダリング)を必要とするケースが少なくありません。この場合、SSRを前提としたフレームワークを用いることを推奨します。
また多くのページを持つ大規模なWebサイトを運営する場合、バンドラーを選定する時点で、ファイルの肥大化に対処する必要があることを念頭に置きましょう。
上述したフレームワークは、前述したGranularChunkingの仕組みによって、利用単位/ページ単位のチャンク分割を初期設定でも十分な精度で行ってくれます。また、フレームワークの機能によって、ページ単位でその出力方式を切り替えることができる柔軟さも得ることができます(ReactServerComponentの仕組みなどを利用すれば、コンポーネント単位でも可能です)。
LINEヤフーでは多くのWebサービスを運営していますが、社内の調査ではVite及びWebpackの利用率が高くなっています。(※)
新規で大規模なWebサービスを立ち上げる場合にも、上記フレームワークをベースとしたビルド構成をまず検討することになるでしょう。
■ 参考
Yahoo! JAPAN トップページ(モバイル版)
- https://m.yahoo.co.jp/
- Next.js + Webpack で構成
一休.com レストラン予約
- https://restaurant.ikyu.com/
- Remix + Vite で構成
SPA(シングルページアプリケーション)の開発
推奨: Viteによるクライアントサイドアプリケーションを推奨します。
クライアントで処理が完結する複雑な操作を伴うSPA(シングルページアプリケーション)は、Viteを用いて構築することを推奨しています。
Viteは近年のWeb開発のニーズに基づいて開発体験が設計されており、一般的な構成であれば、開発環境の立ち上げまでを複雑な設定なしに行うことができるでしょう。
コードが巨大になった場合にも非同期読み込みの仕組みを使ってコンポーネント単位で容易に分離する仕組みに対応していることや、プラグインシステムが充実していることからも、通常の開発で困ることは少ないでしょう。
また、ビルドツールとして「Rustを用いた高速化」や「Environment API」など、次の潮流にも積極的に対応する予定があることも将来性の観点で推奨できるポイントです。
JavaScriptライブラリの開発
推奨: Rollupによるパッケージングを推奨します。
JavaScriptのライブラリ開発では、開発者の環境に合わせて複数の形式で出力したり(※2025年現在では依然としてESMとCJS形式は併用することが現実的)、近年の主流となっているTypeScript開発に答えて型ファイル(`.d.ts`)を提供する必要があるでしょう。
また、アプリケーションを裏側から支えるライブラリでは、実行速度やバンドルサイズも重要な考慮ポイントです。ビルドの時間をかけてでも、利用者の実行環境を最適化を行うことも選択肢に入ります。
これらの考慮点を踏まえると、多数のユーザーの利用を想定する一般的なライブラリでは、Rollup + Terserを用いてパッケージを提供することが推奨されます。
開発時にWebサーバーを起動する必要があるクライアント向けのUIライブラリなど、Viteが得意とする領域の開発では、これらをViteを経由して実行しても問題ないでしょう。
Node.jsランタイムとするサーバーサイドアプリケーションの開発
推奨: esbuildまたは、tsxによる開発+tscによるビルドを推奨します。(単純なスクリプトの場合は、NodeのStrip Typesを用いた直接実行も可)
TypeScriptで開発したバックエンドアプリケーションを、Node.jsの実行環境で実行するケースを考えます。
このようなケースでは、アプリケーションの起動速度、ビルド時間、実行速度、そして開発体験を保つ構成を考える必要があります。
一定規模のアプリケーションを構築している場合は、起動速度を最小化するために、ある程度のデッドコード削除が必要になるでしょう。一方、小規模な場合は、サーバーサイド上のコードの最適化はある程度得られれば十分で、残りは処理自体がボトルネックになるケースがほとんどです。
ビルド時間も重要な観点です。頻繁な更新と確認が必要になるため、watchモードや、インクリメンタルビルドに依る開発環境を整えることが必要です。
これらを踏まえると、一定規模の開発ではesbuild、小規模であればtsxとtscによる単純な変換で十分に成立するでしょう。これらは、求めるパフォーマンスによって選定を行ってください。
Node.jsは、v23からStrip Types(※)の機能が追加され、事前のコンパイル手順を実行せず、Node.jsが直接TypeScriptを実行できるようになりました。v22.6で実験的に--experimental-strip-types
オプションが導入され、v23.6ではデフォルトで有効化されています。型チェックやエコシステム統合を別途検討すれば、小さく単純なスクリプトの場合には十分に利用を検討する余地があるでしょう。
おわりに
これまで、JavaScriptのビルドツールについて、その目的から歴史をたどり、さまざまなツールを追ってきました。
技術選定に重要なのは、それぞれのツールの特徴を理解し、実現したいユースケースに即したツールを適切に選択することです。
ビルドパフォーマンス、最適化された出力結果、開発体験...どのような観点を重視して技術選定をするかどうかは、あなたの手腕が問われる部分でしょう。
この記事の内容を把握しておけば、2025年現在のビルドツールの特徴や注目されている動向を理解し、大きな方向性を決定できるはずです。
本記事が、あなたのアプリケーション基盤構築の技術選定の一助になれば幸いです。
著者プロフィール
浜田真成
https://x.com/narirow
https://github.com/narirou
LINEヤフー株式会社 アプリケーションエンジニア
映像領域の技術リードを経て、Yahoo! JAPANのトップページの開発を担当。全社横断として、Webパフォーマンスチームをリード。LINEヤフーの数多くのサービスパフォーマンスを改善しています。元第11/12代Webフロントエンド領域の黒帯。
編集:中薗昴