gating
gating オプションは条件付きコンパイルを有効にし、最適化されたコードがランタイムでいつ使用されるか制御することができます。
{
gating: {
source: 'my-feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}リファレンス
gating
コンパイルされた関数に対する、ランタイムのフィーチャーフラグによる制御を設定します。
Type
{
source: string;
importSpecifierName: string;
} | nullデフォルト値
null
Properties
source:フィーチャーフラグをインポートするモジュールパスimportSpecifierName:インポートするエクスポートされた関数の名前
注意点
- gating 関数は boolean を返す必要があります。
- コンパイル済みバージョンと元のバージョンの両方を含めるため、バンドルサイズが増加します。
- コンパイルされた関数を含むすべてのファイルでインポートされます。
使用法
基本的なセットアップ
- フィーチャーフラグモジュールを作成します。
// src/utils/feature-flags.js
export function shouldUseCompiler() {
// your logic here
return getFeatureFlag('react-compiler-enabled');
}- コンパイラを設定します。
{
gating: {
source: './src/utils/feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}- コンパイラは gated コードを生成します。
// Input
function Button(props) {
return <button>{props.label}</button>;
}
// Output (simplified)
import { shouldUseCompiler } from './src/utils/feature-flags';
const Button = shouldUseCompiler()
? function Button_optimized(props) { /* compiled version */ }
: function Button_original(props) { /* original version */ };gating 関数はモジュール時に一度だけ評価されます。そのため JS バンドルが解析・評価されると、コンポーネントの選択はブラウザセッションの残りの期間、静的に維持されるので注意してください。
トラブルシューティング
フィーチャーフラグが動作しない場合
フラグモジュールが正しい関数をエクスポートしているか確認してください。
// ❌ Wrong: Default export
export default function shouldUseCompiler() {
return true;
}
// ✅ Correct: Named export matching importSpecifierName
export function shouldUseCompiler() {
return true;
}インポートエラーが発生する場合
ソースのパスが正しいことを確認してください。
// ❌ Wrong: Relative to babel.config.js
{
source: './src/flags',
importSpecifierName: 'flag'
}
// ✅ Correct: Module resolution path
{
source: '@myapp/feature-flags',
importSpecifierName: 'flag'
}
// ✅ Also correct: Absolute path from project root
{
source: './src/utils/flags',
importSpecifierName: 'flag'
}