Edited at

Babelは「ES2015をコンパイルするコンパイラ」なのか、それとも「ES2015をトランスパイルするトランスパイラ」 なのか

More than 1 year has passed since last update.


はじめに

Babelとは」でググってみると

記事によっては「BabelはES2015をコンパイルするコンパイラ」と説明されており、

また別の記事によっては「BabelはES2015をトランスパイルするトランスパイラ」と説明がされています。1

「本来それぞれの言葉の意味は違うはずでは…?」と混乱したため、

どちらの説明が正しいのか、それともどちらも正しいのかざっくり調べて自己解釈した備忘録です。


まずはBabelのサイトを見てみる

そもそも本家ではどのような説明をしているのか。

ということでBabelのサイトを見てみると


Babel is a JavaScript compiler.


と記載されており、またこちらページでは


Babel comes with a built-in CLI which can be used to compile files from the command line.


と記載されているため

「BabelはES2015をコンパイルするコンパイラ」

という説明が正しいかもしれないが、それぞれの言葉の意味も見ていく。


それぞれの言葉の意味を見てみる

言葉の意味は以下の通り。


コンパイラ


コンパイラ(英:compiler)とは、人間が理解しやすい言語や数式で記述されたプログラムを、機械語に(あるいは、元のプログラムよりも低いレベルのコードに)変換するプログラムのこと。


コンパイラ


コンパイル


コンパイラによる変換することを動詞で「compile コンパイル」と呼ぶ。


コンパイラ


トランスパイラ(トランスコンパイラ)


トランスコンパイラ(英語: transcompiler)またはソース・トゥ・ソースコンパイラ(英語: source-to-source compiler)は、一つのプログラミング言語で書かれたプログラムのソースコードを入力として受け取り、別のプログラミング言語の同等のソースコードを生成するコンパイラである。


トランスコンパイラ


トランスパイル(トランスコンパイル)

トランスコンパイラによる変換すること。


それぞれの言葉の意味を見る限りでは

「BabelはES2015をトランスパイルするトランスパイラ」

という説明が正しい気がする。

また、「トランスパイル」と「トランスパイラ」の言葉を用いている記事の方が多い印象。


結論:どちらの説明も正しい(と思った)

以下の理由でBabelを説明する場合はどちらも正しい(と思った)。


  • トランスパイラはコンパイラの一種のため、コンパイラと言い換えても問題ない。

  • トランスパイルは「変換する」という動詞の意味自体は同じため、コンパイルと言い換えても伝わる。

  • TypeScript等の記事でもコンパイルと記載されていることがあれば、トランスパイルと記載されていることもある。

  • 厳密に言えば「トランスパイル」と「トランスパイラ」を用いた説明が正しいと思うが、どちらの説明でも伝えたいことは大体伝わる。


まとめ

というわけで、「どちらの説明でもBabelが何なのかは伝わるため、どちらの説明も正しい。」という結論にいたりました。

しかし、それぞれの言葉の本来の意味は同じではないため、今回の例のように「トランスパイラ」を「コンパイラ」と言い換え、「トランスコンパイル」を「コンパイル」と言い換えることは問題ないですが、本来「コンパイラ」という言葉が正しいものを「トランスパイラ」に、「コンパイル」という言葉が正しいものを「トランスパイル」に言い換えると正しくなくなります。

例えば「C#をコンパイルする。」という言葉を「C#をトランスパイルする。」という言葉に言い換えると正しくなくなるため注意です。

Compiling Vs Transpiling - Steve Fenton





  1. 「トランスパイル」は「トランスコンパイル」と、「トランスパイラ」は「トランスコンパイラ」とも言います。