🔨

Expo の Expo Application Services (EAS) をざっくりと説明してみる

2021/09/13に公開

React Native でアプリを作る場合は、素の React Native を使う選択肢に加えて、Expo を使う選択肢があります。

その Expo は2020年末ごろに Expo Application Services (EAS) という新サービスを開始しました。私もこのEASを使ってアプリを制作しており、EASを使うようになってから3ヶ月程度経過しました。
本記事では実際に使ってみた中で理解したことを中心にざっくりとした説明をしようと思います。
なお、従来のExpoビルドとの比較が主になります。

※ 本記事を読んで、EAS についてもっと詳しく知りたくなった方は 公式ドキュメント がオススメです。私がこの記事を書いた段階では web 上に EAS に関する日本語記事は少なかったので。また、EAS はまだ Preview 段階なためコマンドのAPIが頻繁に変わります。公式ドキュメントは常に最新の情報が記載されているので安心できると思います。

EAS Build と EAS Submit

EAS は

  • EAS Build
  • EAS Submit

と呼ばれる2つのサービスから構成されています。

EAS Build

EAS Build は Expo 製のアプリをクラウド上でビルドしてくれるサービスです。EASではない従来の Expo CLI が提供している expo build コマンドを置き換えた物になります。

EAS Build は iOS/Android それぞれのバイナリをビルドするための環境作りやストアに提出するために必要な署名作業などを開発者の代わりにやってくれます。そのため、開発者は iOS/Android それぞれのビルド手順や署名方法などを知らなくてもアプリを作ることができます(これは従来の expo build でも一緒)。

EAS Build を従来の expo build と比較すると、

  • 成果物のサイズを削減できる(ほとんどのケースにおいて)
  • ネイティブコードを含むライブラリも使用できる

という特徴があります。ざっくりと背景を説明すると、従来のビルド方法では、プロジェクト内で使われていないライブラリのコードを含む全 Expo SDK を成果物に入れていました。しかし EAS Build では実際に使われているライブラリのコードだけを成果物に入れているので、成果物のサイズが小さくなることが期待されます。また、従来ビルドでは Swift,Objective-C/Kotlin,Java のコード(ネイティブコード)を含むライブラリは使えなかったのですが、EAS Build ネイティブコードを含むライブラリも使えるようになりました。例えば、react-native-blurhash も使えます。
※技術の詳細を知りたい方には こちらの公式ブログ記事 が参考になると思います。

ちなみに私が作っているアプリでもアプリサイズ削減の効果は抜群でした。ビルド方法を切り替えた前後で比較すると、 77MB→30MB と半分以下!のサイズになっていました。

EAS Submit

EAS Submit は成果物のアプリを Apple App Store および Google Play Store に提出するサービスです。EAS Build で作ったアプリを提出することがメインのユースケースとして想定されているのだとは思いますが、従来のビルドで作ったアプリやローカル環境で作ったアプリも同じように提出できるそうです(実際に試したことはありません)。

EAS Submit はクラウド上で動くので、Windows/Mac/Linux のどの環境からでも実行でき、もちろんCI環境から実行することも可能です。

EAS を使う方法

EAS は現在のところ Priority Plan 契約済ユーザだけ が使えるようになっています。通常の Expo は無料で使えますが、EAS を使うには有料契約が必要です。チームで開発している場合はプロジェクトのオーナーが有料契約をしていれば、残りのメンバーは契約無しのアカウントであってもEASが使えます。

なお、Expo は Priority plan 登録後初めの1ヶ月は料金が発生しません。無料期間内であっても EAS は使えます。

EAS を使ってみた感想

次に、約3ヶ月間 EAS を使ってアプリ開発をしてみた感想を紹介しようと思います。

従来のビルドからの乗り換えは思ったより簡単

この EAS が発表された当時は Expo の Bare ワークフローを使ったアプリでないと、EAS Build を使うことができませんでした。私は Expo の Managed ワークフローを今も使っているので、発表直後は EAS を使えなかったこともあり、難しい印象を抱いていました。
しかし、Expo SDK 41 以降では Managed ワークフローのアプリも EAS でビルドできるようになりました。
今では公式ドキュメントに Migrating from "expo build" という記事も用意されています。私の場合は、 eas build:configure を一度実行するだけで EAS Build でアプリをビルドできるようになりました。

API は突然変わる

EAS は2021年9月現在プレビュー機能です。CLIのAPIが前触れもなく突然変わることがあります。実際私も、eas submit の引数オプションが変わって突然CDが動かなくなったという経験をしました。まだ発展途上な技術なので仕方がないですね。

Forum が便利

これは EAS に限った話ではないですが、開発者が質問をできる場として、Forum という機能を Expo が提供してくれています。 この中には EAS についての質問をまとめたカテゴリーも準備されています。 EAS はまだ発展途上なため、予想外のエラーが起きることもありますが、Forum を見ると解決策が見つかることも多いです。 Expo の開発者の人たちも積極的に Forum を見ているらしく、質問を書き込むとすぐに返事がきました。

おわり

React Native Matsuri というイベントにて本記事の内容を喋りました。登壇資料へのリンクも置いておきます。 Speakerdeck

Discussion