【React Native】EAS buildでconfigファイルが読み込まれないときの対処法

2023年1月4日に廃止になるexpo buildコマンドに変わり、現在、eas buildコマンドを介したアプリケーションのビルドが推奨されています。そこで、私もEAS buildを初体験してみようと思ったのですが、思わぬエラーに詰まってしまったので紹介しておきます。

今回起こったこと

eas buildコマンドでアプリをビルドしようとしたところ、下記のエラー文がPrebuildの段階で出ており、ビルドを完了できませんでした。なお、この時点でexpo build:andriodコマンドによるビルドは問題なく動きました。

[05:49:21] 📝  Android package Learn more: https://expo.fyi/android-package
[stderr] [05:49:21] Input is required, but Expo CLI is in non-interactive mode.
[stderr] Your project must have a `package` set in the Expo config (app.json or app.config.js).
[stderr] See https://expo.fyi/android-package
bash exited with non-zero code: 1
So, I checked package section in my app.config.js, but the package section is included.

エラー文を読んだところ、単に「app.jsonまたはapp.config.js内にpackageに関する部分が含まれていないよ!」ということを示していることが分かります。「あれ?書いてあるはずだけどな…」と思ったのですが、一応今回のプロジェクトのapp.config.jsを調べてみました。

そのときのapp.config.jsは↓のようになっていました。

export default {
  name: 'SUEP',
  icon: './assets/suep_icon.png',
  version: process.env.MY_CUSTOM_PROJECT_VERSION || '1.1.3',
  orientation: 'portrait',
  splash: {
    image: './assets/splash.png',
    resizeMode: 'contain',
    backgroundColor: '#FFFFFF',
  },
  userInterfaceStyle: 'automatic',
  assetBundlePatterns: ['**/*'],
  updates: {
    fallbackToCacheTimeout: 10000,
  },
  android: {
    package: 'com.tpot.suepapp',
    versionCode: 12,
    permissions: [],
    adaptiveIcon: {
      foregroundImage: './assets/suep_icon.png',
      backgroundColor: '#FFFFFF',
    },
  },
  hooks: {
...secret...
  },
  plugins: ['sentry-expo'],
  extra: {
...secret...
  },
};

ここで分かる通り、androidセクション内にpackageセクションが間違いなく含まれています。

追加でさらに調べてみたところ、eas buildの実行結果内のRead app configセクションの結果がこのように示されていました。 app config section

この画像のnameversionを見て、「app.config.jsに書き込んだ本来のアプリ名やバージョンを読み込めていないのではないか」ということが推測できます。

解決方法

解決方法について色々と調べたのですが、自力で見つけることができず、Expo forumで直接質問してみました。詳細についてはこちらを参照してください。

結果として、eas buildによってアプリのビルドサーバーに送信されるデータは.gitignoreで管理されていることが分かりました。さらに、.easignoreを追加することにより、.gitignoreを上書き可能であることも分かりました。

上記の内容を実際のプロジェクトにも反映することで、無事EAS buildを完了することができました。

最後に

今回の.easignoreによって.gitignoreを上書きできるという仕様はこちらのページまとめられています。