SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ExpoとEASで始める快適モバイルアプリ開発

ExpoとEASで属人的なリリース作業を脱却する。バージョン管理やEAS Metadataによるストア情報管理まで

ExpoとEASで始める快適モバイルアプリ開発 第12回

バージョン番号をEASに任せる

 提出が無人で進むと、「ビルド番号は誰が上げるのか」が気になります。前回は、EASが番号を管理すると述べました。その中身を見ていきます。

 ストアは同じビルド番号を受け付けません。更新を忘れると、ビルド成功後に提出だけが弾かれます。「次はいくつか」を人に尋ねる状況は、リリース担当者に暗黙知が集中する典型です。

 version1.0.0など利用者が見るマーケティングバージョンで、人間がapp.jsonで決めるため、autoIncrementの対象外です。iOSのbuildNumberとAndroidのversionCodeは、同じversion内の提出物を区別する連番で、対象はこちらです。autoIncrement: trueでもversionは変わりません。

 appVersionSource: "remote"は、連番の真実の源をapp.jsonからEAS側へ移す設定です。pull忘れやgitコンフリクトを避け、別マシンでも共有カウンタでビルドできます。

 まず、EAS側の現在値を確認します(リスト3)。

[リスト3]EAS側のビルド番号を確認
eas build:version:get --platform all

 環境解決メッセージが4行出ますが、見るのは最後の2行です。AndroidのversionCodeは1、iOSのbuildNumberは4です。カウンタはプラットフォームごとに独立しています(図1)。

図1:EAS側のビルド番号を確認した結果
図1:EAS側のビルド番号を確認した結果

 実ビルドの番号も確認します。第10回で紹介したeas build:listを、ここでは番号確認に使います(リスト4)。実測では1件あたり16フィールドが並びますが、ここではBuild number、Version、Commitの3項目を抜き出しました(表1)。3件ともProfileはproduction、Distributionはstore、SDKは57.0.0です。その他は誌面の都合で省略しています。

[リスト4]iOSのビルド履歴を確認
eas build:list --platform ios --limit 3
表1:出力から抜き出したビルド番号とコミット
Build number Version Commit
4 1.0.0 08659bbad9fca09731e29cf491209b82840a16b9
3 1.0.0 08659bbad9fca09731e29cf491209b82840a16b9
2 1.0.0 08659bbad9fca09731e29cf491209b82840a16b9

 4、3、2と並び、最新の4はeas build:version:getと一致します。Commitは同一なのでコードは1行も変わっていないわけですが、ストア側はアップロードごとに一意の・固有のビルド番号を要求してきます。そのため、再提出するごとに採番が必要になるのです。

 では、すでにストアへ提出を重ねてきたアプリを、後からEAS管理へ移す場合はどうでしょうか。ストアが受け取っている番号より小さいところからEASが数え始めては、提出が弾かれてしまいます。そこで、番号を明示的に設定します(リスト5)。

[リスト5]EAS側のビルド番号を明示的に設定
eas build:version:set
✓ Select platform › iOS
Project @nkzn/eas-sandbox with bundle identifier "io.github.nkzn.eassandbox" is configured with buildNumber 4.
? What version would you like to set? ›

 プラットフォームを選び、現在のbuildNumber4を表示してから入力を待ちます。書き換え前の値を確認でき、小さい値の誤設定を防げます。環境解決メッセージは省略しました。

 eas build:version:syncは少し事情が異なります。実行すると、プラットフォームごとに「The remote value for the iOS buildNumber is 4, but it was not synced to the local project. This command has no effect on projects using managed workflow.」という警告が表示されました。マネージドワークフローではネイティブプロジェクトを手元に持たないため、同期先そのものが存在しないのです。本連載のサンプルもこの構成です。リファレンスを見て実行し「動かない」と戸惑わないよう、ここで触れておきます。

 getsetはリモート値の読み書き、syncはbareやprebuild済みなどネイティブプロジェクトを持つ構成向けです。番号をEASに任せ、AndroidのversionCodeも含めてExpoのワークフローからリリースできます。

次のページ
EAS Metadataでストア情報を管理する

この記事は参考になりましたか?

ExpoとEASで始める快適モバイルアプリ開発連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川 幸哉(ナカガワ ユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/29683 2026/09/18 09:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー