ExpoとReact Nativeの違いは何ですか?


回答:


206

Expoで働いています!

あなたがコードを書くとき、あなたはコードExpoを書きReact Nativeます。Expo2つの主要な部分があります。

1)expo-cli:プロジェクトの作成、ログの表示、デバイスでのオープン、公開などのための開発者ツール。

2)Expoクライアント:XCodeまたはを経由せずにプロジェクトの作業中にプロジェクトを開くことがAndroid Studioでき、他の人にもプロジェクトを表示できる携帯電話のアプリ!また、を介して公開するとexpo-cli、公開Expoされたのと同じアカウントにサインインしていれば、AndroidまたはiOSのクライアントを介していつでもアクセスできます。最後に、スタンドアロンアプリを構築することもできるので、Expoクライアントを使用して開く必要がなくなり、必要に応じてアプリストアやPlayストアに配布できます。

ですから、Expoは/の上に構築されたツールのセットですReact Native。これらのツールは、私たちが保持している1つの重要な信念に依存しExpoていますJavascript。に公開されている包括的なAPIセットがあれば、ネイティブコードを記述することなく、ほとんどのアプリを構築できます。

React Native常にネイティブコードにドロップできるため、これは重要です。これは非常に役立つ場合がありますが、コストがかかります。バイナリをテストする場合は、バイナリを送信する必要があります。世界の反対側にいる人は、作業中にリンクをタップするだけでは開けません。ブラウザで行うのと同じように、ワンクリックで公開するだけで、誰かがアクセスできるようにすることはできません。

ではExpo、可能であれば、ネイティブコードにドロップダウンしないようにすることをお勧めします。上で述べたように、APIの包括的なセットがで利用可能になっているJavascriptので、ほとんどのアプリでこれは必要ないはずです。したがって、この包括的なAPIセットを提供し、ネイティブランタイムが共有されている世界に存在できるすばらしいツールをすべて構築することを目指しています。

ただし、絶対にネイティブに落とす必要がある場合は、を使用ExpoKitして、Expoネイティブプロジェクトと同じレベルの制御を維持しながら、ネイティブAPIを引き続き使用できます。" ExpoKitは、より大きな標準ネイティブプロジェクトの一部としてExpoプラットフォームと既存のExpoプロジェクトを使用できるようにするObjective-CおよびJavaライブラリです。" 詳細はこちら。


4
「指数では、ネイティブコードにドロップダウンできません」。ネイティブコードにドロップダウンする必要がないことを知っているのは良いことですが、必要な場合はどうでしょう。なぜExponentはそれを阻止するのですか?
Otto

3
ああ、それがどのように不明瞭だったかわかります。したがって、Exponentクライアントは完全にオープンソース(github.com/exponentjs/exponent)です。つまり、必要に応じてネイティブコードを記述できますが、実質的には、通常のReact NativeのネイティブモジュールのコレクションとしてExponentライブラリを扱うだけです。アプリ。これはまったく問題なく、プロジェクトをオープンソース化する動機となりました。つまり、私たちのツール(アプリバイナリビルダー、アプリ/プレイストアのExponentクライアントでテストビルド、組み込みのプッシュ通知などを共有する)を使用できるようにする場合、ネイティブコードを作成することはできません。
brentvatne

この記事の執筆時点では、Expoは便利なネイティブプラグインの統合に非常に優れています。ただし、IAPの主要なプラグイン統合が欠けているため、アプリの収益を上げることはできません!!! そして、あなたが尋ねると、私が利益を上げることができない場合、アプリを作る意味は何ですか?
アダム

96

ドキュメントの概要とExpoの従業員からの回答を試みました。

React Native init:

利点

  • Java / Objective-Cで書かれたネイティブモジュールを追加できます(おそらく唯一の、しかし最強のモジュール)

短所

  • プロジェクトを実行するにはAndroid StudioとXCodeが必要
  • MacがないとiOS向けに開発できません
  • テストに使用するには、デバイスをUSB経由で接続する必要があります
  • フォントはXCodeに手動でインポートする必要があります
  • アプリを共有する場合は、.apk / .ipaファイル全体を送信する必要があります
  • そのままではJS APIを提供しません。たとえば、Push-Notifications、Asset Managerなど。手動でインストールしてnpmとリンクする必要があります。
  • 作業プロジェクトを正しく設定する(デバイス構成を含む)のはかなり複雑で時間がかかる場合があります

万博

