🫥

EAS Update入門(2025版)

に公開

これは

福岡でフリーランスのモバイルエンジニアをしているchikatoです。

これはReact Native Advent Calendar 2025の13日目の投稿です。

https://qiita.com/advent-calendar/2025/react-native

EAS(Expo Application Service)にはEAS Updateという機能があります。
これを使うと、アプリの軽微な修正やバグ修正を、ストア審査なしで即座にユーザーへ届けることができます。
この記事では、EAS Updateの仕組みと制約、基本的な使い方について紹介します。

読者ターゲット

開発環境

  • Expoバージョン
    • 54.0.25
  • EAS CLIバージョン
    • 16.24.1

EAS Updateとは

EAS Updateとはexpo-updatesライブラリを使用するプロジェクトにアップデートを提供するサービスです。

EAS Updateを利用すれば、アプリを審査に通すことなく、緊急対応やバグfixをアプリに提供することができます。


アプリ内でアップデートがあることを表示したり


インストール状況をトラックすることも可能

制約

Expo(React Native)で作成されたアプリは

  1. Javascriptレイヤー(Update Layer)
  • Javascript/Typescript, image assetsなど
  1. ネイティブレイヤー(Native Layer)
  • Objective-C/Swift(iOS)、Java/Kotlin(Android)で書かれたもの

の2層構造になっています。

EAS UpdateはUpdate Layerのみを更新できます。Native Layerに変更がある場合は、新しいビルドが必要です。

Runtime versionについて

ビルドと更新の互換性を保証するために、Runtime versionという識別子が使われます。ビルドと更新のRuntime versionが一致する場合のみ、更新が適用されます。
Runtime versionの更新ポリシーはいくつか用意されています。

EAS Updateを使ってみる

実際に使ってみるとこんなイメージで変更を反映することができます。


アプリを開いた時にアップデートを検知して、変更を反映する

EAS Updateの手順

今回はEASを使って作成したビルドに対してEAS Updateを実行しました。
ざっくり一例です。

  1. EASでDevelopment buildを作成
eas build --platform all --profile development
  1. 修正したものをPublishする
eas update --channel development                                             

Tips

アプリからOTA変更を検知する

Expo Updatesを使うとアプリに新しいアップデートが来たイベントを取得することができます。

Expo Updates内にhooksが用意されているので、そちらを使って、
新しいアップデートがあるかチェックして、ダウンロード、リロードなどが可能です。

/// 例:
const { isUpdateAvailable, isUpdatePending, isDownloading } = Updates.useUpdates();

端末にダウンロードする

await Updates.fetchUpdateAsync();

リロードする

Updates.reloadAsync();

バックグラウンドで変更を検知して、ダウンロードさせる

上記の例だと、アプリがファアグラウンドにいた時だけ適用されますが、Expo BackgroundTaskを使って、バックグラウンドで変更を検知して変更をダウンロードさせることも可能です。

export const setupBackgroundUpdates = async () => {
  TaskManager.defineTask(BACKGROUND_TASK_NAME, async () => {
    const update = await Updates.checkForUpdateAsync();
    if (update.isAvailable) {
      await Updates.fetchUpdateAsync();
    }
    return Promise.resolve();
  });

  await BackgroundTask.registerTaskAsync(BACKGROUND_TASK_NAME, {
    minimumInterval: 60 * 24,
  });
};

プラットフォームを指定する

公開するPlatformを指定することもできます。

/// iOSのみ公開
eas update --platform ios --channel development

/// Androidのみ公開
eas update --platform android --channel development

/// 全てのプロットフォームで公開
eas update --platform all --channel development

アップデートを取り消す

公開したアップデートを取り消すこともできます。

eas update:rollback

前回のアップデートに戻すか、埋め込まれたバージョン(アプリビルド時)のバージョンに戻すか選択できます。

特定のパーセントだけ適用する

段階リリースするためにロールアウトを指定することもできます。

eas update --rollout-percentage=10

割合を変更する場合は eas update:edit、取り消す場合は eas update:revert-update-rollout を使用します。

終わり

意外と簡単にEAS Updateを使うことができることがお分かりいただけたのではないでしょうか?
EASのサービスであるEAS WorkflowやGitHub Actionsを絡めた実際の運用や、EAS Buildを使わずに作成したビルドへのEAS Update適用方法は別記事でまとめたいと思います。

宣伝

福岡を拠点にモバイルアプリ開発をしているフリーランスエンジニアです。
DMでのお仕事のご相談やモバイル開発の情報交換など、お気軽にどうぞ!

https://x.com/maxmax2525425

ソース

Discussion