💡 Tips

EAS Buildでプロファイルごとに証明書を切り替える唯一の実用的な方法

Expo の EAS Build でローカル証明書(credentialsSource: "local")を使うとき、開発用と本番用で異なる Provisioning Profile を使い分けようとして詰まったことはないだろうか。結論から言うと、ファイル名やパスを引数・環境変数で変える方法は公式に存在しない。この記事では、実際にハマって解決した「唯一の実用的な方法」を共有する。

何が問題なのか

eas.json でこう書いたとする。

{
  "build": {
    "preview-dev": {
      "ios": { "credentialsSource": "local" }
    }
  }
}

このとき EAS は 常にプロジェクトルートの credentials.json を固定参照する。プロファイルごとに別ファイルを見に行ってくれるわけではない。つまり「dev プロファイルでは別の証明書を使いたい」というニーズに、設定だけでは応えられない。

解決策: ビルド前にファイルを差し替える

唯一の実用的な方法は、ビルド直前に credentials.dev.jsoncredentials.json にコピーで上書きすることだ。

cp credentials.dev.json credentials.json
eas build --profile preview-dev --local

地味だが、これが公式の制約内でできる現実解になる。CI に組み込むなら、プロファイル名に応じてコピー元を切り替えるスクリプトを一枚かませるとよい。

ハマりどころ: Fastlane の sh は起点が違う

もう一つの落とし穴として、Fastlane の sh コマンドは fastlane/ ディレクトリを起点に実行される。そのため credentials.json を参照するときは、一つ上の階層を指す必要がある。

sh "cat ../credentials.json"

ここを credentials.json と書くとファイルが見つからずに失敗する。地味だが見落としやすい。

eas.json の preview-dev プロファイル設定例

credentialsSource: "local"extends 元から自動で引き継がれないため、各プラットフォームに明示する必要がある点にも注意したい。

{
  "build": {
    "preview-dev": {
      "extends": "preview",
      "env": { "APP_VARIANT": "development" },
      "ios": { "credentialsSource": "local" },
      "android": { "credentialsSource": "local" }
    }
  }
}

また APP_VARIANT のような環境変数は eas.jsonenv で渡すこと。.env はローカルでは読まれるが、EAS のビルド環境では読まれない

さらに学ぶなら

EAS や Fastlane を含むモバイルCI/CDを腰を据えて学ぶなら、体系立った教材で一気に基礎を固めるのが結局は近道だ。実務で詰まる前提知識を先に押さえておくと、こうしたハマりどころでの消耗が激減する。

まとめ

  • credentialsSource: "local" はプロジェクトルートの credentials.json を固定参照する
  • プロファイルごとに証明書を変えたいなら、ビルド前にファイルを差し替えるのが唯一の実用解
  • Fastlane の shfastlane/ 起点なので ../credentials.json と参照する
  • credentialsSource は extends で引き継がれないので各プラットフォームに明示する