フロントエンド - ビルド・ツール

Babel ばべる

トランスパイラJavaScriptES2015ポリフィルwebpackNode.js
Babelについて教えて

簡単に言うとこんな感じ!

Babelは「新しい書き方のJavaScriptを、古いブラウザでも動く形に自動変換してくれる翻訳機」だよ! 開発者は最新の便利な書き方でコードを書いて、Babelに翻訳させることで古いブラウザにも対応できるってこと!


Babelとは

Babel(バベル) は、最新の JavaScript 構文(ES2015以降)やまだブラウザに実装されていない提案段階の機能を、古いブラウザや環境でも動作する形式に変換する JavaScriptトランスパイラ(変換ツール) です。旧約聖書の「バベルの塔」が由来で、異なる言語を通じ合わせるという意味合いが込められています。

たとえば、開発者が最新の ES2015+ 構文(アロー関数const/letクラス構文など)でコードを書いても、それを理解できない古いブラウザでは動きません。Babelはそのコードを受け取り、IE11などの旧世代のブラウザでも解釈できる古い JavaScript 構文に自動変換 してくれます。これにより、開発者は「このブラウザで動くかどうか」を気にせず、最新かつ読みやすい書き方でコーディングに集中できます。

また Babel は単なる変換器にとどまらず、プラグイン(拡張機能) を組み合わせることで React の JSX や TypeScript など多様な構文にも対応できます。現代のフロントエンド開発においてはほぼデファクトスタンダード(事実上の標準)として使われており、webpackVite などのビルドツールとも連携します。


Babelの仕組みと変換プロセス

Babelの処理は大きく3つのステップで進みます。

ステップ名称内容
1パース(Parse)ソースコードを読み込み、AST(抽象構文木)と呼ばれるデータ構造に分解する
2変換(Transform)プラグインがASTを操作し、構文を書き換える
3生成(Generate)書き換えられたASTから新しいJavaScriptコードを出力する

変換の具体例

// 変換前(ES2015+のアロー関数・テンプレートリテラル)
const greet = (name) => `Hello, ${name}!`;

// 変換後(Babelが出力するES5形式)
"use strict";
var greet = function greet(name) {
  return "Hello, " + name + "!";
};

ポリフィルとの違い

Babel が行う「構文変換」と混同しやすい概念に ポリフィル(Polyfill) があります。

種類対象
構文変換(Babel本体)書き方・文法の変換アロー関数 → function式
ポリフィルcore-js等)組み込み機能の補完PromiseArray.from など

構文はBabelが変換できますが、ブラウザに存在しない Promise などのAPIは変換だけでは解決できません。そのため @babel/preset-envcore-js を組み合わせてポリフィルも自動注入するのが一般的な使い方です。


歴史と背景

  • 2014年 — Sebastian McKenzie(当時17歳の学生)が個人プロジェクト「6to5」として開発・公開。ES6(ES2015)のコードをES5に変換するツールとして注目される
  • 2015年 — プロジェクト名を「Babel」に改名。コミュニティ主導のオープンソース開発に移行
  • 2015年〜 — React(JSX構文)・Flow型アノテーションとの連携が進み、フロントエンド開発の必須ツールとして急速に普及
  • 2017年(Babel 7) — TypeScript サポート・モノレポ構成(@babel/ スコープパッケージ)への移行など大規模なアーキテクチャ改革
  • 2018年以降 — webpack・Rollup・Viteなどあらゆるビルドツールに統合され、フロントエンドスタックの基盤として定着
  • 現在SWCRust製の高速トランスパイラ)や esbuild の台頭により「Babelを使わないビルド設定」も増えてきているが、柔軟なプラグインエコシステムは依然として強みを持つ

関連ツール・技術との比較

Babel はフロントエンドのビルドチェーンの中で他ツールと連携・競合します。

Babel と競合・代替ツールの比較

ツール言語速度柔軟性主な用途
BabelJavaScript普通◎ 非常に高い構文変換・プラグイン拡張全般
SWCRust◎ 非常に速い○ 高いNext.js等での高速ビルド
esbuildGo◎ 非常に速い△ 限定的バンドル・軽量トランスパイル
tsc(TypeScript)TypeScript普通△ TS専用TypeScript→JavaScript変換

フロントエンドビルドチェーンにおけるBabelの位置づけ

ソースコード ES2015+ / JSX / TS Babel 構文変換・ポリフィル注入 変換済みコード ES5 / 旧ブラウザ対応 ビルドツール(webpack / Vite / Rollup) Babelをローダー/プラグインとして呼び出し、バンドル処理の一部として組み込む @babel/preset-env ターゲット環境に応じ自動選択 @babel/preset-react JSX → React.createElement 変換 @babel/preset-typescript TypeScript構文を除去・変換 主要プリセット(プラグインセット)

babel.config.js の設定例

// babel.config.js(プロジェクトルートに置く設定ファイル)
module.exports = {
  presets: [
    // ターゲットブラウザに合わせて自動的に変換ルールを選ぶ
    ["@babel/preset-env", { targets: "> 0.25%, not dead" }],
    // React の JSX を変換する
    "@babel/preset-react",
    // TypeScript の型注釈を除去する
    "@babel/preset-typescript",
  ],
};

関連用語

  • webpack — JavaScriptやCSS・画像などをまとめてバンドルするモジュールバンドラー
  • Vite — 高速な開発サーバーとビルドを提供するフロントエンドビルドツール
  • TypeScript — JavaScriptに型システムを追加したAltJS(代替言語)
  • npm — JavaScriptのパッケージ管理ツール。Babelのインストールに使う
  • AST(抽象構文木) — コードを木構造のデータとして表現したもの。Babelの変換処理の中心
  • ポリフィル — 新しいブラウザAPIを古い環境でも動くよう補う実装コード
  • ESモジュール — JavaScriptの標準的なモジュール仕様(import/export
  • SWC — Rust製の高速トランスパイラ。Babelの代替として注目されている