利点

  • プロジェクトの設定は簡単で、数分で完了できます
  • あなた(および他の人々)は、作業中にプロジェクトを開くことができます
  • アプリの共有は簡単です(QRコードまたはリンクを使用)。.apkファイルまたは.ipaファイル全体を送信する必要はありません。
  • アプリを実行するためにビルドは必要ありません
  • 標準プロジェクトにいくつかの基本的なライブラリを統合します(プッシュ通知、Asset Managerなど)
  • ExpoKitにイジェクトし、すべてのExpo機能を使用するのではなく、一部のExpo機能を使用してネイティブコードを統合できます。
  • Expoは.apkおよび.ipaファイルを作成できます(Expoで可能なストアへの配布)

短所

  • あなたはネイティブモジュール(おそらくいくつかのゲームチェンジャー)を追加することはできません
  • Objective-C / Javaでネイティブコードを使用するライブラリは使用できません
  • 標準のHello Worldアプリのサイズは約25MBです(統合ライブラリのため)。
  • FaceDetector、ARKit、またはPaymentsを使用する場合は、ExpoKitに排出する必要があります
  • ExpoKitにイジェクトすると、Expoの機能がトレードオフになります。たとえば、QRコードで共有することはできません。
  • ExpoKitに排出する場合、その時点でExpoKitでサポートされている反応ネイティブバージョンに制限されます。
  • ExpoKit(ネイティブモジュールを使用)でのデバッグは、2つの言語と異なるライブラリが混在しているため(公式のExpoサポートはもうありません)、はるかに複雑です。

最も重要な点を要約できるといいのですが。ポイントを追加してください。

ソース:https : //code.tutsplus.com/tutorials/detaching-expo-apps-to-expokit-concepts--cms-30661 https://github.com/react-community/create-react-native-app/ issues / 516#issuecomment-373629114 https://docs.expo.io/versions/latest/guides/detach.html(一般的な公式ドキュメント)


1
expoを使用するもう1つの大きな欠点は、アプリのサイズです。最小サイズは、iOSアプリの場合は最大25 MB、Androidアプリの場合は最大20 MBです
Pratik Singhal 2018

3
これはすでにエキスポプロジェクトの欠点として言及されています:「標準のHello Worldアプリは約25MB大きい(統合ライブラリのため)」
Benjamin Heinke

1
長所と短所の明確な画像をありがとう@BenjaminHeinke。ネイティブアプリを反応させるためにエキスポを採用するという決定により、すでに不利な点#2を経験しています。このため、Appseeと統合できません。これに対する回避策はありませんか?
CoolDocMan 2018

1
テストのためにデバイスをUSBに接続する必要はありません。最初のコンパイルとインストールのみをUSB経由で行う必要があります。後でWi-Fiを使用できます!ただし、ネイティブに変更を加える場合は、再コンパイルが必要になります。
rszalski

28

Brent Vatneの答えは結構ですが、いくつか詳細を追加したいと思います。


ExpoはReact NativeのAPIサーフェスを拡張します

React Nativeは、必要なすべてのJS APIをそのまま使用できるわけではなく、ほとんどの基本的な機能のみを提供します。React Native開発者は、Android Studio / XCodeを使用して追加のネイティブライブラリをリンクすることが期待されています。ExpoはRNを強化し、最も一般的なニーズに必要なすべてのJS APIを提供することを目的としています。これは基本的に、1つのライブラリExpoKitにパッケージ化された、明確に定義された品質のネイティブライブラリのセットです。これらのライブラリは、実際にはRNの世界にすでに存在し、ExpoKitに統合されている場合があります。

また、Hello Worldアプリのサイズが大きくなるため、ExpoKitにすべてのライブラリを含めることはできません(これにより、フラストレーションが生じる可能性があります)。ほとんどのアプリで。

Expoは無線のJSアップデートを提供します

他のシステム(CodePush ...)と同様に、Expoはアプリを無線で更新するシステムを提供します。これは、CDSにJSバンドルをアップロードすると、モバイルアプリが次の起動時に新しいJSを自動的にダウンロードして使用することを意味します(ストアからのパブリケーション/レビューを要求する必要はありません)。

Expoは、CDNでJSバンドルをアップロード/管理するためのCLIツールを提供します。開発の場合は、CDNになり、localhostでJSバンドルをホストすることもできます。XDEは、CLIの視覚的なラッパーにすぎません。

Expoは一般的なクライアントを提供します

Expoクライアントは、Expoと互換性のあるすべてのアプリのロードを許可する汎用クライアントです。すべてのExpoアプリはまったく同じネイティブランタイム(RN + ExpoKit)を共有します。唯一の違いは、提供するJSです。アプリストアに公開するExpoアプリには、JSバンドルURLがハードコードされています。Expoクライアントは特定の方法で構築されているため、QRCodeをスキャンするかURLを提供することにより、JSをロードするURLを選択できます。

このクライアントは、localhostからJSバンドルを読み込むこともでき、開発エクスペリエンスをより簡単にすることができます。XCodeやAndroid Studioが必要なく、最初のHello Worldを電話で実行する方がはるかに高速になります(数時間から数分)。Macがなくても実際にiPhoneで開発でき、セットアップには2分かかります。

