jpskill.com
🛠️ 開発・MCP コミュニティ

expo-build-deploy

Building and deploying Expo React Native apps to iOS. Use when configuring EAS Build, submitting to TestFlight, App Store deployment, managing certificates, or troubleshooting build issues.

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o expo-build-deploy.zip https://jpskill.com/download/17839.zip && unzip -o expo-build-deploy.zip && rm expo-build-deploy.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17839.zip -OutFile "$d\expo-build-deploy.zip"; Expand-Archive "$d\expo-build-deploy.zip" -DestinationPath $d -Force; ri "$d\expo-build-deploy.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して expo-build-deploy.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → expo-build-deploy フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Expo Build & Deploy (iOS)

EAS Build のセットアップ

初期設定

# EAS CLI をインストール
npm install -g eas-cli

# Expo アカウントにログイン
eas login

# プロジェクトで EAS を初期化
eas build:configure

これにより eas.json が作成されます。

{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}

app.json iOS 設定

{
  "expo": {
    "name": "MyApp",
    "slug": "myapp",
    "version": "1.0.0",
    "scheme": "myapp",
    "ios": {
      "bundleIdentifier": "com.yourcompany.myapp",
      "buildNumber": "1",
      "supportsTablet": false,
      "infoPlist": {
        "NSCameraUsageDescription": "プロフィールの写真を撮る",
        "NSLocationWhenInUseUsageDescription": "近くの場所を見つける"
      }
    }
  }
}

ビルドの種類

開発ビルド (開発用)

# シミュレーター用
eas build --profile development --platform ios

# 物理デバイス用
eas build --profile development --platform ios --local

npx expo start --dev-client と共に使用します。

プレビュービルド (内部テスト)

eas build --profile preview --platform ios

アドホックプロビジョニングで配布します。テスターはリンク経由でインストールします。

本番ビルド (App Store)

eas build --profile production --platform ios

認証情報の管理

EAS は認証情報を自動的に管理しますが、制御することもできます。

# 現在の認証情報を表示
eas credentials

# EAS にすべてを管理させる (推奨)
# ビルドを実行するだけで、証明書を処理します

# 既存の認証情報を使用
eas credentials --platform ios
# 「既存のものを使用」を選択し、パスを指定します

手動での認証情報設定 (必要な場合)

  1. Apple Developer Portal で App ID を作成します
  2. Distribution Certificate を作成します
  3. Provisioning Profile を作成します
  4. eas.json で設定します。
{
  "build": {
    "production": {
      "ios": {
        "credentialsSource": "local"
      }
    }
  }
}

環境変数

eas.json 内

{
  "build": {
    "production": {
      "env": {
        "API_URL": "https://api.yourapp.com"
      }
    },
    "preview": {
      "env": {
        "API_URL": "https://staging-api.yourapp.com"
      }
    }
  }
}

シークレット (機密性の高い値)

# シークレットを設定
eas secret:create --name API_KEY --value "sk_live_xxx" --scope project

# シークレットをリスト表示
eas secret:list

# app.json で使用
{
  "extra": {
    "apiKey": process.env.API_KEY
  }
}

コード内でアクセス:

import Constants from 'expo-constants';

const apiKey = Constants.expoConfig?.extra?.apiKey;

TestFlight へのデプロイ

submit プロファイルを設定

{
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "1234567890",
        "appleTeamId": "XXXXXXXXXX"
      }
    }
  }
}

ascAppId は App Store Connect の URL から取得します: https://appstoreconnect.apple.com/apps/1234567890

TestFlight に送信

# 1 つのコマンドでビルドして送信
eas build --profile production --platform ios --auto-submit

# または既存のビルドを送信
eas submit --platform ios --latest

# 特定のビルドを送信
eas submit --platform ios --id <build-id>

App Store Connect の設定 (初回)

  1. App Store Connect でアプリを作成します
  2. アプリ情報を入力します
  3. TestFlight を設定します。
    • 内部テスターを追加します (すぐにアクセス可能)
    • 外部テストグループを作成します (レビューが必要)

App Store への提出

