こんにちは、皆さん!

今回は僕が愛してやまないExpoというライブラリを紹介したいと思います。

トピック


Expoとは?
Expoのロゴ

最初にそもそもExpoってなんなのか説明していこうと思います。

React Nativeが出現してからモバイルアプリの開発をJavascriptでできるようになりました。その書き方は名前の通り、Reactに似ています。ただ、React NativeだけだとまだAndroidとiOSそれぞれ固有の設定などを行う必要がある場合があります。これらはandroidフォルダーとiosフォルダー内にそれぞれ存在します。

しかし、あまりモバイルに詳しくない人からすると、始める際の壁になりかねないという問題があります。

そこで、この壁を取り払ってくれたのがExpoというフレームワークです。具体的にはReact Nativeの上にもう一層レイヤーを足して、AndroidとiOSそれぞれ固有の設定をやってくれるというものです。

Expoによる作業の単純化のイメージ図

このようにモバイル開発をスタートする上での負担を減らしてくれて、僕みたいなモバイル初心者でも簡単にモバイル開発に着手できるようになったのはExpoのおかげなのです。

React Native自体はFacebook社のものとなっていますが、Expoは別で開発されたものになります。今ではその使いやすさゆえ、React Nativeの公式ガイドのチュートリアルではExpoが採用されています。

*なお、ExpoとReact Nativeはそれぞれ別々のガイドが存在しますので、どちらで開発するかによってどちらのガイドを見るのかを決めましょう!


Expoを使うメリット

基本的な紹介を終えたところで、本題のExpoのメリットについて個人的な見解を述べていきたいと思います。


WindowsユーザーでもiOS開発ができる!

Expoを使って、僕が一番感動した部分でもあります。基本的にApple製品はかなり排他的な方針を取っていて、元々iOS開発をするにはMacは必須でした。しかし、このExpoを使うと、モバイル上でコードをテストできるため、iPhoneさえ持っていれば、データを送信してきてiPhone上で確認できます

日本はiPhoneユーザーが多く、たとえ、Macを持っていなくても開発を断念する必要はないので、新しい道を開いてくれました。

*ただし、アプリをストアに載せる際にはMacが必要になります!!

ですので、ストアに載せる際だけちょっと友達のMacを借りたり、Macが使えるカフェなどに行けばいいです。(Xcodeが入っていることが必須条件です)

フォルダー構造がかなりシンプル!

こちらは先ほども少し触れましたが、AndroidとiOS固有のフォルダーがExpoには存在しないため、それらを編集するための知識は必要になりません。その意味で本当にJavascriptさえ知っていればいいと言っても過言ではありません。

Expo(左)とReact Native(右)のフォルダー構造比較

簡単にストアアップロード用ファイルが生成できる!

実際にアプリをストア上にリリースしたい時も特に設定する必要のあるものはなく、あとはAndroidとiOSそれぞれ用のコマンドを走らせれば、簡単に.apkファイルと.ipaファイルを生成できます(それぞれAndroidとiOSのストアアップロード用ファイル)。

expo build:android
expo build:ios

試作品の公開が簡単にできる!

次にExpoは無料ユーザー登録しておくことで、オンライン上にご自身の作品をアップロードできます。これはストアにあげるのとは異なり、実際のアプリではないのですが、Expoのスマホアプリを通して、そのアプリを一時的にダウンロードして、Expoアプリ内で使用することができます。

これは一緒に開発している仲間と簡単にシェアしたり、誰かに急ぎで自分の作ったアプリを見せたい時(たとえば、面接とか)に役に立ちます(ストアにアップロードしてから承認されるまでに時間がかかります)。


Expoを使うデメリット

次にこのように開発を簡単にしてくれたExpoなんですが、レイヤーを追加することで発生するデメリットについても見ていきましょう。


React Nativeで使えた機能が使えない場合がある

基本的にExpoで働いている人でなければ、作られるReact NativeのライブラリはReact Native向けに作られます。その中にはExpoに対応していないものもあります。

たとえば、無線でスマホと他のものをつなげてくれるBluetoothはまだExpoでは使用できません。

このようにまだExpoにない機能は少なくなく、公式のフォーラムが用意されていて、皆がそこで次なる機能の提案をしています。

Bluetoothに関するフォーラム↓

https://expo.canny.io/feature-requests/p/bluetooth-api

各デバイスごとに細かいパフォーマンスの調整をすることができない

これに関してはiosとandroidのフォルダーがなくなった分、そこで各デバイスでのパフォーマンス向上を目的に書いていたコードがExpoでは書けないためにさらなる向上をすることができないという問題です。

ここら辺が大きな原因として多くの会社がまだExpoを本格的なテックスタックとして使用していない印象を受けます。

自社内で既に多くの開発者がモバイルのネイティブコードに精通している場合は、その本領を発揮できない分、Expoの導入は避けた方が望ましいかもしれません。


Deep Linkを使用することができない

Deep LinkというのはよくメールなどにあるURLを押した際に、ブラウザではなく、「アプリで開きますか?」というポップアップを見たことがあると思いますが、それのことです。

これができることで、ユーザーをブラウザではなく、よりアプリの方に流すことができるので、とてもキーになる一つの要素ではないかと思います。しかし、残念ながら、現在のところ、Expoではこちらを使用することができませんので、これがかなり大事になってくる場合はExpoを断念しましょう。


なお、ExpoにはExpoKitというExpoを崩したものを生成する機能もついており、それによって、Expoでは使えなかったが、React Nativeで使えるものが使えるようになりますので、最初はExpoで開発し始めて、後に必要になったら、React Nativeに移行するというようなこともできます!


まとめ

今回はExpoとReact Nativeを比較したときのメリット、デメリットについて主に紹介させていただきました。少し主観的な部分も入っていますが、これからExpoを使おうかなと考えている人たちにとって参考になればいいかなと思います。この中で紹介されていなかったものがありましたら、またコメントの方で教えていただけると幸いです。

下記のは僕がExpoだけで実際に作った公開済みのアプリです。よかったら見ていただけると嬉しいです!


皆さんの役に立つことを願います!
では、また次回まで✌
記事更新はツイッターで告知するので、ツイッターの方でもフォローお願いします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です