Expo SDKはアップグレードできるため、Expoクライアントには互換性レイヤーが含まれているため、最新の5つのSDKバージョンを実行できます。

Expoはビルドサービスを提供します

すべてのExpoアプリは同じネイティブコードを共有しているため、Expoはこれらのアプリを簡単に構築できます。彼らはクラウド構築サービスを作成しました。

Expoによって作成された2つのアプリを差別化する主なものは、アプリが実行するJSバンドルをダウンロードすることになっているハードコードされたURLだけです。

Expoは他にもいくつかのことを行います。たとえば、アプリアイコン、向き、権限、APIキーをセットアップする宣言的な方法を提供したり、プッシュ通知のセットアップを支援したり、プロファイルをプロビジョニングしたりします。多くの設定は、アプリのビルド時にハードコーディングする必要があり、無線で変更しないでください。

Expoは、ネイティブに反応することです。

React NativeはCordovaに似ています。これは同じビューテクノロジー(ネイティブvs Webビュー)ではありませんが、どちらもJavaScriptからネイティブ機能を制御でき、どちらもプラグインシステムを提供するため、開発者は新しいJS /ネイティブバインディングを簡単に追加できます。

PhoneGapはExpoに似ています。両方とも、事前定義された追加のネイティブプラグインのセットを使用して、基盤となるプラットフォームのraw APIを強化しようとします。PhoneGapはビルドサービスも提供し、承認されたプラグインを使用している限り機能する汎用クライアントを備えています。

結論

ご覧のとおり、Expoはツールのセットです。最後に、モバイルプロジェクトを簡単に開発、共有、およびストアに公開することができます。これは、PhoneGapのエクスペリエンスとよく似ています(ただし、混乱が少なく、はるかに優れています)。

以下の2つの場合を除いて、新しいReact NativeグリーンフィールドプロジェクトにはExpoをお勧めします。

  • Expoで利用できず、すぐには利用できないAPIが必要であることがすでにわかっている
  • あなたはアプリのサイズにとても気を配っています(HelloWorldはExpoKitのサイズが大きいため、25 MBを超えますが、その後は単なるJSであるため、それほど増加しません)

1
ExpoがサポートしていないAPIのリストを見つけようとしています。誰もがこれを見つける場所を知っていますか?
ronnyrr 2018年

@ronnyrr Expoは、JS以外であり、生のRNおよびExpoKitに含まれていないものをすべてサポートしていません。Expoがサポートしていない機能のリストは無限にあります。なぜなら、Expoがサポートしている機能の有限なリストに含まれていないのは、他のすべてだからです。あなたが求めるものが存在することはできません。
Sebastien Lorber

2
@ronnyrrこれはあなたが探しているものだと思います:expo.canny.ioこれは、人気
Evan Bacon

26

Expoの公式ドキュメントで説明されています

ExpoとReact Nativeの違いは何ですか?

ExpoはRails for React Nativeのようなものです。多くの設定が済んでいるので、すぐに始めて正しい道を進むことができます。

Expoでは、XcodeやAndroid Studioは必要ありません。JavaScriptは、使い慣れたテキストエディター(Atom、vim、emacs、Sublime、VS Codeなど)を使用して作成するだけです。Mac、Windows、LinuxでXDE(デスクトップソフトウェア)を実行できます。

Expoですぐに使える機能のいくつかを次に示します。

iOSおよびAndroidのサポート

Expoで記述されたアプリは、そのままiOSとAndroidの両方で使用できます。それぞれについて個別のビルドプロセスを実行する必要はありません。iOSまたはAndroid(またはコンピューターのシミュレーターまたはエミュレーター)のApp StoreからExpo ClientアプリでExpoアプリを開くだけです。

プッシュ通知

プッシュ通知は、単一の統合APIを使用して、iOSとAndroidの両方ですぐに使用できます。APNSとGCM / FCMをセットアップしたり、ZeroPushを構成したりする必要はありません。これを今のように簡単にできると思います。

フェイスブックログイン

これを自分で適切に設定するには長い時間がかかる場合がありますが、Expoでは10分以内に機能するはずです。

即時更新

XDEで公開をクリックするだけで、すべてのExpoアプリを数秒で更新できます。何も設定する必要はありません。このように機能します。Expoを使用していない場合は、Microsoft Code Pushを使用するか、この問題に対する独自のソリューションを導入します

資産運用管理

画像、動画、フォントなどはすべて、Expoを使用してインターネット上で動的に配布されます。これは、それらが即時更新で機能し、その場で変更できることを意味します。Expoに組み込まれているアセット管理システムは、リポジトリ内のすべてのアセットをCDNにアップロードするので、誰でも簡単にロードできます。