提出前のチェックリスト

  • [ ] アプリアイコン (App Store 用に 1024x1024)
  • [ ] 必要なデバイスサイズのスクリーンショット
  • [ ] プライバシーポリシーの URL
  • [ ] アプリの説明とキーワード
  • [ ] 年齢区分に関するアンケート
  • [ ] 輸出コンプライアンス (暗号化)

レビューのために提出

  1. 本番プロファイルでビルドします
  2. App Store Connect に送信します
  3. App Store Connect で:
    • 提出するビルドを選択します
    • アプリ情報を完了します
    • レビューのために提出します
# 自動送信
eas submit --platform ios --latest

Over-the-Air アップデート

JS/アセットのみの変更 (ネイティブコードの変更なし) の場合:

# アップデートを公開
eas update --branch production --message "ログインのバグ修正"

# 公開前にプレビュー
eas update --branch preview --message "新機能のテスト"

アップデートチャネルを設定

{
  "build": {
    "production": {
      "channel": "production"
    },
    "preview": {
      "channel": "preview"
    }
  }
}

アプリでアップデートを確認

import * as Updates from 'expo-updates';

async function checkForUpdates() {
  if (__DEV__) return; // 開発環境ではスキップ

  try {
    const update = await Updates.checkForUpdateAsync();
    if (update.isAvailable) {
      await Updates.fetchUpdateAsync();
      await Updates.reloadAsync();
    }
  } catch (error) {
    console.log('Update check failed:', error);
  }
}

バージョン管理

新機能のためにバージョンをインクリメント

{
  "expo": {
    "version": "1.1.0"  // ユーザーに表示される
  }
}

ビルドごとに buildNumber をインクリメント

{
  "expo": {
    "ios": {
      "buildNumber": "2"  // アップロードごとに増やす必要がある
    }
  }
}

EAS で自動化

{
  "build": {
    "production": {
      "ios": {
        "autoIncrement": "buildNumber"
      }
    }
  }
}

ローカルビルド

EAS サーバーではなく、自分のマシンでビルドします。

# Xcode のインストールが必要
eas build --platform ios --local

以下に役立ちます。

  • デバッグ中のより速いイテレーション
  • ビルド出力の検査
  • オフラインビルド

トラブルシューティング

署名エラーでビルドが失敗する

# 認証情報をリセットして、EAS に再生成させる
eas credentials --platform ios
# 「削除」を選択してからリビルド

「コンプライアンスがありません」という警告

app.json に追加します。


