Open8

最新のReact Native Expoについて調査していく

IchikiIchiki

最新のExpoの状況を探りつつ、過去にejectしたReact Native Projectをもう一度ExpoのManaged Workflowに戻れるのかを確認したい。 (メリット、デメリット含めて)

参考: https://docs.expo.dev/bare/overview/

IchikiIchiki

config pluginsを使うとManaged WorkflowのままNativeの設定やコードを定義できるようになるみたい。

https://docs.expo.dev/config-plugins/introduction/

昔はNativeの実装が必要になった場合はejectをするしか選択肢がなかったはずだけど、これは便利そう。

IchikiIchiki

https://rnfirebase.io/#expo

React Native FirebaseはConfig pluginsでの実装方法が載っている。
iOS/Androidの設定をせずともexpo prebuildでネイティブコードがよしなに自動生成されるっぽい。
なるほどー。

IchikiIchiki

https://docs.expo.dev/workflow/prebuild/

prebuildという機能が提供されていて、このコマンドを叩くとios/androidディレクトリが生成されてその中にネイティブのコードが入る模様。

Config pluginsはこの自動生成されるタイミングに対してネイティブの設定を書き換えられるということっぽい。

IchikiIchiki

ちょっと勘違いしていた。実際に生成する処理のことは Continuous Native Generationと呼ぶらしい。

Config pluginsはあくまでNative用の処理を設定するものということらしい。

  • Config Plugins は、開発者がどの機能を使うか、どのように設定するかを宣言する「入口」。
  • Continuous Native Generation (CNG) は、それを基にExpoが必要なネイティブコードを生成・管理する「実行プロセス」。

実際に生成するコマンドは prebuild で実行する。

IchikiIchiki

Expo Module APIとは?

Expo Module API は、Expo SDK でカスタムネイティブモジュールを簡単に作成し、React Native アプリケーションに統合するためのフレームワークです。このAPIを使用すると、React NativeのJavaScriptコードとネイティブプラットフォームコード(iOSとAndroid)の間でスムーズに通信できます。

Expo Module APIは、Expoのエコシステムに統合された形で、ネイティブコードの記述を簡素化し、モジュール開発者が一貫した方法でiOSとAndroidの両方に対応するネイティブモジュールを作成できるよう設計されています。

Expo Module APIとCNG, Config pluginsの違いは?

expo Module API は主に Bare Workflow(ネイティブコードを直接編集できるExpoのモード)で使用されるものですが、Managed Workflow でも以下の仕組みを通じて利用可能です:

Config Plugins を使用して、Managed Workflowでもネイティブモジュールを簡単に有効化できます。
EAS Build(Expo Application Services)を利用することで、Managed Workflowでネイティブコードを直接編集せずに必要な設定をビルドに反映できます。
つまり、Managed WorkflowでもExpo Module APIを通じて作成されたモジュールを間接的に利用できます。ただし、開発者がExpo Module API自体を直接使用してカスタムネイティブモジュールを構築するのはBare Workflowで行うのが一般的です。

IchikiIchiki
Expo Module API
    ↓
Expoモジュール(例: expo-location, expo-camera)
    ↓
Config Plugins(例: expo-locationの設定を適用)
    ↓
Continuous Native Generation (CNG)がネイティブコードを生成
    ↓
Expoプロジェクト(Managed WorkflowまたはBare Workflow)

仕組みとしてはこんな感じ?