mcpField
F
feature-flags

feature-flags

github.com/react開発251.8k1.2k 回インストール今日更新
リポジトリ

feature-flags について

Reactリポジトリの機能フラグを扱うスキルです。フォークごとのフラグ定義、テストのゲート制御、チャネル別の状態確認を説明します。

主な機能

  1. 01既定およびフォークのフラグファイルを管理
  2. 02@gateでテストを制御
  3. 03gate()でフラグ別の動作を検証
  4. 04フラグ状態とチャネル間の差分を確認
  5. 05__VARIANT__の両方の状態をテスト

活用シーン

  1. 01Reactの機能にフラグを追加
  2. 02機能の無効時と動作差分をテスト
  3. 03チャネル固有のテスト失敗を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/react/react --skill feature-flags

インストール後、Claude Code で/feature-flagsを入力して読み込まれたか確認します。

詳細

React の機能フラグ

フラグファイル

ファイル目的
packages/shared/ReactFeatureFlags.jsデフォルトのフラグ(canary)、__EXPERIMENTAL__ による上書き
packages/shared/forks/ReactFeatureFlags.www.jswww チャネル、__VARIANT__ による上書き
packages/shared/forks/ReactFeatureFlags.native-fb.jsReact Native、__VARIANT__ による上書き
packages/shared/forks/ReactFeatureFlags.test-renderer.jsテストレンダラー

テストのゲーティング

@gate プラグマ(テストレベル)

フラグがないと機能を完全に利用できない場合に使用します。

// @gate enableViewTransition
it('supports view transitions', () => {
  // This test only runs when enableViewTransition is true
  // and is SKIPPED (not failed) when false
});
インラインの gate()(アサーションレベル)

機能は存在するものの、フラグによって動作が異なる場合に使用します。

it('renders component', async () => {
  await act(() => root.render(<App />));

  if (gate(flags => flags.enableNewBehavior)) {
    expect(container.textContent).toBe('new output');
  } else {
    expect(container.textContent).toBe('legacy output');
  }
});

新しいフラグの追加

  1. ReactFeatureFlags.js にデフォルト値とともに追加します
  2. 各フォークファイル(*.www.js、*.native-fb.js など)に追加します
  3. www/RN で変化させる場合は、フォークファイルで __VARIANT__ に設定します
  4. テストを @gate flagName またはインラインの gate() でゲーティングします

フラグの状態を確認する

/flags を使って、各チャネルの状態を確認します。コマンドの全オプションについては、flags スキルを参照してください。

__VARIANT__ フラグ(GK)

__VARIANT__ に設定されたフラグはゲートキーパーをシミュレートし、true と false の両方でテストされます。

/test www <pattern>              # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false

チャネル固有の失敗をデバッグする

  1. /flags --diff <channel1> <channel2> を実行して値を比較します
  2. @gate の条件を確認します。テストが特定のチャネルにゲーティングされている可能性があります
  3. /test <channel> <pattern> を実行して失敗を切り分けます
  4. 新しく追加したフラグがすべてのフォークファイルにあることを確認します

よくある間違い

  • 両方のバリアントを試し忘れる - __VARIANT__ フラグでは、必ず www と www variant false の両方をテストします
  • 動作の違いに @gate を使う - 両方の経路を実行する場合は、インラインの gate() を使用します
  • フォークファイルへの追加漏れ - 新しいフラグはメインファイルだけでなく、すべてのフォークファイルに追加する必要があります
  • ゲート構文の誤り - gate('name') ではなく、gate(flags => flags.name) です

コメント