React Nativeでアプリ開発をする際、Expoで開発するかしないかで、その後の開発が大きく変わっていきます。
イメージとしてはおそらく
Expoあり → お手軽だけど制限あり
Expoなし → 自由にカスタマイズできるけど難易度高い
上記のようなイメージをもっている方が多いのではないでしょうか。
筆者は両方の開発環境の構築、アプリ作成をした経験がありますが結論から言うと、
Expoの導入一択
です。
ではなぜその結論に至ったのか、紹介してきます。
開発環境の構築スピードが天と地の差ほど違う
Expoなし
「nodeインストールして、watchman入れて、cocoapods入れて、initでプロジェクト作成して、、、。あ。TypeScriptも入れて」
Expoあり
「npm install -g expo-cli
expo init プロジェクト名
Done!」
Expoのインストールをしてプロジェクトを立ち上げるだけで終わりです。
expo init
をしたら、TypeScriptでするか、などなど、セッティング内容を選択していくので非常に楽です。
Expoなしの場合、nodeやwatchmanなど既に入っている場合もありますし、cocoapodsも入れなくても動かすことはできるので、「開発環境の構築スピードそんなに変わらないよね」と思われる方もいるでしょう。しかし、2つのコマンドだけで、パッと、開発環境が構築できるExpoの手軽さは強みだと感じます。
実際に開発に入るまでの苦労が違う
Expoなし
「このパッケージ入れたいから、pod install パッケージ名
、Podfileにも設定内容書くべきものは書いて、Xcode側でも設定して、、、」
Expoあり
「expo install パッケージ名
Done!!」
PodfileやInfo.plistファイルの編集など、ExpoなしだとSwiftに関わってくるようなファイルもいじっていく必要があるので、一つのパッケージやツールを使いたいと思っていても、設定が複雑で時間がかかります。
その点Expoありなら、インストールすれば設定完了なのですぐに使用できます。react-native-link
の設定もいりません。断然開発スピードが違ってきます。
ビルド環境が一発で整う
Expoなし
「iOS用の環境走らせて、Android用の環境も走らせて、あ、WEB用にもビルド環境も作んなくちゃ」
Expoあり
「yarn start
でAndroid、iOS、WEBの環境走らす準備OK → Done!!!」
ExpoがなくてもiOS、Androidの環境走らすことは簡単です。大きな利点としては、ビルド環境の構築をyarn start
で一発でできるのと、その際生成されるQRコードを読み取れば実機確認も簡単にできる、というところです。
特にWEB用のビルド環境がExpoありだと初めから作成されているのはかなり助かります。
終わりに
といっても、Expoだと制限がかかって使用できない、ようなツールもあります。例えばreduxを通してデータの永続化をする、redux-persist
はまだExpoありでは使用できません。筆者が知らないだけで他にもまだまだあるかもしれませんが、付けたい機能が実装できない、といったことはほぼほぼないでしょう。
エンジニアなら、Expoなしで自由にカスタマイズしていきたい、と思う方が多いと思いますが、それならばSwiftやKotlinを使用して開発していく方が高価値のスキルを身に付けれる分、断然お得だと思います。
アプリ開発したいけど、JavaScriptで簡単に、スタートアップだからMVP、PMFのサービス開発をスピーディーにお手軽に、ということなら、ExpoありのReact Nativeで開発が断然コスパが良いので、Expo入れるか入れないかで迷っている方がいたら、この記事が参考になれば良いです。