SOMPO Digital Lab 開発チームブログ

安心・安全・健康に資する開発情報を発信します

EAS BuildでM1インスタンスを使う

SOMPO Digital Lab ソフトウェアエンジニアの木村です。

我々のプロダクトWiTH Healthでは、アプリの開発にReact Native + Expoを使用しています。

Expoとは

ExpoとはReact Native専用のSDKで、これまでReact Nativeだけで開発を進めて行く上で意識しなくてはならなかったネイティブレイヤーの部分を隠蔽してくれるものです。

他にもQRコードを手元のスマートフォンで読み込むだけで、開発中のビルドを実機へシームレスに反映させてくれる機能やOTAアップデート機能、専用のCI/CDサービスを提供してくれるような総合的なフレームワークになっています。

Expoを導入することでモバイルアプリの開発であっても、Webアプリ開発のようにアプリのビルドを待つことなく開発を進めることができます。

EAS Buildとは

EAS Buildは先に述べたExpo専用のCI/CDサービスのことです。

EAS Buildは専用のものだけあってかなり便利に使えるようになっていて、Expoを導入したReact Nativeアプリであれば、ほとんどコンフィグを書くことなくコマンド1つでビルドを開始できるようになっています。

無料プランでは一定時間内に開始できるビルド数に厳しい制限があったりするのですが、課金プランであればストレスなくビルドが可能です。弊社ではProductionプランを契約中です。

本題

EASビルドでは昨年までIntel CPUインスタンスでしかビルドができなかったのですが、今年の1月にM1インスタンスでのビルドが可能になりました。

以下がその時のアナウンスです。

blog.expo.dev

これにより、iOSアプリのビルド時間をかなり短縮できるようです。

今回WiTH Healthでも遅ればせながらM1インスタンスでのビルドに移行しまして、ビルド時間の短縮の恩恵を受けることができたので、その結果をまとめます。

準備

M1インスタンスでもビルドはまだデフォルトではないので、一部コンフィグを変更する必要があります。

EAS Buildを使用しているプロジェクトであれば、プロジェクトのルートディレクトリ内に eas.jsonファイルがあります。このファイルを以下のように修正します。

{
    "cli": {
    "version": ">= 0.52.0"
  },
  "simulator": {
      "developmentClient": true,
      "channel": "development",
      "distribution": "internal",
      "ios": {
        "simulator": true,
        "cocoapods": "1.11.3",
        "image": "macos-monterey-12.4-xcode-13.4",
        "resourceClass": "m-medium" // この設定を追加する
      },
      "android": {
        "buildType": "apk"
      },
    },
    // 以下省略
}

ビルドプロファイル内のiOSの設定に"resourceClass": "m-medium"を追加します。

上記の例では、simulatorという項がビルドプロファイル、その中のiosの項がiOSの設定になります。

ビルド結果

では設定を加えたところで早速ビルドを実施してみましょう。

以下がビルド結果です。

ビルドに掛かったトータルの時間は11分12秒となっていますね。

ではIntelインスタンスの頃はどうだったのかというと、以下のような感じでした。

ビルドに掛かったトータルの時間は25分26秒です。

ビルド時間はおよそ半分になっていますね。

もちろんビルドを開始する時間帯や、並行して同時にビルドしている数によっても変動するとは思いますが、これはなかなかの短縮です。

まとめ

実はM1インスタンスへ移行したのはこの記事を書くより1ヶ月程前でした。

1ヶ月間運用してみましたが、やはり平均してもビルド時間がおよそ半分程度になっているようです。

最近の公式発表によると今後M1/M2インスタンスでのビルドがデフォルトになっていくようです。

blog.expo.dev

最新のバージョンのSDKから有効になっていくようで、古いバージョンを使っているとデフォルトでの対応は遅くなるようです。 ですがその場合でも明示的にコンフィグに記載することで現時点からでもM1/M2インスタンスを試すことができます。

ぜひ1度使ってみることをおすすめしたいと思います。

SOMPO Digital Labでは一緒に働くソフトウェアエンジニアを募集しています

弊社ではReact NativeやExpoを使って高速に開発を進めたいというソフトウェアエンジニアを募集中です!

以下のリンクからカジュアル面談の応募ができるので、興味を持っていただけた方は是非話を聞きに来て下さい。

www.wantedly.com