as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート

Vegaアプリ向けReact Nativeのアーキテクチャ

Vegaアプリ向けReact Nativeのアーキテクチャ

このドキュメントでは、Vega向けReact Native(RNV)のアーキテクチャの概要について説明します。このドキュメントは、Vegaアプリを作成するときに、設計上の選択や制約を示す参考資料として使用できます。React Nativeフレームワークの詳細については、React Nativeのアーキテクチャに関するドキュメント(英語のみ)を参照してください。

Vega向けReact Native(RN)は、React NativeフレームワークをVegaデバイス向けにツリー外で移植したもので、React Nativeアプリを開発するためのよく知られた機能を提供します。Vega向けReact Nativeには、React NativeのコアコンポーネントとAPIのサポートに加えて、開発者に最もよく使用されているコミュニティサポートライブラリのセットが含まれています。さらに、フォーカス管理などのTV固有の機能に対応するために、Vega向けReact NativeにはReact NativeのtvOS機能のほとんどが組み込まれています。

アーキテクチャの指針

同等性

Vega向けReact Nativeは、React Nativeエコシステムのクロスプラットフォームの原則を取り入れ、RN APIや人気のあるライブラリと同等の機能を提供することを目指しています。RNVでは、RNのコアコンポーネントとAPIの80%以上がサポートされ、RNエコシステムで人気の高い40を超えるRNライブラリが移植されているため、Vega OSとその他のOSのプラットフォーム間でコードを再利用することができます。また、RNVには、TVデバイスに固有のフォーカス管理機能とイベント処理機能をサポートするRN tvOSのAPIも含まれています。そのほか、RNVには必要に応じて特定のRNプラットフォーム専用のAPIも含まれています。これには、BackHandler(Android)やSafeAreaView(iOS)などがあります。

さらに、Vega SDKには一般的なRNツールのほか、追加の開発ユーティリティとテストユーティリティのサポートが含まれているため、高パフォーマンスのランタイムを利用しつつ、アプリの開発スピードも速めることができます。React DevTools、Chrome DevTools、FlashlightなどはすべてRNVでも使用でき、これらのツールを含む既存のワークフローを活用して、クロスプラットフォームで作業することが可能です。

パフォーマンス

Vega向けReact Nativeは、一貫してAmazonデバイスでのパフォーマンスを最適化するように設計されています。アプリはVegaが求めるパフォーマンスのKPIを満たす必要があり、設計は開発者がこれを達成できるように逆算して決定されています。

RNVは新しいアーキテクチャで構築され、RNコアフレームワークのすべての機能改善が取り入れられています。これには、同期的なレイアウトとイベントのサポート、並列レンダリング、高速なJavaScriptとJSIによる相互運用(ターボモジュールのサポートなど)が含まれます。

RNVのRNフレームワークとランタイムは、アプリパッケージにバンドルされるのではなく、Vegaのシステムイメージにバンドルされています。Vegaのライフサイクルマネージャーは、システムにバンドルされたライブラリを利用して、アプリに割り当てられたプロセスを事前ウォーミングしてコールドスタートに備えます。これにより、最初のフレームまでの時間とアプリ全体の読み込み時間が短縮されます。また、RNランタイムは動的リンクライブラリであるため、共有メモリ空間に保持され、複数のRNアプリを同時に実行しているときのシステム全体のメモリフットプリントが削減されます。

RNVはリソース圧迫イベントもサポートしています。これをアプリで処理することで、アプリでのリソース利用を効率的に管理できます。開発者は、アプリがシステムパフォーマンスに影響を与えることなく動作し続けるように設計し、中断のないスムーズなエクスペリエンスをユーザーに提供できます。

さらに、Vegaの画像パイプラインにはスマートキャッシュが採用され、UIコンポーネントの表示状態やマウント状態などの使用状況に基づいて、メモリ内キャッシュとディスク上のキャッシュが最適化されます。これにより、低遅延のフレームレンダリングが実現されます。キャッシュとレンダリングパイプラインを統合することで、画像データがGPUメモリ内で直接管理され、CPUサイクルの浪費が少なくなります。RNVは、Vegaの画像パイプラインをネイティブレベルで利用して、高パフォーマンスの画像ライフサイクルをVegaアプリに提供します。

マルチプロファイルとマルチモーダル

