⚠️

EAS Buildの警告「cli.appVersionSource」の解消法【React Native + Expo】

警告内容

npx eas build を実行した際、次の警告が表示されました。

npx eas build --platform android
The field "cli.appVersionSource" is not set, but it will be required in the future. Learn more

eas.jsonの中のフィールド、cliセクションにappVersionSourceを設定する必要があるという警告です。これは将来的に必須となるため、設定が推奨されています。

メッセージに最後にある「Learn more」の先が以下のドキュメントです。

https://docs.expo.dev/build-reference/app-versions/

対応方法

追加した内容は以下の通りです。(該当箇所以外は省略)

eas.json
{
  "cli": {
+   "appVersionSource": "remote"
  },
  "build": {
    "preview": {...},
    "local": {...},
    "production": {
+     "autoIncrement": true
    }
  },
  "submit": {...}
}

これで設定が完了し、警告が回避されます。設定値はlocalまたはremoteです。

今回は、公式ドキュメントの推奨に従ってremoteにしました。

production プロファイルのみで自動インクリメントを有効にした理由は、previewlocal プロファイルが関係者のみの共有目的で使われることが多く、バージョン管理の厳密さがそれほど必要ないからだと思っています。

解説

ExpoやEASを使用してアプリ開発する場合でも、バージョン管理は考慮しておく必要があります。適切に管理することで、ストアへの提出などをスムーズに進めることができます。ここでは、Expoプロジェクトでのバージョン管理の仕組みと推奨される設定について解説します。

ExpoやEASを使ったプロジェクトでは、アプリのバージョンには2種類あります。

  • ユーザー向けに見せるバージョン(app.jsonで参照できるversionなど)
  • 開発者向けビルドバージョン(app.jsonで参照できるandroid.versionCode や ios.buildNumber など)

上記2種類に対して、公式ドキュメントで推奨されている設定内容は以下です。

  • ユーザー向けバージョンは手動で更新する
    • app.jsonのversionフィールドに手動で管理する
  • 開発者向けバージョンは自動インクリメントを有効にする

https://docs.expo.dev/build-reference/app-versions/#recommended-workflow

つまり、ユーザー向けに見せるバージョン(app.jsonのversion)は手動で更新し、開発者向けのビルドバージョン(android.versionCodeios.buildNumber)は自動インクリメントに任せる、ということかと思います。

補足「リモートバージョンが設定されていない場合の対応」

リモートのバージョン管理が有効になっていない場合、以下のようにローカルバージョンが使用されるという警告が出ることがあります。

No remote versions are configured for this project, versionCode will be initialized based on the value from the local project.

このプロジェクトはリモートのバージョンが設定されていないため、versionCodeはローカルプロジェクトの値に基づいて初期化されるそうです。これを解消するには、ローカルバージョンをリモートに同期する必要があります。

コマンド以下です。

npx eas build:version:set

https://www.npmjs.com/package/eas-cli#eas-buildversionset

実行すると、リモートバージョンが初期化され、以降は自動でリモートバージョンがインクリメントされるようになります。

バージョン番号の初期値の指定を求められるかもしれませんが、ストアにまだ出していない場合は1でよいと思います。もし既にストアに公開している場合は、ストアのバージョンコードよりも大きな値を入力する必要があります。

chot Inc. tech blog

Discussion