gating オプションは条件付きコンパイルを有効にし、最適化されたコードがランタイムでいつ使用されるか制御できるようにします。

{
gating: {
source: 'my-feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}

リファレンス

gating

コンパイルされた関数に対する、ランタイムのフィーチャーフラグによる制御を設定します。

Type

{
source: string;
importSpecifierName: string;
} | null

デフォルト値

null

Properties

  • source:フィーチャーフラグをインポートするモジュールパス
  • importSpecifierName:インポートするエクスポートされた関数の名前

注意点

  • ゲーティング関数はブーリアンを返す必要があります。
  • コンパイル済みバージョンと元のバージョンの両方を含めるため、バンドルサイズが増加します。
  • コンパイルされた関数を含むすべてのファイルでインポートされます。

使用法

基本的なフィーチャーフラグのセットアップ

  1. フィーチャーフラグモジュールを作成します。
// src/utils/feature-flags.js
export function shouldUseCompiler() {
// your logic here
return getFeatureFlag('react-compiler-enabled');
}
  1. コンパイラを設定します。
{
gating: {
source: './src/utils/feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}
  1. コンパイラがゲーティング済みのコードを生成します。
// 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 */ };

ゲーティング関数はモジュール評価時に一度だけ評価されることに注意してください。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'
}