207 Tech Blog

テクノロジーで物流を変える 207 (ニーマルナナ) 株式会社のテックブログ

EAS Build を使っている話

こんにちは。207でソフトウェアエンジニアをやっている岸田 (id:ryo-rm)です。 207では配送員の方向けのアプリ TODOCUサポーター を提供しており、React Nativeで開発しています。

今回は2020年の末頃にリリースされたExpo Application Services (EAS) について話します。

解決したかった問題とEAS build

207では Expo の Bare Workflow を利用しています。
2020年末にアプリ内課金が必要になり expo eject をしましたが、Appleの証明書まわりで問題が起きたり、Xcodeのバージョンでビルドできなかったりいろいろ問題が起きるようになりました。

特に、207ではリリース前にQAを行うようにしており、機能実装後は実機テストを行っているので、開発者側でビルドを行う必要があります。

そんな折に EAS BuildがFeature Previewになり 、Expoの Priority Plan にも入っていたのでEAS Buildの導入をしました。

EAS とは

Expo Application Services はExpoが提供している機能で、以下の3つの機能(現在は2つ)があります。

EASの3つの機能
EASの3つの機能

  • EAS Build: アプリのビルド
  • EAS Submit: App Store / Google Play Storeへビルドしたバイナリの送信
  • EAS Update: Over the Air (OTA) アップデート

207では現在 EAS Build をヘビーに利用しています。

EAS Build

利用方法は 公式のドキュメント が充実しているのでそちらに譲るとして、207でおこなっていることについて書きます。

ビルド結果の画面
ビルド結果

EAS Build の slack 通知

ビルド結果の通知先エンドポイントを指定できる のですが、webhookを受けるサーバーを用意する必要があったので、公式ドキュメントに記載のコードを少し改変してSlack通知を行うサーバーを作成しました。

ソースコードは公開しています。
https://github.com/ryo-rm/eas-slack-build-notify (ちゃんとREADMEを記載していないので、後ほどちゃんと整理します..)

Slackの画面
Slackの画面

以下のポイントがあります。

  • QRコードが投稿される
  • ビルドした人にSlackでメンションが来る

QRコードスマートフォンでスキャンするだけでインストールできるようにしたかったため実装しています。
iOSの場合は、EASのビルド結果画面に出るQRコードと同じように、スキャンしたらインストールが始まり、 Androidの場合は、 apkファイルへのリンクになっています。

QRコードをiPhoneでスキャンした画面
QRコードiPhoneでスキャンした画面

Custom Development Clients

2021年7月に Custom Development Client が公開されたので、207でも早速導入して使っています。
この機能はExpo Goアプリに任意のネイティブコードを入れた状態にしたアプリをビルドするもので、カスタムのネイティブモジュール (例えばアプリ内課金やAppsFlyerなどのアナリティクスSDKなど)をインストールしていても Expo Go と同等の開発体験が得られます。
gitの development ブランチにコードがマージされると CI/CI でDevelopment Clientsをビルドするようにしています。
あとはこのDevelopment ClientsをインストールしてPC上で expo start --dev-client をすることで、ネイティブコードを意識せずにどんどん開発を進められるので個人的な生産性は大幅に向上しています。

Expo Custom Development Clientsのスクリーンショット
Custom Development Clients

今後

現状は QA用のビルドでのみ利用しており、本番ビルドは頻繁に行わないため、ローカルの環境でビルドするようにしています。 将来的にはEAS Submitも使ってすべてEASで完結させたいですね。

おわりに

EAS Build について紹介してみました。セットアップも(比較的)簡単で、Expo Managed Workflowでも使えるため、React Nativeを使っていてビルド周りに困っている方は導入してみてはどうでしょうか。
ここに記載した内容以外にも、EAS Buildでnpm hooks がありビルドプロセスの途中に処理を入れられるので、QA用の設定では Analyticsコードのオプトアウトを行うなどの工夫をしています。

最後に、207ではソフトウェアエンジニアを募集しています! React Nativeで開発したい方、物流に興味がある方はぜひ以下のリンクからチラ見おねがいします!!

www.notion.so