React Native で Realm を使う記事を探すと、最近の記事は見当たらず多くの記事では Expo を利用していると使えない、とのこと。
そうか・・と思ってましたが、公式を見ると以下の記述がありできそうでした(以下は公式の該当部分の日本語訳です)。Expo のまま使えるようになったのは比較的最近のようです。
Expo で Realm を使用する
Expo は、Expo SDK バージョン 44 で Realm をサポートするようになりました。Expo で Realm を使用するには Expo SDK バージョン 44 にアップグレードしてください。相談する互換性チャート Expo SDK のどのバージョンが Realm と互換性があるかを判断します。
https://www.mongodb.com/docs/realm/sdk/react-native/install/
ただ、すんなり使えると思いきや、公式の手順も古かったり、知らないことが多くかなり手こずったのでその時にやったことをまとめまています。誤りなどあれば指摘いただけると嬉しいです。
バージョン
今回試したバージョンは以下の通り。
├── @realm/react@0.4.3
├── expo-dev-client@2.2.1
├── expo@48.0.11
├── react-native@0.71.6
├── realm@11.8.0
やったこと
試行錯誤だったので正確な手順ではありませんのでご注意ください。最終的に必要だったと思われる作業です。Expo プロジェクトは作成済みの前提です。
expo-cli のインストール
npm install -g expo-cli
Realm のインストール
npm install realm
npm install @realm/react
android フォルダ(プロジェクト)の作成
プロジェクトルートで以下を行うと android フォルダが出来上がり、ネイティブプロジェクトができます。
npx expo run:android
ios フォルダ(プロジェクト)の作成と pod install
プロジェクトルートで以下を行うと ios フォルダが出来上がり、ネイティブプロジェクトができます。
pod install を行うことで React Native 側で引き込んでいるもので必要なものをインストールしてくれる(と理解)。
npx expo run:ios
cd ios
pod install
expo-dev-client のインストール
npm install expo-dev-client
expo-dev-client は ChatGPT によると以下とのことです。自分の理解としては通常の expo start と違い、上で作ったネイティブプロジェクトをビルドしてくれる。これで Expo に含まれていないライブラリやカスタムコードを Expo を外すことなく作業ができるのようになるのかなと(違ってたら指摘お願いします)。
Expo Dev Client は、Expo アプリ開発において開発者がアプリをローカルで開発し、即座に変更を反映させることができるツールです。通常の Expo 開発環境とは異なり、Expo Dev Client は Expo サーバーに接続せず、ローカルにあるアプリのバンドルを使用します。
Expo Dev Client には、以下のような特徴があります。
- ローカルでの開発:Expo Dev Client を使用することで、開発者はローカルでアプリの開発を行うことができます。
- 即時反映:Expo Dev Client を使用することで、開発者はコードの変更を保存するたびに、アプリが自動的にリロードされます。これにより、変更が即座に反映されます。
- デバッグ機能:Expo Dev Client には、デバッグ用のツールが組み込まれており、開発者はデバッグを容易に行うことができます。
通常の Expo 開発環境との違いは、Expo Dev Client が Expo サーバーに接続せず、ローカルにあるアプリのバンドルを使用する点です。また、Expo Dev Client は、アプリをネイティブのコードにビルドする必要がなく、JavaScript ベースの開発を可能にします。これにより、開発者は開発効率を向上させることができます。
なお、一連の作業をしたあとシミュレータでは起動できたのですが Expo Go だとエラー(Realm がないとのエラー)になり、なんでだ?と思い色々調べてましたが、公式 にも書かれていますが、アプリは引き続き Expo Go で実行できますが、 Expo Go アプリにまだ存在しないカスタム ネイティブ コードにはアクセスできません、とのことです。上をちゃんと理解していれば悩むこともなかったのですが。。
起動
上が一通り終わったら以下のコマンドで起動できます。
expo start --dev-client
起動後は、a で Android, i で iOS のシミュレータが起動してアプリが実行されます。
最後に
実行することは多くないですが、1つの処理の中で色々なことがされていて時間が結構かかりました。
途中で失敗して、再実行するとOKだったこともあるのでもしエラーになった場合は試してみたらよいかもしれません。