ビルドターゲットとは?出力先の環境を選ぶ
ビルドターゲットは、出力がどの環境で動作しなければならないかをビルドツールに伝え、どの機能を使い、どれをダウンレベルするかをツールが判断できるようにします。
同じソースでも、どこで動作するかによって大きく異なる出力にコンパイルされることがあります。ビルドターゲットはその出力先を捉えます。JavaScriptのバージョン、browserやNodeのようなランタイム、あるいはブラウザの集合です。ターゲットはビルドがどれだけ積極的にトランスパイルするか、どの機能を前提にできるかを左右し、それを固定することがCIの出力を一貫させるものです。
ターゲットが制御するもの
- 出力が使うJavaScriptの構文レベル。
- browser、Node、あるいはその両方に向けて出力するかどうか。
- ビルドが存在すると前提にできるAPI。
ターゲットとトランスパイル
最近のJSバージョンのような高いターゲットは、ダウンレベルが少なく、より小さく速い出力を意味します。低いターゲットは、より古い環境をサポートするためにより多くのトランスパイルとpolyfillを意味します。ターゲットはモダンな出力と幅広いサポートの間を調整するダイヤルです。
browserターゲットとruntimeターゲット
runtimeターゲットはbrowserかNodeかの振る舞いを選びます。browserターゲットは、通常ブラウザのサポートリストを通じて特定のブラウザのバージョンへと絞り込みます。どちらもビルドに情報を与え、フロントエンドのプロジェクトでは両方を設定することがよくあります。
ライブラリのターゲットとアプリのターゲット
アプリは、そのユーザーが動作させる環境をターゲットにします。ライブラリは通常幅広くターゲットを取り、最終的なダウンレベルは利用側のアプリに委ねます。そうすることで、インストールするすべての人に特定のレベルを強制しないようにします。
CI/CDにおけるビルドターゲット
ターゲットは出力を変えるため、コミットされたconfigで固定することでCIを再現可能に保ちます。同じcommitは常に同じ環境に向けて出力します。ローカルとCIの間でのターゲットのdriftは、ローカルでは動くのに本番で失敗する、という問題のよくある原因です。だからこそターゲットは開発者のマシンではなくリポジトリの中に置かれます。
重要なポイント
- ビルドターゲットは、出力がサポートすべき環境と機能レベルを定義します。
- それはモダンで小さな出力と、幅広い互換性との間を調整するダイヤルです。
- ターゲットをコミットされたconfigで固定することで、CIのbuildが再現可能になります。