【ぽりふぃる】

ポリフィル とは?

最終更新:
💡 環境に足りないAPIや機能を、追加のコードで補う

実行環境が標準で提供していないAPIや機能を、追加のコードで補うもの。WebではJavaScriptによる実装が多い。新しいブラウザにも未対応の機能があり、すべての機能を完全に再現できるとは限らない。

📌 このページのポイント
ポリフィル:未対応のAPIを補う 対応済みの環境 Promise 標準のPromiseがある 未対応の環境 Promise Promiseがない例 実装を追加 ポリフィルのコード 標準実装を使う 追加が不要な例 Promiseを使う Promiseを使う 構文の変換とは別。機能の再現には限界もある
Promiseの例。対象環境・導入方法・標準実装との違いを確認します。
ひよこ ひよこ
ポリフィルって何を埋めてるの?
ペンギン先生 ペンギン先生
ブラウザなどの環境に足りないAPIや機能だよ。たとえばPromiseが提供されていない環境に、Promiseの実装を追加する。新しい環境でも未対応の機能はあるし、環境の制約で完全には再現できない機能もあるよ
ひよこ ひよこ
トランスパイラとは違うの?
ペンギン先生 ペンギン先生
トランスパイラはアロー関数などの構文を別の書き方に変えるもの。ポリフィルは実行時に利用するAPIなどを補うものだよ。構文を変換しただけでは、変換後のコードが使うAPIまで必ず用意されるわけではないんだ
ひよこ ひよこ
必要なものだけ選べるの?
ペンギン先生 ペンギン先生
core-jsなどから選べるよ。Babel 7のpreset-envではtargetsとuseBuiltIns、corejsの設定が関係する。usageは使用箇所を見て必要なimportを加える仕組みだけれど、Babel 8ではuseBuiltInsが廃止されたので、版に合うポリフィル用プラグインの案内を確認しよう
ひよこ ひよこ
入れておけば、どの環境でも同じになる?
ペンギン先生 ペンギン先生
完全に同じとは限らないよ。必要な機能を再現できるか、標準実装との差や対象環境での動作を確認する。配布元や更新の状態、追加コードの読み込み量も見て、使わないものまで一律に入れないようにしよう
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ポリフィル」って出てきたら「環境に足りないAPIや機能を補うコード」と思えばだいたいOK!
📖 おまけ:英語の意味
「Polyfill」 = 機能の穴を埋めるもの
💬 命名したRemy Sharpは、壁の穴を埋めるパテの商品Polyfillaのイメージも説明しているよ。古いブラウザに限定した名前ではないんだ

参考資料

← 用語集にもどる