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.
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
expo-build-deploy.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
expo-build-deployフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
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
# 「既存のものを使用」を選択し、パスを指定します
手動での認証情報設定 (必要な場合)
- Apple Developer Portal で App ID を作成します
- Distribution Certificate を作成します
- Provisioning Profile を作成します
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 の設定 (初回)
- App Store Connect でアプリを作成します
- アプリ情報を入力します
- TestFlight を設定します。
- 内部テスターを追加します (すぐにアクセス可能)
- 外部テストグループを作成します (レビューが必要)
App Store への提出
提出前のチェックリスト
- [ ] アプリアイコン (App Store 用に 1024x1024)
- [ ] 必要なデバイスサイズのスクリーンショット
- [ ] プライバシーポリシーの URL
- [ ] アプリの説明とキーワード
- [ ] 年齢区分に関するアンケート
- [ ] 輸出コンプライアンス (暗号化)
レビューのために提出
- 本番プロファイルでビルドします
- App Store Connect に送信します
- 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)
- Create App ID in Apple Developer Portal
- Create Distribution Certificate
- Create Provisioning Profile
- 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)
- Create app in App Store Connect
- Fill in app information
- 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
- Build with production profile
- Submit to App Store Connect
- 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