リリースレベル
React Native は、コミュニティが個々の新機能を、その設計と実装がほぼ完了した時点で、安定版リリースに含まれる前であっても採用できる機能を提供しています。このアプローチはリリースレベルとして知られています。
React Native のリリースレベルを設定することで、React Native インスタンスは Feature Flags を EXPERIMENTAL、CANARY、または STABLE モードのいずれかに設定して初期化されます。
このアプローチは React の Canary および Experimental リリースに似ていますが、重要な違いがあります。リリースレベルに関わらず、同じバージョンの React JS および React Native コードが使用されます。
React Native は @canary や @experimental NPM タグを使用していません。これは、リリースレベルが React Native の安定版リリースとナイトリーリリース両方で利用できるためです。
さらに、リリースレベルを EXPERIMENTAL または CANARY に設定しても、React Native が React バージョンを消費する方法(詳細はこちらで確認できます)のため、react@nightly または react@canary を消費することにはなりません。
各リリースレベルを使用する時期
STABLE:- 未リリースの機能への早期アクセスを必要としないすべてのプロダクションアプリやライブラリに使用します。
- これは、安定版リリースとナイトリーリリースのデフォルトレベルです。
CANARY:- フレームワークの作者、高度なアプリ開発者である場合、または新機能が安定版でリリースされる前にテストまたは採用する必要がある場合に使用します。
- プロダクションまたはユーザー向けアプリケーションには推奨されません。
EXPERIMENTAL:- 開発の初期段階にある新機能のテストおよびフィードバックの提供のみに使用します。
- プロダクションまたはユーザー向けアプリケーションには推奨されません。
Canary & Experimental を使用して React Native を初期化する方法
Android
DefaultNewArchitectureEntryPoint クラスには、releaseLevel プロパティ(デフォルト: STABLE)が追加されました。
フィーチャーフラグシステムは、このプロパティを使用して、選択されたリリースレベルに適したフィーチャーフラグのセットを選択します。
DefaultNewArchitectureEntryPoint.releaseLevel = ReleaseLevel.CANARY
DefaultNewArchitectureEntryPoint.load()
ビルドシステムは、各リリースレベル向けに異なるフィーチャーフラグオーバーライドクラスを生成し、各ステージで正しい機能が有効になるようにします。
iOS
RCTReactNativeFactory クラスには、releaseLevel パラメーターを受け入れるイニシャライザが追加されました。フィーチャーフラグの設定は、このパラメーターを使用して正しいフィーチャーフラグオーバーライドを選択します。
[[RCTReactNativeFactory alloc] initWithDelegate:delegate releaseLevel:Canary];
このシステムは、アプリインスタンスごとにアクティブなリリースレベルが1つだけであることを保証し、異なるリリースレベルで複数のファクトリが作成された場合はクラッシュします。