🍓

eas.jsonって何?

2024/12/08に公開

はじめに

現在のPJがExpoなので、eas.jsonというファイルを触る機会があったので、それが何なのか調べてみました。

Expoとは?

React Native アプリを開発するための便利機能を集めたプラットフォームです。ExpoでPJを作成すると、必要な依存関係や設定が自動的に処理されるため、手動での設定が最小限で済みます。

Expoは、Expo SDK,Expo CLI,Expo Go,EASと呼ばれる4種類のツールで構成されています。ビルドも証明書周りの設定を自動で行なってくれます。

Expo SDKとは?

Expoでアプリを作るために必要なあれこれを集めたパッケージのことです。
パッケージの形式で、連絡先、カメラ、ジャイロスコープ、GPS位置情報などのデバイスおよびシステム機能へのアクセスを提供します。

Expo CLIとは?

$ npx expo startなどのExpo特有のコマンドのこと

Expo Goとは?

Expo Goは、QRコードをスキャンするだけで、ビルド無しで実機で動作確認することができる機能です。アプリのアイコンやアプリの命名を確認することはできません。サンドボックスのようなものです。

https://zenn.dev/kamo_tomoki/books/0158a7770edeea/viewer/f58b65

EASとは?

EAS (Expo Application Services) は、Expoプロジェクトのビルド、配布、更新、アナリティクスなどの機能を提供するサービスです。
EASに含まれているサービスは、

  • EAS Build(ビルド)
  • EAS Submit(アプリの提出)

などがあります。

EAS Submitとは?

EAS Submit は成果物のアプリを Apple App Store および Google Play Store に提出するサービスです

今回は、EAS Build(ビルド)について触れていきます。

EAS Build

Expoのビルドは、expo buildというのを昔使っていましたが、今はEAS Build(Expo Application Servicesを使用したビルド)を使っています。

EAS Buildは、iOS/Androidそれぞれのバイナリをビルドするための環境作りやストアに提出するために必要な署名作業などを開発者の代わりにやってくれます。そのため、開発者はiOS/Androidそれぞれのビルド手順や署名方法などを知らなくてもアプリを作ることができます

EASはExpoのサーバー上で行われるため、サーバーの負荷状況やネットワーク帯域に影響されることがあります。そのため、ビルドにかなりの時間を要してしまいます。ローカルでビルドするとマシンの性能に依存しますが、少し時間を短縮することができます。
https://zenn.dev/tasugi/articles/6301f7d102a004

eas.jsonの役割

eas.jsonは、ExpoのEAS (Expo Application Services) を使用する際の設定ファイルです。

build profile

Build Profileとは、ある特定のビルドを実行するために必要なパラメータを記述した、名前付きの設定グループのことです。
上記の例では、development, preview, production の3つのBuild Profileがありますが、お好みで foo, bar, baz など好きな名前にすることができます。
特定のプロファイルでビルドを実行するには、eas build --profile <profile-name> と実行します。--profile フラグを省略した場合、EAS CLI は production という名前のチャンネルが存在すれば、それをデフォルトで使用します。

EAS Buildの設定は、すべて "build"キーに属します。 build"キーに複数のbuild profileを含めることができます。

{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  }
}

他にも、cliやsubmitの設定も可能です。

{
  "cli": {
    "version": ">= 0.34.0"
  },
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "../path/to/api-xxx-yyy-zzz.json",
        "track": "internal"
      },
      "ios": {
        "appleId": "john@turtle.com",
        "ascAppId": "1234567890",
        "appleTeamId": "AB12XYZ34S"
      }
    }
  }
}

https://qiita.com/sooooda/items/f8316bd426a2f9c6625c
https://docs.expo.dev/build/eas-json/
https://zenn.dev/kyo9bo/articles/eas_related_api_explain
https://docs.expo.dev/build/eas-json/

公式のExampleのプロパティを見てみる

公式のExampleに載っている内容を書いてみました。ここからそれぞれのプロパティがどのような役割を果たしているか見てみます。他にもたくさんあるので、公式を確認してみてください。