Vega向けReact Nativeは、フォームファクター、画面サイズ、サポートされるハードウェア機能とソフトウェア機能が異なるさまざまなAmazonデバイスファミリーをサポートするように設計されています。RNVには、TVやスマートスピーカー向けの開発を可能にする機能が含まれています。React Nativeのフレックスレイアウトは、アプリのコンテンツを異なる画面サイズに対応させるために役立ちます。一方、プラットフォームAPIには、Vegaベースのデバイス向けにサポートされているさまざまなuiModeを扱うためのランタイム値が用意されています。また、Vegaビルドツールは、Metroバンドラー構成によるデバイスプロファイル拡張機能のカスタマイズをサポートしています。これにより、ターゲットデバイスのタイプに応じて、コンパイル時に機能を含めることができます。

Amazonデバイスファミリーでは、音声、タッチ、リモコンなどのさまざまな入力モダリティによる多様なユーザー操作パターンがサポートされます。RNVは、標準でマルチモダリティに対応するように設計されており、タッチとD-Padの両方による対話操作をサポートするコンポーネントを備えています。RNVはAlexa音声制御機能にも対応し、ナビゲーション、メディアコントロール、コンポーネント操作の音声によるアクティブ化をサポートしています。さらに、RNVにはフォーカスやリモコンのD-Pad入力をより適切に処理するためのAPIがあり、アプリエクスペリエンスをTVデバイス向けに特化して調整できます。

標準への準拠

Vega向けReact Nativeでは、なじみのあるウェブ標準を使用してアプリの機能を構築できます。Keplerは、RNエコシステムのAPIと同等の機能を提供することに重点を置いていますが、そのほかにW3C標準を利用するコアシステム機能の開発も行っています。RNVのメディアスタックでは、メディアを再生するW3C MSE/EME APIが提供され、JSベースのいくつかのメディアプレーヤー(専有ソフトウェアとオープンソースの両方)を簡単に移植して再利用できるようになりました。

さらに、RNVは現在WebCryptoとWebWorkerのサポートに取り組んでおり、今後のリリースで利用可能になる予定です。RNVでは、標準ベースのAPIと機能がVegaデバイスに提供され、ウェブエコシステムにあるJSライブラリをシームレスに使用することができます。

実装

Vega向けReact Nativeは、Vega OSを実行するデバイスをサポートする、React Nativeフレームワークのツリー外実装として構築されています。RNVは、React Common、Yoga、HermesなどのReact NativeソフトウェアスタックをVega OSに移植して、VegaのネイティブUIフレームワーク上で動作するようにしています。RNVはReact Nativeの新しいアーキテクチャに基づいて設計され、JSIのみをJavaScriptからネイティブへのインターフェイスとしてサポートしています。また、新しいFabricレンダラーにより、同期的なレイアウトとエフェクト、並列レンダリングに改良が加えられています。さらにRNVは、Vegaプラットフォーム用のTurbo NativeモジュールとFabric Nativeコンポーネントを通じたネイティブ統合をサポートしています。

OSへの組み込みと動的なリンク

RNVでは、React Nativeランタイム全体をVega OSにバンドルし、実行時にアプリに動的にリンクするという独自のアーキテクチャが採用されています。これは既存のVegaプラットフォームとは対照的です。既存のKeplerプラットフォームでは、ランタイムはアプリに静的にリンクされ、アプリコードと一緒にバンドルされます。

このような独断的なアプリアーキテクチャを選択したことは、Vega OSを実行するデバイスで、オンディスクストレージ、起動とアプリの切り替えにかかる時間、メモリ使用量を最適化するために役立っています。React Nativeランタイムの削除により、アプリバンドルのサイズは10MB以上削減されます。また、OSからランタイムを読み込む方式にすることで、Vegaプラットフォームによるプロセスプールの事前ウォーミングが可能になり、React Nativeアプリの起動時間が短縮されます。

加えて、RNVには最近、JSバンドルを分割する機能が導入されました。これにより、ReactとReact NativeのJSモジュールもアプリのJSバンドルから削除できるため、アプリサイズがさらに1~2MB小さくなるとともに、OSに付属するランタイムとの互換性が確保されます。RNランタイムと同様に、ReactとReact NativeのJSバンドルも、アプリの起動時にアプリコードと一緒に読み込まれ、初期化されます。

APIとABIの安定性

