セットアップ
アプリ内ターボモジュール
アプリ内モジュールの場合は、アプリの作成の手順に従って開始アプリを作成します。スタンドアロンターボモジュール
スタンドアロンモジュールの場合は、ターボモジュールテンプレートから開始できます。パッケージのルートから以下のコマンドを実行すると、使用可能なテンプレートのリストが表示されます。idlTurboModule:OS API(IDL)を使用している場合basicTurboModule:独自のコードからターボモジュールを作成する場合
IDLターボモジュール
--idlPackage:ターボモジュールで使用するIDLパッケージ。逆引きDNS表記で記述します。たとえば、com.amazondeveloper.kepler.fooのように指定します。--outputDir:[任意] プロジェクトを生成するディレクトリ。指定しない場合、コマンドを実行したフォルダにプロジェクトが生成されます。
プレーンターボモジュール
--outputDir:[任意] プロジェクトを生成するディレクトリ。指定しない場合、コマンドを実行したフォルダにプロジェクトが生成されます。
ターボモジュールの作成
手順1:TurbomoduleAPIをインストールする
テンプレートを使用してターボモジュールを作成した場合、@amazon-devices/keplerscript-turbomodule-apiパッケージは既にpackage.jsonのdependenciesセクションにリストされているため、この手順はスキップできます。
パッケージのルートから、次のコマンドを実行します。
手順2:TypeScriptでインターフェイス定義を作成する
ターボモジュールのテンプレートを使用した場合、このファイルは既に存在しますが、必要に応じて変更する必要があります。NativePinger.tsファイル(注:ファイル名はテンプレートに渡した名前に基づいて付けられます)は、ネイティブモジュールのJavaScriptへのインターフェイスを定義します。慣例により、これはsrc/turbo-modulesに配置されています。
インターフェイスは次のようになるはずです。
Pingerというインターフェイスを定義し、このインターフェイスは数値を返すpingという単一の関数を公開します。使用可能な戻り値の型の詳細については、ネイティブコードでのJavaScriptの型を参照してください。
TurboModuleRegistry.getEnforcingは'Pinger'をルックアップキーとして使用してモジュールのネイティブオブジェクトをロードし、見つからない場合は例外を発生させます。次に、返されたオブジェクトにPingerインターフェイスをバインドします。
手順3:Codegenを実行してネイティブスキャフォールディングを生成する
TurbomoduleAPIライブラリには、TypeScriptインターフェイスに基づいてC++スキャフォールディングを生成できるCodegenツールが含まれています。生成されたコードは、ターボモジュールのC++仕様を定義します。Codegenを使用するには、次のコマンドを実行します。npx keplerscript-turbomodule-api codegen -hを実行するか、Vega Codegenに関するよくある質問(FAQ)トピックを参照してください。
手順4:C++関数を実装する
通常、kepler/turbo-modules/generated/ディレクトリにあるCodegenによって作成されたファイルを手動で変更する必要はありません。変更すると、Codegenを再実行したときにこれらのファイルが上書きされることに注意してください。更新内容が失われないようにするには、変更したファイルを別の場所にキャッシュし、codegenを再実行した後にその変更内容をもう一度適用してください。
kepler/turbo-modules/ディレクトリにあるC++(.h/.cpp)ファイルに、インターフェイスを実装します。前のステップで生成された関数本体を入力する必要があります。
IDL
ターボモジュールがIDL経由でOS APIを使用する場合、インポートを追加し、IDLコンポーネントをインスタンス化し、必要に応じてAPIを使用する必要があります。 例 インポートを追加します。com.amazondeveloper.kepler.fooは、テンプレートに渡した--idlPackage(存在する場合)と一致している必要があります。
より詳細な例については、インターナショナリゼーション開発者ガイドを参照してください。
手順5:JavaScriptレイヤーを実装する
作成したTypeScriptインターフェイスは、ネイティブオブジェクトをJavaScriptから呼び出すための型情報を提供します。エラー処理、JavaScriptロギング、オプションパラメーターやサポートされていない型の引数の前処理などの操作では、ネイティブメソッドよりもJavaScriptロジックのレイヤーを追加したい場合があります。現時点ではそのようなロジックが必要ない場合でも、JavaScriptとネイティブAPIを切り分ける基本的なラッパーを追加すれば、今後のAPIの変更に柔軟に対応できるようになります。index.tsにexport {default as Pinger} from './turbo-modules/Pinger'が含まれている場合があります。
JavaScriptテストを追加する
Jestなどのフレームワークを使用して、JavaScriptコードをテキスト化することができます。Jestでテストを実行する場合、C++ターボモジュールインスタンスは存在しないため、JavaScriptテスト用にモックを作成する必要があります。 次の例は、C++ターボモジュールインスタンスを模倣する方法を示しています。__mocks__サブディレクトリsrc/turbo-modules/__mocks__/NativePinger.tsに追加できます。
ターボモジュールのコンシューマーにモックを提供して、独自のテストを円滑に行えるようにすることができます。例えば、JestのsetupFilessetupFiles 。
手順6:ビルド構成を追加する
テンプレートからターボモジュールを生成した場合、この手順はすでに完了しているはずです。ただし、テンプレートによって提供されるコードを調整したり、追加のCodegenパラメーターを指定したりした場合は、この情報が役立つ場合があります。自動リンク
Vegaターボモジュールは自動リンクされています。つまり、ネイティブモジュールはアプリによって直接リンクされるのではなく、アプリの依存関係とパッケージ構成に従ってVega向けReact Nativeによってロードされます。ターボモジュールの開発者は、ターボモジュールの登録と構成コードを追加する必要があります。手順1:AutoLinkInit.cppにモジュールを登録する
kepler/AutoLinkInit.cppには、お使いのターボモジュールに合わせて調整された次のコードがあるはずです。
TurboModuleRegistry.getEnforcingの文字列を使用するため、上記のようにKEPLER_REGISTER_TURBO_MODULE(namespace, classname)を使用できます。TurboModuleRegistryが使用する文字列とは異なるクラス名を渡した場合は、KEPLER_REGISTER_TURBO_MODULE_WITH_NAME(TurboModuleRegistry namestring, namespace, classname)マクロを使用できます。
手順2:react-native.config.jsにメタデータを追加する
すべてのターボモジュール型で、react-native.config.jsに自動リンク構成を指定します。 スタンドアロンのターボモジュールライブラリの場合動的リンク
linkDynamic、自動リンクライブラリをアプリの起動時に読み込むか(起動レイテンシーが増加する)、JavaScriptによってターボモジュールがリクエストされたときにロードするかを制御します。ライブラリの設定に関係なく、アプリは独自のreact-native.config.jsの値をニーズに合った値にオーバーライドすることができます。わからない場合は、デフォルトをtrueに設定してください。
CMakeLists.txt
CMakeLists.txtファイルには、プロジェクトのビルドプロセスを定義し、CMakeがさまざまなコンパイラやIDE用のメイクファイルまたはプロジェクトファイルを生成するために使用するコマンドと命令が含まれています。プロジェクトルートには、次のようなCMakeLists.txtがあるはずです。
ビルドターゲティング
アプリ内ターボモジュールの場合、ビルドターゲティングはアプリのセットアップ手順に従って行う必要があります。 ビルドターゲティングはpackage.jsonまたはCLIビルドフラグで指定できます。
手順7:ターボモジュールをビルドする
package.jsonスクリプトを微調整して、チームでよく使用されるコマンドを実行したり、既存のスクリプトを段階的に実行したりできます。
手順8:新しいターボモジュールをアプリで使用する
アプリ内ターボモジュールの場合、相対パスを使用してモジュールをインポートし、標準のJSモジュールと同じように呼び出すことができます。再ビルド
npm packによって生成された.tgzファイルを使用してスタンドアロンのターボモジュールをアプリにインストールし、後でターボモジュールに変更を加える場合は、ターボモジュールを再ビルドした後に新しい.tgzを再インストールする必要があります。 このプロセスは通常、次のとおりです。- ターボモジュールコードの変更
- ターボモジュール(npmパック)の再ビルド
- アプリパッケージからを実行します。
- アプリを再ビルドします。