全体コードはこちら
{
  "cli": {
    "version": ">= 0.34.0"
  },
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "../path/to/api-xxx-yyy-zzz.json",
        "track": "internal"
      },
      "ios": {
        "appleId": "john@turtle.com",
        "ascAppId": "1234567890",
        "appleTeamId": "AB12XYZ34S"
      }
    }
  }
  "build": {
    "base": {
      "node": "12.13.0",
      "yarn": "1.22.5",
      "env": {
        "EXAMPLE_ENV": "example value"
      },
      "android": {
        "image": "default",
        "env": {
          "PLATFORM": "android"
        }
      },
      "ios": {
        "image": "latest",
        "env": {
          "PLATFORM": "ios"
        }
      }
    },
    "development": {
      "extends": "base",
      "developmentClient": true,
      "env": {
        "ENVIRONMENT": "development"
      },
      "android": {
        "distribution": "internal",
        "withoutCredentials": true
      },
      "ios": {
        "simulator": true
      }
    },
    "staging": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "staging"
      },
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "production"
      }
    }
  }
}

上記のコードは大きく、cli、submit、buildに設定がされています。

cli

cliは、EAS CLIのバージョン設定をします。

cliコード
"cli": {
  "version": ">= 0.34.0"
},

このコードは、cliの中にversionという項目が設定されています。versionは、EAS CLIのバージョンが0.34.0以上で設定してくださいということが記載されています。

submit

submitは、アプリの提出に関する設定をします。

submitコード
"submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "../path/to/api-xxx-yyy-zzz.json",
        "track": "internal"
      },
      "ios": {
        "appleId": "john@turtle.com",
        "ascAppId": "1234567890",
        "appleTeamId": "AB12XYZ34S"
      }
    }
  }

このコードは、submitの中にproduction環境のandroidとiosの設定がされています。

android
  • serviceAccountKeyPath
    AndroidアプリをGoogle Playに公開するために必要なサービスアカウントの認証情報(JSONファイル)のパスを指定します。
  • track
    Google Playでアプリを公開する際のトラック(例: internal, beta, production)を指定します。
ios
  • appleId
    iOSアプリを提出するために使用するAppleのApple IDを指定します。
  • ascAppId
    Apple DeveloperアカウントのApp Store Connect ID(アプリの識別子)を指定します。
  • appleTeamId
    Apple DeveloperアカウントのチームIDを指定します。

build

buildは、ビルドに関する環境設定をします。

buildコード
"build": {
    "base": {
      "node": "12.13.0",
      "yarn": "1.22.5",
      "env": {
        "EXAMPLE_ENV": "example value"
      },
      "android": {
        "image": "default",
        "env": {
          "PLATFORM": "android"
        }
      },
      "ios": {
        "image": "latest",
        "env": {
          "PLATFORM": "ios"
        }
      }
    },
    "development": {
      "extends": "base",
      "developmentClient": true,
      "env": {
        "ENVIRONMENT": "development"
      },
      "android": {
        "distribution": "internal",
        "withoutCredentials": true
      },
      "ios": {
        "simulator": true
      }
    },
    "staging": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "staging"
      },
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "extends": "base",
      "env": {
        "ENVIRONMENT": "production"
      }
    }
  }

このコードは、buildの中にbase、development、staging、productionの設定がされています。baseは各環境の共通項目をまとめたものです。それぞれの環境でextendsされています。

base
  • node
    使用するNode.jsのバージョンを指定します
  • yarn
    使用するYarnのバージョンを指定します
  • env
    ビルド環境で使用するカスタム環境変数を設定します
  • android
    image
    Androidビルドに使用するDockerイメージを指定します
    env
    Androidビルド用のカスタム環境変数を設定します
development
  • developmentClient
    開発者向けのクライアントをビルドするかどうかを指定します。trueに設定すると、開発用のビルドが作成されます。
  • env
    development環境のカスタム環境変数を設定します
  • android
    distribution
    Androidアプリの配布方法(例: internal)を指定します。
    withoutCredentials
    認証情報なしでビルドを実行するかどうかを指定します。trueにすると、認証情報がなくてもビルドが可能です。
  • ios
    simulator
    iOSのビルドでシミュレータを使用するかどうかを指定します。trueに設定すると、シミュレータ用のビルドが作成されます。
staging
  • distribution
    アプリの配布方法(例: internal)を指定します。
  • android
    buildType
    Androidビルドの種類(例: apkやaab)を指定します。apkはインストール可能なパッケージ、aabはGoogle Play用のパッケージです。

https://docs.expo.dev/eas/json/

まとめ

eas.jsonについてざっくり調べてました。ここから深めて理解していきたいです。

Discussion