# まとめ

最後に、ここまで見てきたBabelの特徴をまとめます。

* Babelとはコードをコードに変換する**トランスパイラ**である。
* 変換ルールはプラグインやプリセットで提供されている。
* `babel` コマンドを直接叩いて変換することもできるが、ライブラリごとに独自の設定方法が用意されていることが多い。
* 変換のステップは **Parse** → **Transform** → **Generate** の3ステップ。
* Parserをカスタマイズすることはできない。
  * つまり**ECMAScriptではないもの**はParseが失敗し、変換はできない。
* プラグインが関われるのは **Transform** だけ。
* Generateはどうでもいい。
* プラグインは、ノードの種類に対する変換メソッドという形で書く。
  * DOMのように変換後のノードを構築して置き換える
  * `babel-types` がとても重要な役割を果たす。
  * 変換はReactiveに実行される。
  * **ミスると無限ループするやつ**
* プラグインのテストはけっこう便利。

結論としてそれほど自由度はなさそうな感じします。
