メインコンテンツへスキップ

Codegen CLI

Gradle を呼び出したり、手動でスクリプトを呼び出したりするのは覚えにくく、多くの手順が必要です。

これを簡略化するために、これらのタスクの実行を支援する CLI ツールを作成しました。それが Codegen CLI です。このコマンドは、あなたのプロジェクトで @react-native/codegen を実行します。以下のオプションが利用可能です。

sh
npx @react-native-community/cli codegen --help
Usage: rnc-cli codegen [options]

Options:
--verbose Increase logging verbosity
--path <path> Path to the React Native project root. (default: "/Users/MyUsername/projects/my-app")
--platform <string> Target platform. Supported values: "android", "ios", "all". (default: "all")
--outputPath <path> Path where generated artifacts will be output to.
-h, --help display help for command

サンプル

  • 現在の作業ディレクトリから package.json を読み込み、その codegenConfig に基づいてコードを生成します。
shell
npx @react-native-community/cli codegen
  • 現在の作業ディレクトリから package.json を読み込み、codegenConfig で定義された場所に iOS コードを生成します。
shell
npx @react-native-community/cli codegen --platform ios
  • third-party/some-library から package.json を読み込み、third-party/some-library/android/generated に Android コードを生成します。
shell
npx @react-native-community/cli codegen \
--path third-party/some-library \
--platform android \
--outputPath third-party/some-library/android/generated

生成されたコードをライブラリに含める

Codegen CLIは、ライブラリ開発者にとって素晴らしいツールです。生成されたコードを覗き見して、どのインターフェースを実装する必要があるかを確認するために使用できます。

通常、生成されたコードはライブラリに含まれず、そのライブラリを使用するアプリがビルド時に Codegen を実行する責任を負います。これはほとんどのケースで良い設定ですが、Codegen は includesGeneratedCode プロパティを介して生成されたコードをライブラリ自体に含めるメカニズムも提供しています。

includesGeneratedCode = true を使用することの意味を理解することが重要です。生成されたコードを含めることには、いくつかの利点があります。

  • アプリがあなたの代わりに Codegen を実行するのを待つ必要がなく、生成されたコードは常にそこにあります。
  • 実装ファイルは常に生成されたインターフェースと一致しています(これにより、ライブラリのコードが Codegen の API 変更に対してより堅牢になります)。
  • Android の両方のアーキテクチャをサポートするために2セットのファイルを含める必要がありません。New Architecture のものだけを保持すればよく、後方互換性が保証されます。
  • すべてのネイティブコードがそこにあるため、ライブラリのネイティブ部分を prebuild として配布することが可能です。

一方で、一つの欠点にも注意する必要があります。

  • 生成されたコードは、ライブラリ内で定義された React Native のバージョンを使用します。したがって、ライブラリが React Native 0.76 で出荷されている場合、生成されるコードはそのバージョンに基づきます。これは、生成されたコードがアプリで使用されている 以前の React Native バージョン(例えば、React Native 0.75 で実行されているアプリ)と互換性がない可能性があることを意味します。

includesGeneratedCode を有効にする

この設定を有効にするには:

  • ライブラリの package.json ファイルにある codegenConfig フィールドに includesGeneratedCode プロパティを追加します。その値を true に設定します。
  • Codegen CLI を使用してローカルで Codegen を実行します。
  • 生成されたコードを含めるように package.json を更新します。
  • 生成されたコードを含めるように podspec を更新します。
  • 生成されたコードを含めるように build.gradle ファイルを更新します。
  • react-native.config.jscmakeListsPath を更新して、Gradle がビルドディレクトリではなく、あなたの outputDir 内で CMakeLists ファイルを探すようにします。