eas.jsonって何?
はじめに
現在の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コードをスキャンするだけで、ビルド無しで実機で動作確認することができる機能です。アプリのアイコンやアプリの命名を確認することはできません。サンドボックスのようなものです。
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のサーバー上で行われるため、サーバーの負荷状況やネットワーク帯域に影響されることがあります。そのため、ビルドにかなりの時間を要してしまいます。ローカルでビルドするとマシンの性能に依存しますが、少し時間を短縮することができます。
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"
}
}
}
}
公式の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用のパッケージです。
まとめ
eas.jsonについてざっくり調べてました。ここから深めて理解していきたいです。
Discussion