Expoがない場合、通常行うことは、アセットをアプリにバンドルすることです。つまり、アセットを変更することはできません。または、自分でアセットをCDNまたは類似のものに配置することを管理する必要があります。

新しいReactネイティブリリースへの更新がより簡単に

Expoの新しいリリースは数週間ごとに行われます。アプリバイナリの再構築について心配することなく、必要に応じて古いバージョンのReact Nativeをそのまま使用することも、新しいバージョンにアップグレードすることもできます。自分の時間にJavaScriptをアップグレードすることについて心配することができます。

しかし、ネイティブモジュールはありません…

Expoの最も制限的なことは、ExpoKitを切り離して使用しないと、独自のネイティブモジュールを追加できないことです。


2
私はWindows 8でexpoを使用しています。デバイスでアプリを直接実行できるようにQRコードを生成する方法。
Prasanna 2017

1
私はWindowsでは試していませんが、どのシステムでも同じように見えるはずです。QRコードは、Expo XDEコンソールまたはexp startコンソールコマンド出力で自動的に生成されます。
ガムキン

1
$ prasanna同じネットワーク上に電話と開発マシンがないため、QRコードが表示されない場合があります。たとえば、自宅で仕事をしている場合は、電話がホームネットワーク上にあることを確認してください。その他...
ccalvert 2017年

7

EXPO CLI

長所:-

 1. No need to install Android studio and Xcode for start building mobile app.
 2. No requirement of high configuration machine for development.
 3. Mobile ui easily check on both devices android and iphone using barcode scanning.and some time you can check on online iphone and android simulators.
 4. fast development.

短所:-

 1. Native dependency can not add on expo because expo project don't have ios and android folder so here expo is bounded.
 2. Making apk and ipa are to difficult  using expo.
 3. Size of the apk/ipa is huge

React Native Cli

長所:-

 1. Easily add native dependency for android and ios because this project structure have ios and android folder.
 2. Apk and ipa build making is easy rather than expo.

Note":- React Native cli is right approach to started work on react native framework.

短所:-

1. High configuration machine is require.
2. Adding dependency some time more difficult but good.
3. Required basic knowledge of android folder structure and ios folder structure but from this learn more things.

要件に応じて、任意のアプローチを優先できます。


2

ここで、Expoが古いバージョンのreact 16.5を使用しているため、新しいフック機能の使用が禁止されていることに注意してください。Expoを使用する場合は、バージョン管理に注意してください。奇妙なエラーが発生する場合は、say react-navigationの古いバージョンを16.5バージョンで使用する必要があります。


expo updateExpoが管理するほとんどのパッケージの互換性のあるバージョンを取得するのにかなり優れています。現時点では、React Navigationを更新するとは思わないが、そのライブラリはExpoが実際に提供している。個人的には、React NavigationとExpoの間で互換性の問題に遭遇することはめったにありません(ベータ版を使用するときにいくつかの問題が発生したと思います)。ただし、Expoで管理されていないパッケージとの互換性の問題がさらに発生する場合があります。
クリスチャンジュス

2

expoとreact-native-cliの長所と短所に関する答えは完全です。私の個人的な経験として別の点を述べたいと思います。Expoには、デフォルトでプロジェクト内に多くのモジュールが含まれており、それを使って作業するのが簡単になります。ただし、ビルドandroidiosバージョンのサイズが非常に大きいため、生産段階では大きな問題があります。たとえば'Hello World'apkファイルが1つのページの場合、ファイルサイズは約になり19 MBます。同じプロジェクトがreact-native-cliにあると、アプリのサイズはになり6 MBます。

個人的には、商用アプリを開発したい場合は、expoの使用はお勧めしません。


これは、万博アプリが本番環境に対応していない十分な理由だとは思いません。さらに、これは以前の回答で完全に説明されています
Dawoodjee

1

Expoで動作する1年以上の経験があります。マップの実装は簡単なので、アプリのサイズがExpoを使用する上で重要でない場合は、Reactネイティブよりも簡単にプッシュできますが、プロジェクトの最後に公開したい場合Google Playまたは別のストアのアプリでは、APK Reactネイティブの一部の権限を削除する必要がありますが、すべてを変更できますが、プッシュ通知やマップなどの一部のライブラリをインポートするには、これらのライブラリを手動で追加する必要があるため、いくつかの課題も必要ですAndroidおよびiOSプロジェクト


-1

expoは、React Nativeを中心に構築されたツールチェーンで、アプリをすばやく起動するのに役立ちます。React Nativeアプリと、サードパーティのネイティブReact Nativeコンポーネントで通常利用できるインターフェースとサービスの開発とテストを簡素化する一連のツールを提供します。Expoでは、それらすべてをExpo SDKで見つけることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.