# Babel

## 概要

Babelは、次世代のJavaScriptを書くためのコンパイラです。最新のJavaScript構文（ES2015+）で書かれたコードを、古いブラウザやNode.js環境でも動作するバージョンにトランスパイルします。コミュニティ主導で開発されており、多くの企業やプロジェクトで使用されています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| トランスパイル | 最新のJavaScript構文（ES2015+）を古い環境でも動作する形式に変換 |
| ポリフィル | `@babel/runtime`や`core-js`と連携して不足するAPIを補完 |
| JSX変換 | ReactのJSX構文をJavaScriptに変換 |
| TypeScript変換 | TypeScriptコードからJavaScriptへの変換 |
| Flow型除去 | Flowの型注釈をコードから除去 |
| プラグインシステム | カスタムトランスフォームを追加できる拡張可能なアーキテクチャ |
| プリセット | 複数のプラグインをまとめて適用できる設定セット |
| ソースマップ | デバッグ用のソースマップ生成 |

## 技術スタック

### コア

- 言語: JavaScript / TypeScript
- ランタイム: Node.js（^20.19.0 または >=22.12.0）
- パッケージマネージャー: Yarn 4.10.3
- モジュールシステム: ES Modules (ESM)

### 主要ライブラリ

- `gensync`: 同期/非同期のコード実行を統一的に扱うライブラリ
- `json5`: JSON5形式の設定ファイル解析
- `semver`: セマンティックバージョニングの処理
- `@jridgewell/remapping`: ソースマップの再マッピング

### 開発ツール

- テストフレームワーク: Jest 30.1.1
- リンター: ESLint 10.0.0
- フォーマッター: Prettier 3.8.1
- ビルドツール: Rollup 4.18.0、Gulp 5.0.1
- 型チェック: TypeScript 5.9.3

## ディレクトリ構成

```
babel-main/
├── packages/           # 主要パッケージ（150+パッケージ）
│   ├── babel-core/     # Babelコンパイラのコア
│   ├── babel-parser/   # JavaScriptパーサー
│   ├── babel-traverse/ # ASTトラバーサー
│   ├── babel-generator/# コードジェネレーター
│   ├── babel-types/    # AST型定義・ユーティリティ
│   ├── babel-cli/      # CLIツール
│   ├── babel-preset-*/ # プリセット群
│   └── babel-plugin-*/ # プラグイン群
├── codemods/           # コード変換ツール
├── eslint/             # ESLint関連パッケージ
├── scripts/            # ビルド・リリーススクリプト
├── test/               # 統合テスト
├── benchmark/          # パフォーマンスベンチマーク
├── doc/                # 内部ドキュメント
├── lib/                # 共有ライブラリ
├── babel.config.ts     # Babel設定
├── Gulpfile.ts         # ビルドタスク定義
├── Makefile            # ビルドコマンド
└── package.json        # ルートパッケージ設定
```

### コアパッケージの処理フロー

```
入力コード → @babel/parser → AST → @babel/traverse + plugins → AST → @babel/generator → 出力コード
```

## セットアップ

### 必要条件

- Node.js: ^20.19.0 または >=22.12.0
- Yarn: >=4.0.0
- Make: Unix系環境（Windows 10の場合はWSL 2推奨）

### インストール手順

1. リポジトリをフォークしてクローン:

```sh
git clone https://github.com/<your-github-username>/babel
cd babel
```

2. 依存関係のインストールとブートストラップ:

```sh
make bootstrap
```

3. ビルド:

```sh
# 一度だけビルド
make build

# または、変更を監視して自動ビルド
make watch
```

4. 配布用ビルド:

```sh
make build-dist
```

## 開発

### リント

```sh
# ESLintによるコードチェック
make lint

# 自動修正
make fix
```

### テスト

```sh
# 全テスト + リント実行
make test

# テストのみ（リントなし）
make test-only
```

### その他のコマンド

```sh
# Prettierによるフォーマット
npx prettier --write .

# 型チェック（tstyche）
npx tstyche
```

### コミット前フック

`husky`と`lint-staged`により、コミット前に自動でリントとフォーマットが実行されます。

### オンライン開発環境

[Gitpod](https://gitpod.io/#https://github.com/babel/babel)を使用して、ブラウザ上で即座に開発環境をセットアップできます。
