1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Reactが動く仕組み】第3弾:Babelとpolyfillの違いは?

1
Posted at

【Reactが動く仕組み】シリーズ

Reactでコードを書いて、アプリは作れる。
でも、「どうやって動いているのか?」と聞かれると、言葉にできない…。
一歩踏み出して、「裏側の仕組みを理解して説明できる」を目指したシリーズです。

全7弾で以下の内容を記載予定です。
1.Node.js(実行環境)
2.ビルド(構築の流れ)
3.Babel / polyfill(変換)
4.DOM / 仮想DOM(仕組み)
5.レンダリング(動き)
6.再レンダリング(なぜ起きる?)
7.最適化(どう見極める?)

今回はその第3弾として、「Babel / polyfill」について整理していきます。

はじめに

第2弾では「ビルド」について整理しました。

👉 Reactのコードは、そのままではブラウザで動かない
👉 そのため、ビルドによって"動かせる状態"にしている

という話でした。

 
では次に 「"動かせる状態"にするために、何をしているのか?」 を見ていきます。

この記事でわかること

  • Babelとは何か
  • polyfillとは何か
  • この2つの違い

よくある混乱

Reactの学習をしていると、こんな言葉を見かけます。

  • Babel
  • polyfill

どちらも「変換」に関係していそうですが
似ているようで違うのです

結論

👉 Babelとpolyfillは役割が違う

  • Babel → コードを書き換える
  • polyfill → 足りない機能を追加する

Babelとは何か

Babelとは一言でいうと、

👉 新しいJavaScriptを、古い環境でも動くように書き換えるツール
 
例えば

const add = (a, b) => a + b;

これはアロー関数ですが、古いブラウザでは動かない場合があります。
 
Babelを通すと

var add = function(a, b) {
  return a + b;
};

👉 このように書き換えられます

 
つまり、
👉 「構文(書き方)」を変換しています

JSXもBabelが変換している

Reactでよく使うJSX ↓

<h1>Hello</h1>

これもそのままでは、ブラウザがこの記法を理解できません

 
Babelによって ↓

React.createElement("h1", null, "Hello");

に変換されます。

👉 Reactが動くのは、この変換があるからです!

polyfillとは何か

では次にpolyfillです。

polyfillとは一言でいうと、

👉 古いブラウザに「足りない機能」を追加する仕組み

 
例えば

[1, 2, 3].includes(2);

この includes は、古いブラウザでは使えません。

 
このときpolyfillを使うと
👉 その機能をJavaScriptで実装して補います

if (!Array.prototype.includes) {
  Array.prototype.includes = function(...) {
    // 代替処理
  };
}

👉 「機能そのもの」を追加しているということです

Babelとpolyfillの違い

ここまでを整理すると

■Babel

  • コードを書き換える
  • 構文(書き方)を変換する

例:アロー関数、JSX

■polyfill

  • 機能を追加する
  • 存在しないAPIを補う

例:includes、Promise など

👉 書き方を変えるのがBabel、機能を足すのがpolyfill

なぜ両方必要なのか?

☆ここが重要☆

例えば

const result = [1, 2, 3].includes(2);

Babelで変換すると ↓

var result = [1, 2, 3].includes(2);

👉 書き方は変わりますが、includes はそのままです

 
つまり
👉 機能がない問題は解決されていない

ここでpolyfillの出番です。
👉 Babelだけでは不十分で、polyfillと組み合わせる必要があります

Node.jsとの関係

第1弾・第2弾の話ともつながります。

これらの処理は、

  • コード変換
  • ファイル処理

を含みます。

 
そのため
👉 ブラウザでは実行できません

↓ ということは!

👉 【Node.js上で】Babelやpolyfillが動き、ビルド処理の一部として実行されています

まとめ

  • Babelは、コードの書き方を変換するツール

  • polyfillは、不足している機能を補う仕組み

  • Reactのコードは、これらによってブラウザで動く形に変換されている

👉 Reactはそのまま動いているのではなく、
👉 変換(Babel)と補完(polyfill)によって動ける形にされている

第4弾に向けて

ここまでで、「コードがどう変換されるか」が見えてきました。

では、その結果として、

👉 ブラウザはどのように画面を表示しているのか?

次回は「DOM / 仮想DOM」をテーマに、
表示の仕組みを整理していきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?