この記事はメモとして残して置いた限定公開記事を全体公開にしたものです。記事の内容は古い可能性があります。
プロローグ
私がそれに気づいたのは、ReactNative で、センサー系の値を取得したいと考えていたときでした。いくつかのライブラリを調査しましたが、私の求めている機能を持っているものはありませんでした。ただ、欲しい機能がすべてあるとは言えないまでも、それに近いものを実現しているライブラリがひとつだけありました。
https://docs.expo.io/versions/latest/sdk/sensors/
そう、expo-sensors です。
私は、正直思いました。「…またExpoか」と。Expo は素晴らしいツールです。ただいくつか欠点がありました(正しくはあると思っていました)。Eject しなければ使えないプラグインが多すぎること。Eject がなんとなく怖いこと。Eject 以外の方法で Expo API 群を使うのは難しいことです。
私は、いつも通り「これは使えないな。。」と、あきらめようとしました。が、ふと上のドキュメントにある文言が目に入りました。
To use this in a bare React Native app, follow the installation instructions.
「素の ReactNative で使いたければ、ここを参考に」といった感じでしょうか。私は素晴らしいプロジェクトの入り口を見つけたのです。
Installation in bare React Native projects
https://github.com/expo/expo/tree/master/packages/expo-sensors
さっそく上記のページの飛んでみると、以下のような項目が見つかりました。
Installation in bare React Native projects
そこにはこう書いてありました。
For bare React Native projects, you must ensure that you have installed and configured the react-native-unimodules package before continuing.
「素の ReactNative で使うためには、react-native-unimodules パッケージのインストールと設定が必要です。」
そこではじめて知ったのです。「react-native-unimodules」を。
react-native-unimodules とは?
端的に言ってしまえば、Expo API 群を、素の ReactNative で使えるようにするライブラリです。ただ、すべての API を使えるわけではないです。が、ほとんど使えます。サポートしている API は以下をご確認ください。
react-native-unimodules を使うと、なにがいいのか?
素の ReactNative で開発している人にはよくあることだと思いますが、導入したライブラリがメンテナンスされていないことが多々あります。とくに ReactNative が 0.60 以降になってからは顕著です。使えそうなライブラリを見つけても、まず、使えるかの検証が必要で、正直手間です。一方 react-native-unimodules を導入して使う Expo API 群は、Expo が管理しています。メンテがされていないこともほぼないので安心して使うことができます。
また、Expo の機能を段階的に導入したい人にもオススメです。他のライブラリで実装していたが、メンテされてないから今後が不安。。といった機能を書き換えるのもいいのではないでしょうか。
react-native-unimodules の説明はこんなところです。私と似たような状況の方はぜひ使ってみてください。基本的には react-native-unimodules と、使いたい API のパッケージをインストールするだけで使えるはずです。
おまけとして、react-native-unimodules に関することを調べようと Expo のドキュメントを読んでいると「Bare workflow」という言葉が頻繁に出てくるので、簡単に説明します。
Expo の Bare workflow
「Bare workflow」は、Expoツールを使ってアプリを構築する方法のひとつです。
expo-cli を使って react-native-unimodules が導入済みの ReactNative プロジェクトを作成するイメージです。expo init 時に以下のような選択肢が出るので、どちらかを選択すると作成できます。
----- Bare workflow -----
minimal bare and minimal, just the essentials to get you started
minimal (TypeScript) same as minimal but with TypeScript
これで作成したプロジェクトは、構造的には素の ReactNative ですが、Expo の API 群を使えることはもとより、Expo Client での動作確認ができます(制限はありますが)。Expo が ReactNative より使いやすいところは、API 群が充実していることもそうですが、動作確認を Expo Client でできることも魅力です。選択肢のひとつとして覚えておいて損はないかと。
また、Eject した Expo プロジェクトも、結果的に「Bare workflow」で構築していることになります。
「Bare workflow」は、言葉の意味合いとしては結構広そうです。「react-native-unimodules」を導入して、構築している ReactNative プロジェクトは、「Bare workflow」で構築している。。ぐらいで考えてしまってもいいかもしれません。
Workflow による違いは、以下でも説明されているので一読してみてください。
https://docs.expo.io/versions/latest/introduction/managed-vs-bare/
読んでいただき、ありがとうございました。