こんにちは!menu株式会社フロントエンドエンジニアの内田です。今回は、OTAアップデートの運用方法を改善したエピソードをお伝えしたいと思います。
OTAアップデートとは
OTAとはOver the Airの略で、モバイルアプリの文脈で言うと、アプリストアへの申請を挟まずに、ユーザーの手動操作なしに直接アプリを更新する方法です。
Expo Class UpdateからEAS Updateへ
私たちのアプリの一部はReact Native+Expoを軸に開発を行っています。そのため、ネイティブコードの変更が発生しない修正をいち早くユーザーに届ける為に、このOTAアップデートを使うことがあり、長年、Expoが提供するClassic Updateを利用していました。 このExpo Class Updateを行う作業は、リリース毎に10~20分ぐらい時間を要していて、「バンドルをアップロードするだけなのに、こんなにかかるものなの?」とチーム内から声が上がることもありましたが、長い間見直しされずに放置されていました。
しかし転機が訪れます。2024年2月のこのサービスが廃止となり、expoが新たに提供するEAS Updateへの移行を余儀なくされます。 expo.dev EAS(Expo Application Service)とは、Expoが提供するクラウドサービスです。開発からデプロイまで網羅した様々なサービスを提供しており。今回のEAS Updateはその一部です。
Expo Class UpdateからEAS Updateの違い
OTAアップデートを行うという点では共通していますが、違いがたくさんあります。が、私たちのプロジェクトに対して、特にインパクトが大きかったのは以下です。
release-channel vs channel & branch
Classic Updateでは、商用や開発などの環境ごとに異なったバンドルを反映するためにrelease-channelを指定してOTAアップデートを行います。
EAS Updateには、その代わりにchannelとbranchという概念が導入されています。branchが実際にバンドルが保管される場所。channelはbranchを指定することで、アプリがどこからバンドルをダウンロードして更新するかを決めることができます。
正直なところ、シンプルな仕組みのClassic Updateに比べて、EAS Updateは、初見ではややこしくて理解するのに時間がかかりました。
より効率的なリリースへ
この新たな仕組みを利用することでOTAアップデートの”窓口”と”保管場所”を分けることができます。 それにより、以下のように作業を分担できるようになります。
リリース前日など、事前にバンドルをbranchにアップロード
リリース当日はchannelとbranchの紐付けを変える(アプリに反映)
リリース作業を分割し作業の効率化ができることになりました!作業チェックを挟みやすくなり、事故の防止を図ることができます。 実際に、事前作業時のチェックによって事故が未然に防止できたケースなどもあり、すでに効果が出てきています。
時間のかかるアップロード作業を事前に済ませておくことで、 当日は、紐付けを切り替えだけになります! 当日作業を数分もかからずに作業完了することができるようになりました。 リリース後の検証作業にその分早く取り掛かることができるので、プロジェクト全体にもポジティブな影響があったと感じています。
更なる進化
EAS Updateに移行し、OTAアップデート作業を分割することで、リリース作業を効率化することに成功しました。 しかし、これは序章です。私たちのアプリはいわゆるbare workflowを採用しているので、EASの旨みを最大限活かせていません。 今後も、EASの諸々の機能の採用なども積極的に検討していきつつ、運用面での改善も行なっていきたいです。
EASも続々と新機能などが追加され、より使いやすいサービスへとなっていっているのを感じています。
今後のEASの動きにも期待です!
Expo・EASについてはこちらでも記事にしてあるのでぜひチェックしてください! techblog.reazon.jp