From eas-deploy
Automates Expo EAS iOS/Android deployment: credentials/App ID setup, EAS builds, TestFlight distribution, App Store submission via CLI scripts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/eas-deploy:eas-deployThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
任意の Expo プロジェクトの iOS/Android デプロイを CLI から自動実行する。
任意の Expo プロジェクトの iOS/Android デプロイを CLI から自動実行する。
Step 1: 証明書・Bundle ID セットアップ ← 実装済み
Step 2: EAS ビルド ← 実装済み
Step 3: TestFlight 配布 ← 実装済み
Step 4: App Store 提出 ← 実装済み
eas whoami # ログイン確認 (なければ: eas login)
eas --version # CLI 確認 (なければ: npm install -g eas-cli)
# カレントディレクトリから eas.json を自動検出(推奨)
bash ~/.claude/skills/eas-deploy/scripts/setup-credentials.sh
# サブディレクトリ指定(相対パスで OK)
bash ~/.claude/skills/eas-deploy/scripts/setup-credentials.sh ./mobile
# Android の場合
bash ~/.claude/skills/eas-deploy/scripts/setup-credentials.sh ./mobile android
環境変数でオーバーライド可能:
BUNDLE_ID=com.example.app bash ~/.claude/skills/eas-deploy/scripts/setup-credentials.sh
EAS_PLATFORM=android bash ~/.claude/skills/eas-deploy/scripts/setup-credentials.sh
スクリプトは stdin が対話可能かを [ -t 0 ] で自動判定する。
| モード | 判定条件 | 動作 |
|---|---|---|
| 対話 | ターミナルから直接実行 | チェック → 問題あれば自動修正 → eas credentials 実行 |
| 非対話 | Claude Code 等から実行 | チェック → 問題を一覧表示 → 実行すべきコマンドを出力 |
Claude Code から実行した場合、Apple ID 認証が必要な eas credentials は実行せず、
コピペ用のコマンドを提示する。ユーザーは自分のターミナルでそれを実行する。
projectId の有無)eas init を自動実行eas credentials 実行後、以下の順に選択する:
| # | プロンプト | 選択 |
|---|---|---|
| 1 | Which build profile? | production |
| 2 | What do you want to do? | Build Credentials |
| 3 | Distribution Certificate | Set up a new one (または既存を選択) |
| 4 | Provisioning Profile | Set up a new one (または既存を選択) |
途中で Apple ID + 2FA コード (6桁) の入力が必要。
| エラー | 対処 |
|---|---|
Apple ID authentication failed | 2FA コード入力、または App-specific password 生成 |
Bundle ID already exists | Apple Developer Portal で確認、別 ID に変更 |
Missing Apple Developer Program | developer.apple.com で加入 (年99ドル) |
ビルド前に以下が設定されていることを確認し、なければ自動で追加する。
eas.json — cli.appVersionSource (将来必須):
{
"cli": {
"appVersionSource": "remote"
}
}
app.config.ts — ios.infoPlist.ITSAppUsesNonExemptEncryption (暗号化申告):
ios: {
infoPlist: {
ITSAppUsesNonExemptEncryption: false
}
}
これがないと毎回ビルド時に対話的に聞かれる。
独自暗号化を使っていない場合は false で OK(HTTPS は標準暗号扱い)。
ユーザーにローカルビルドかクラウドビルドかを確認する。 デフォルトはローカルビルドを推奨する。
| 方式 | コマンド | 特徴 |
|---|---|---|
| ローカル(推奨) | eas build --local | 無料、高速、Xcode 必須 |
| クラウド | eas build | Xcode 不要、EAS クレジット消費、アップロード時間あり |
# App Store 用
eas build --platform ios --profile production --local
# 内部配布 (AdHoc)
eas build --platform ios --profile preview --local
# シミュレータ / dev-client
eas build --platform ios --profile development --local
前提条件:
xcode-select -p で確認)pod --version で確認、なければ sudo gem install cocoapods)eas build --platform ios --profile production
ビルドは EAS サーバー上で実行され、完了まで数分〜十数分かかる。
確認: eas build:list --platform ios --limit 1
| # | プロンプト | 選択 |
|---|---|---|
| 1 | iOS app only uses standard/exempt encryption? | yes (HTTPS のみなら) |
| 2 | Do you want to log in to your Apple account? | yes |
| 3 | Distribution Certificate を再利用するか | yes (既存があれば再利用) |
| 4 | Generate a new Apple Provisioning Profile? | yes |
| エラー | 原因 | 対処 |
|---|---|---|
Failed to restore metadata: File exists + tar エラー | macOS メタデータ (._*) や vim スワップ (.swp) が git に入っている | git rm --cached で除外 + .gitignore に ._* と *.swp を追加 |
cli.appVersionSource is not set | eas.json に未設定 | "appVersionSource": "remote" を追加 |
ITSAppUsesNonExemptEncryption を毎回聞かれる | app.config.ts に未設定 | ios.infoPlist.ITSAppUsesNonExemptEncryption: false を追加 |
Cannot automatically write to dynamic config | app.config.ts は動的設定なので EAS が自動書き込みできない | 手動で app.config.ts に追記する(EAS のログに追加すべき JSON が表示される) |
ビルド前チェック(自動で実行すべき):
# macOS メタデータが git に入っていないか確認
git ls-files | grep '/\._'
# .gitignore に ._* と *.swp が含まれているか確認
grep -q '._\*' .gitignore || echo '._*' >> .gitignore
grep -q '*.swp' .gitignore || echo '*.swp' >> .gitignore
App Store Connect にビルドをアップロードし、TestFlight でテスターに配布する。
# クラウドビルドの場合(最新ビルドを自動選択)
cd <project-dir> && eas submit --platform ios --latest
# クラウドビルドを手動選択
cd <project-dir> && eas submit --platform ios
# ローカルビルド (.ipa) の場合
cd <project-dir> && eas submit --platform ios --path ./build-xxxxx.ipa
eas submit --platform ios を実行すると以下の順に進む:
1. What would you like to submit?
→ "Select a build from EAS" を選択
2. Which build would you like to submit?
→ 最新のビルド (数分前のもの等) を選択
※ "production" プロファイルのビルドが表示される
3. App Store Connect 確認
→ "Ensuring your app exists on App Store Connect" が自動実行
→ ascAppId を submit profile に設定済みならスキップ可
4. Apple ID ログイン
→ Apple ID を入力
→ セッションが残っていれば "Restoring session" で自動ログイン
→ Team / Provider が自動選択される
5. 初回のみ自動実行される処理:
→ Bundle identifier registered (App ID 登録)
→ TestFlight group created: "Team (Expo)"
→ TestFlight access enabled for: <Apple ID>
6. App Store Connect API Key
→ 既存の API Key があれば "Reuse this API Key?" → yes
→ なければ自動生成される
→ API Key が submit 用に割り当てられる
7. 提出サマリーが表示される:
ASC App ID: <数字>
App Store Connect API Key: <Key Name / Key ID>
Build: <Build ID / Date / Version / Build Number>
8. Submission スケジュール → 自動で開始
→ "Submitting your app to Apple App Store Connect: submission in progress"
→ 完了まで数分待つ
# 提出状況の確認
eas submit:list --platform ios --limit 1
提出完了後、App Store Connect で処理されるまで数分〜数十分かかる。 処理が完了すると、TestFlight タブにビルドが表示される。
初回 submit 後、eas.json に ascAppId を追加するとログイン不要になる:
{
"submit": {
"production": {
"ios": {
"ascAppId": "<ASC App ID の数字>"
}
}
}
}
| エラー | 原因 | 対処 |
|---|---|---|
No builds found | ビルドが完了していない | eas build:list で状態確認 |
Selected build uses "production" but submit profile missing | eas.json に submit profile がない | 無視して OK(デフォルト production が使われる)、または submit.production を追加 |
App Store Connect API error | API Key 未設定または権限不足 | App Store Connect で API Key を確認 |
Missing compliance | 暗号化の申告が未完了 | ITSAppUsesNonExemptEncryption: false を app.config.ts に設定 |
| Apple ID ログインループ | セッション切れ | キャッシュ削除: rm -rf ~/.app-store/auth/<apple-id>/ |
TestFlight で動作確認が取れたら、App Store に審査提出する。
App Store Connect で以下が設定済みであること:
| 理由 | 対処 |
|---|---|
| クラッシュ / バグ | TestFlight で十分テストしてから提出 |
| 不完全なメタデータ | スクリーンショット・説明文・プライバシーポリシーを全て埋める |
| ログイン必要だがテストアカウント未提供 | 審査メモにテストアカウント情報を記載 |
| 課金がある場合の説明不足 | サブスクリプション説明・利用規約を明記 |
npx claudepluginhub sean-sunagaku/claude-code-plugin --plugin eas-deployDeploys Expo apps to iOS App Store, Android Play Store, TestFlight, and web hosting using EAS CLI. Guides builds, submissions, eas.json configs, and CI/CD workflows.
Deploys Expo apps to production via EAS Build, app store submission, and OTA updates. Use when publishing to iOS/Android or managing release channels.
Deploys Expo apps to production via app stores (iOS App Store, Google Play) and OTA updates. Guides builds, submissions, release channels, and optimization.