Vega OSと共にReact Nativeランタイムと少数のライブラリを配布するという設計上の選択には、アプリの互換性に関する懸念が伴います。RN APIはJavaScriptとNativeのどちらも安定していないことから、React Nativeのバージョンが新しくなると、互換性にかかわる重要な変更が導入される可能性があるためです。さらに、HermesバイトコードにはABI安定性がないため、新しいリリースごとにJSコードを再コンパイルする必要があります。RNV以外のすべてのRNプラットフォームでは、React Nativeランタイムがアプリと一緒にパッケージ化されます。これにより、アプリとビルド時のRNバージョンとの互換性が常に維持されます。

Vega OSの現在のリリースではRN v0.72がサポートされていますが、近い将来0.76に対応する予定です。React Nativeランタイムの特定のバージョンをターゲットとするアプリは、Vegaで利用可能なRNフレームワークのバージョンを認識して、アプリがサポート対象のデバイスにインストールされ、上位互換性と下位互換性を維持できるように構成する必要があります。

このリスクを軽減するために、RNVには、潜在的な互換性の問題に対処するためのいくつかの構成オプションが導入されています。

  1. Hermesバイトコードと一緒に未加工のJSバンドルをアプリにパッケージ化する: 将来的に新しいHermesバージョンとの互換性が失われるのを防ぐために、Vega SDKは、未加工のJSバンドルをアプリのvpkgにパッケージ化します。RNVに新しいバージョンのHermesが含まれている場合、Amazonアプリストアは、新しいアップデートが適用されたデバイスにアプリをインストールするときに自動的にJSバンドルを再コンパイルし、新しいHermesバイトコードを生成します。
  2. NPMモジュールのバージョンターゲティングを行う: RNVには、アプリの依存関係を、特定のデバイスで利用可能な特定のパッケージバージョンに限定する独自の機能があります。アプリ開発者は、依存関係の構成として、サポートされる依存関係の最小バージョンをneedsエントリに指定し、最新バージョンをwantsに指定します。これにより、Amazonアプリストアで適切なデバイスターゲティングが行われ、特定のバージョンをサポートできるデバイスにのみアプリがインストールされます。RNVには、互換性チェックユーティリティであるisPresentOnOSも用意されており、必要に応じてこれを使用して、特定のバージョンの依存関係がデバイスで使用可能かどうかを確認できます。下位互換性の処理に関する詳細を参照してください。

また、RNVチームはMetaと積極的に連携して、React NativeコアフレームワークにAPIとABIの安定性をもたらすための取り組みを行っています。Metaは最近、RN用JS APIの最初の安定版を発表したばかりですが、引き続きすべてのプラットフォームで残りのネイティブAPIサーフェスを安定化していく予定です。近いうちには、RNのABIを安定させるために、Hermesに下位互換性を持たせる作業が開始される予定です。これが完了すれば、あらゆるOSバージョンをターゲットとするあらゆるアプリバージョンがRNVでサポートされるようになります。

バージョン管理とアップグレード

Vegaデバイスのバージョン管理戦略は、ユーザーエクスペリエンス、開発者に対する柔軟性、システムリソース管理のバランスを取ることを目標としています。RNVでは、新しいバージョンを毎年1つリリースし、3年間のローリングウィンドウで最大3つのバージョンをデバイス上でサポートする予定です。このアプローチにより、開発者は、デバイスの世代間でのアプリの互換性を確保しながら独自のペースでアップグレードを行うことができ、アプリはマニフェストの構成によって特定のRNVバージョンをターゲットにできます。Vegaデバイスでは、ストレージとメモリの制約を管理して最適なパフォーマンスを実現するために、最新の2つのバージョンだけが事前ウォーミングされます。Amazonでは現在、開発者がバージョン間を簡単に移行し、段階的なアップグレードのコストを最小限に抑えることができるように、アップグレードツールの開発に取り組んでいます。また、3年以内に新しいバージョンにアップグレードできない開発者のための代替案も検討しています。

たとえば、2025年にはRNVバージョン0.72を搭載した新しいVegaデバイスが提供され、その後のリリースでRNVバージョン0.76がサポートされる予定です。2026年にはバージョン0.80が提供され、合計で3つのバージョンになります。2027年にはバージョン0.84がリリースされますが、3つのバージョンというローリング制限を維持するために、バージョン0.72は新しいデバイスから削除される予定です。


Last updated: 2025年9月30日