{
  "expo": {
    "ios": {
      "infoPlist": {
        "ITSAppUsesNonExem

(原文がここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Expo Build & Deploy (iOS)

EAS Build Setup

Initial configuration

# Install EAS CLI
npm install -g eas-cli

# Login to Expo account
eas login

# Initialize EAS in project
eas build:configure

This creates eas.json:

{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}

app.json iOS configuration

{
  "expo": {
    "name": "MyApp",
    "slug": "myapp",
    "version": "1.0.0",
    "scheme": "myapp",
    "ios": {
      "bundleIdentifier": "com.yourcompany.myapp",
      "buildNumber": "1",
      "supportsTablet": false,
      "infoPlist": {
        "NSCameraUsageDescription": "Take photos for your profile",
        "NSLocationWhenInUseUsageDescription": "Find locations near you"
      }
    }
  }
}

Build Types

Development build (for development)

# For simulator
eas build --profile development --platform ios

# For physical device
eas build --profile development --platform ios --local

Use with npx expo start --dev-client

Preview build (internal testing)

eas build --profile preview --platform ios

Distributes via ad-hoc provisioning. Testers install via link.

Production build (App Store)

eas build --profile production --platform ios

Credentials Management

EAS manages credentials automatically, but you can control them:

# View current credentials
eas credentials

# Let EAS manage everything (recommended)
# Just run build, it handles certificates

# Use existing credentials
eas credentials --platform ios
# Select "Use existing" and provide paths

Manual credential setup (if needed)

  1. Create App ID in Apple Developer Portal
  2. Create Distribution Certificate
  3. Create Provisioning Profile
  4. Configure in eas.json:
{
  "build": {
    "production": {
      "ios": {
        "credentialsSource": "local"
      }
    }
  }
}

Environment Variables

In eas.json

{
  "build": {
    "production": {
      "env": {
        "API_URL": "https://api.yourapp.com"
      }
    },
    "preview": {
      "env": {
        "API_URL": "https://staging-api.yourapp.com"
      }
    }
  }
}

Secrets (sensitive values)

# Set secret
eas secret:create --name API_KEY --value "sk_live_xxx" --scope project

# List secrets
eas secret:list

# Use in app.json
{
  "extra": {
    "apiKey": process.env.API_KEY
  }
}

Access in code:

import Constants from 'expo-constants';

const apiKey = Constants.expoConfig?.extra?.apiKey;

TestFlight Deployment

Configure submit profile

{
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "1234567890",
        "appleTeamId": "XXXXXXXXXX"
      }
    }
  }
}

Get ascAppId from App Store Connect URL: https://appstoreconnect.apple.com/apps/1234567890

Submit to TestFlight

# Build and submit in one command
eas build --profile production --platform ios --auto-submit

# Or submit existing build
eas submit --platform ios --latest

# Submit specific build
eas submit --platform ios --id <build-id>

App Store Connect setup (first time)

  1. Create app in App Store Connect
  2. Fill in app information
  3. Set up TestFlight:
    • Add internal testers (immediate access)
    • Create external testing group (requires review)

App Store Submission

Pre-submission checklist

  • [ ] App icons (1024x1024 for App Store)
  • [ ] Screenshots for required device sizes
  • [ ] Privacy policy URL
  • [ ] App description and keywords
  • [ ] Age rating questionnaire
  • [ ] Export compliance (encryption)

Submit for review

  1. Build with production profile
  2. Submit to App Store Connect
  3. In App Store Connect:
    • Select build for submission
    • Complete app information
    • Submit for review
# Automated submission
eas submit --platform ios --latest

Over-the-Air Updates

For JS/asset-only changes (no native code changes):

# Publish update
eas update --branch production --message "Bug fix for login"

# Preview before publishing
eas update --branch preview --message "Testing new feature"

Configure update channels

{
  "build": {
    "production": {
      "channel": "production"
    },
    "preview": {
      "channel": "preview"
    }
  }
}

Check for updates in app

import * as Updates from 'expo-updates';

async function checkForUpdates() {
  if (__DEV__) return; // Skip in development

  try {
    const update = await Updates.checkForUpdateAsync();
    if (update.isAvailable) {
      await Updates.fetchUpdateAsync();
      await Updates.reloadAsync();
    }
  } catch (error) {
    console.log('Update check failed:', error);
  }
}

Version Management

Increment version for new features

{
  "expo": {
    "version": "1.1.0"  // Shown to users
  }
}

Increment buildNumber for each build

{
  "expo": {
    "ios": {
      "buildNumber": "2"  // Must increase for each upload
    }
  }
}

Automate with EAS

{
  "build": {
    "production": {
      "ios": {
        "autoIncrement": "buildNumber"
      }
    }
  }
}

Local Builds

Build on your machine instead of EAS servers:

# Requires Xcode installed
eas build --platform ios --local

Useful for:

  • Faster iteration during debugging
  • Inspecting build output
  • Offline builds

Troubleshooting

Build fails with signing error

# Reset credentials and let EAS regenerate
eas credentials --platform ios
# Select "Remove" then rebuild

"Missing compliance" warning

Add to app.json:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "ITSAppUsesNonExemptEncryption": false
      }
    }
  }
}

Build succeeds but app crashes

# Check native logs
eas build:view <build-id>

# Download and inspect build
eas build:download <build-id>

TestFlight build stuck in processing

  • Usually takes 10-30 minutes
  • Check App Store Connect for status
  • Ensure buildNumber is unique

OTA update not applied

  • Verify channel matches
  • Check Updates.checkForUpdateAsync() is called
  • Ensure not in development mode
  • Updates only apply on next cold start

Common Commands Reference

# Build
eas build --platform ios --profile production
eas build --platform ios --profile preview
eas build --platform ios --local

# Submit
eas submit --platform ios --latest
eas submit --platform ios --id <build-id>

# Updates
eas update --branch production --message "Fix"
eas update:list

# Credentials
eas credentials --platform ios
eas credentials:configure

# View builds
eas build:list
eas build:view <build-id>
eas build:cancel <build-id>

# Secrets
eas secret:create --name KEY --value "xxx"
eas secret:list