💡 Tips

eas build --localで設定ファイルが反映されない原因はgit untracked

eas build --localapp.config.ts を編集したのにビルド結果に反映されない——。手元では正しいのに、ビルドだけ古い挙動になる。結論を先に言うと、eas build --local は git archive ベースでプロジェクトをコピーするため、git に未追跡(untracked)なファイルはビルドに含まれない。コミットさえすれば直る。地味だが原因を知らないと延々悩む沼だ。

何が起きているか

eas build --local は、カレントのファイルをそのままコピーしているわけではない。内部的には git archive 相当の仕組みで、コミット済みの内容をテンポラリディレクトリに展開してからビルドする。

そのため、次のようなファイルはビルドに乗らない。

  • 新規作成してまだ git add していない app.config.ts
  • .gitignore で除外しているファイル
  • 編集したがコミットしていない変更分

「ローカルにはあるのに、ビルドでは存在しないかのように振る舞う」のはこれが理由だ。

コピー先を確認する

実際にどこへ展開されているかは、macOS なら次の場所にある。

/var/folders/.../eas-build-local-nodejs/<UUID>/build/

ここを覗くと、未コミットのファイルが含まれていないことが確認できる。「手元とビルド環境の中身が違う」という仮説を、目で見て裏付けられる。

回避策: ビルド前に必ずコミットする

確実なのは、ビルド対象のファイルをすべてコミットしてから eas build --local を走らせることだ。

git add app.config.ts credentials.json eas.json
git commit -m "chore: ビルド設定を更新"
eas build --profile preview --local

CI に組み込むなら、ビルド直前に「未コミットの変更がないか」をチェックするガードを入れておくと事故が減る。

if [ -n "$(git status --porcelain)" ]; then
  echo "未コミットの変更があります。コミットしてからビルドしてください。" >&2
  exit 1
fi

関連する落とし穴: credentials.json

ローカル署名(credentialsSource: "local")で credentials.json を使う場合も同様だ。新規作成したまま未コミットだと、ビルドに含まれず署名に失敗する。証明書まわりの設定ファイルも忘れずコミットしておこう。

さらに学ぶなら

EAS / Expo のビルドパイプラインは「ローカルと CI で前提が違う」系のハマりが多い。React Native のアプリ開発を本気で仕事にしたいなら、こうした実務知識まで含めて体系的に学べる環境で一気に底上げするのが近道だ。

📚 おすすめ書籍

React Native & Expo 実践入門

EASビルドからストア申請まで網羅した実践書

Amazonで見る →

まとめ

  • eas build --local は git archive ベースなので untracked ファイルは含まれない
  • 設定が反映されないときは、まず対象ファイルをコミットする
  • 展開先(/var/folders/.../eas-build-local-nodejs/.../build/)で中身を確認できる
  • CI では「未コミット変更ガード」を入れると事故を防げる