ExpoReact NativeAppStore2025/8/1322分で読める
🏐

📱 React Native (Expo) アプリをApp Storeに提出する完全ガイド

D

Dev.AIチーム

AI開発エンジニア

フォロワー 12.5K

📱 React Native (Expo) アプリをApp Storeに提出する完全ガイド

はじめに

このガイドは、React NativeとExpoで作った「ゴミ出しリマインダー」アプリを実際にApp Storeに公開するまでの全工程を記録したものです。つまずきポイントや解決方法も含めて、リアルな体験をベースに書いています。

📋 必要なもの

必須

  • Apple Developer Program(年間$99 / 約15,000円)
  • Expo アカウント(無料)
  • Node.js(v18以上推奨)

あると便利

  • iPhone実機(スクリーンショット撮影用)
  • Mac(なくてもWindows/LinuxでOK!)

🛠️ 開発環境のセットアップ

1. プロジェクト作成

# Expoプロジェクトを作成
npx create-expo-app gomi-reminder --template

# プロジェクトに移動cd gomi-reminder

# 開発サーバー起動
npx expo start
bash

2. 必要なパッケージインストール

# 通知機能
npx expo install expo-notifications

# ローカルストレージ
npx expo install @react-native-async-storage/async-storage

# ナビゲーション(Expo Router使用)# SDK 53以降はデフォルトで含まれている
bash

📱 アプリの基本設定

app.json の設定

{
  "expo": {
    "name": "ゴミ出しリマインダー",
    "slug": "gomi-reminder",
    "owner": "shincode",// Expoユーザー名"version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/images/icon.png",
    "scheme": "gomireminder",
    "userInterfaceStyle": "automatic",
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.shincode.gomireminder",
      "buildNumber": "1",
      "infoPlist": {
        "NSUserNotificationUsageDescription": "ゴミ出しのリマインダーを送信するために通知を使用します。",
        "ITSAppUsesNonExemptEncryption": false// 暗号化書類不要の宣言},
      "entitlements": {
        "aps-environment": "production"// Push通知を使う場合}
    },
    "android": {
      "package": "com.shincode.gomireminder",
      "versionCode": 1
    },
    "plugins": [
      "expo-router",
      [
        "expo-notifications",
        {
          "icon": "./assets/images/notification-icon.png",
          "color": "#007AFF"
        }
      ]
    ]
  }
}
json

重要なポイント

  • bundleIdentifier は一度決めたら変更不可
  • ITSAppUsesNonExemptEncryption: false で暗号化書類を回避
  • Push通知を使う場合は entitlements が必須

🎨 アイコンの準備

必要なアイコンサイズ

  • icon.png: 1024×1024px(メインアイコン)
  • adaptive-icon.png: 1024×1024px(Android用)
  • notification-icon.png: 96×96px(通知用)
  • splash-icon.png: 200×200px(スプラッシュ画面)

アイコンの自動生成スクリプト

// generate-icons.jsconst sharp = require('sharp');

const createIcon = async (size, outputPath) => {
  const svg = `
    <svg width="${size}" height="${size}" viewBox="0 0 ${size} ${size}" xmlns="http://www.w3.org/2000/svg">
      <rect width="${size}" height="${size}" fill="#007AFF"/>
      <circle cx="${size/2}" cy="${size/2}" r="${size*0.4}" fill="white"/>
      <!-- ここにアイコンデザイン -->
    </svg>
  `;

  await sharp(Buffer.from(svg))
    .png()
    .toFile(outputPath);
};

// 各サイズのアイコンを生成createIcon(1024, './assets/images/icon.png');
javascript

🏗️ EAS Build のセットアップ

1. EAS CLI インストール

npm install -g eas-cli
bash

2. ログイン

eas login
bash

3. プロジェクト初期化

eas init
bash

重要: "Would you like to create a project?" → Yes を選択

4. eas.json の設定

{
  "cli": {
    "version": ">= 3.0.0",
    "appVersionSource": "local"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      },
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "ios": {
        "resourceClass": "m-medium"
      },
      "android": {
        "buildType": "app-bundle"
      }
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your-apple-id@example.com",
        "ascApiKeyPath": "./AuthKey_XXXXXX.p8"
      }
    }
  }
}
json

🔐 iOS証明書の設定

Apple Developer Programなしでビルドする場合

# シミュレーター用ビルドなら証明書不要
eas build --platform ios --profile simulator
bash

Apple Developer Program登録後

# 証明書の設定(初回のみ)
eas credentials --platform ios
bash

選択肢:

  1. Build Credentials → All を選択
  2. Apple IDでログイン
  3. 自動生成を選択(EASが全部やってくれる)

🚀 ビルド実行

開発ビルド

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

# Android APK
eas build --platform android --profile preview
bash

本番ビルド(要Apple Developer)

# iOS本番ビルド
eas build --platform ios --profile production

# エラーが出たらキャッシュクリア
eas build --platform ios --profile production --clear-cache
bash

⚠️ よくあるエラーと解決方法

1. Push Notifications エラー

Provisioning profile doesn't support the Push Notifications capability
plain text

解決方法: app.jsonに追加

"ios": {
  "entitlements": {
    "aps-environment": "production"
  }
}
json

2. 証明書エラー

You have no team associated with your Apple account
plain text

解決方法: Apple Developer Program($99/年)への登録が必要

3. EAS project not configured

Must configure EAS project by running 'eas init'
plain text

解決方法:

eas init
# Yesを選択してプロジェクト作成
bash

📸 スクリーンショットの準備

Expo Goを使った撮影方法

  1. Expo Goアプリをインストール
  2. 開発サーバー起動
  3. QRコードをスキャンしてアプリを開く
  4. 撮影すべき画面(最低2枚)

必要なサイズ

  • iPhone 6.7インチ: 1290×2796px
  • iPhone 6.5インチ: 1284×2778px

📤 App Store Connect への提出

1. App Store Connect API Key の作成

  1. App Store Connect にログイン
  2. 「ユーザーとアクセス」 → 「キー」 → 「App Store Connect API」
  3. 「+」 をクリックして新規作成
  4. 名前: EAS Submit Key
  5. アクセス: App Manager

重要な情報をメモ:

  • Key ID: 例: 2ATCU6QFLS
  • Issuer ID: 例: 88d6c371-a9d5-453c-9ee7-378724ad42c4
  • ダウンロードした.p8ファイル: プロジェクトルートに配置

2. App Store Connectでアプリ作成

  1. 「マイApp」 → 「+」 → 「新規App」
  2. 入力内容:

3. 必須情報の入力

App情報

  • カテゴリ: ライフスタイル
  • サブタイトル: ゴミの日を忘れない(30文字以内)
  • 年齢制限: 4+(全年齢)

価格と販売状況

  • 価格: 0(無料)

プライバシー

  • プライバシーポリシーURL: 必須
  • データ収集:

説明文の例

ゴミ出しリマインダーは、毎日のゴミ出しを忘れないようにサポートするアプリです。

【主な機能】
◆ カスタマイズ可能なスケジュール
地域ごとに異なるゴミ収集日を、曜日単位で自由に設定

◆ タイムリーな通知
前日19:00と当日7:00に通知でお知らせ

◆ 見やすいカレンダー表示
週間・月間カレンダーで一目で確認

◆ シンプルで使いやすいデザイン
ダークモードにも対応
plain text

キーワード(100文字、カンマ区切り)

ゴミ,ごみ,リマインダー,通知,カレンダー,収集日,ゴミ出し,環境,生活,家事
plain text

4. EAS Submit でアップロード

# ビルドIDを指定して提出
eas submit --platform ios --id [BUILD_ID]

# または最新ビルドを提出
eas submit --platform ios --latest
bash

プロンプトで入力:

  1. Path to API Key./AuthKey_XXXXXX.p8
  2. Key ID: メモしたKey ID
  3. Issuer ID: メモしたIssuer ID

5. 審査提出

  1. アップロード完了メールを待つ(5-10分)
  2. App Store Connectでビルドを選択
  3. スクリーンショットをアップロード
  4. 「審査に提出」 をクリック

📊 審査プロセス

タイムライン

  • 審査待ち: 24時間以内に開始されることが多い
  • 審査中: 1-3日(初回は長め)
  • 結果: メールで通知

よくあるリジェクト理由

  1. メタデータの問題
  2. 機能の問題
  3. ガイドライン違反

💡 Tips & ベストプラクティス

開発時のTips

  1. TypeScriptを使う
  2. Lintの設定
  3. 環境変数の管理

ビルド時のTips

  1. ビルド時間の短縮
  2. 証明書の管理
  3. バージョン管理

提出時のTips

  1. プライバシーポリシー
  2. スクリーンショット
  3. 審査対策

🎯 チェックリスト

開発完了時

未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do

ビルド前

未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do

提出前

未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do

審査提出

未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do
未対応のブロックタイプ: to_do

🚀 コマンドまとめ

# 開発
npx expo start

# EAS初期設定
eas init
eas login

# ビルド
eas build --platform ios --profile production
eas build --platform android --profile preview

# 証明書管理
eas credentials --platform ios

# 提出
eas submit --platform ios --latest

# ビルド履歴
eas build:list --platform ios

# ログ確認
eas build:view [BUILD_ID]
bash

📚 参考リンク

まとめ

React Native + Expoを使えば、Macなしでも、Windows環境からiOSアプリをApp Storeに公開できます。EASが証明書管理を自動化してくれるので、以前よりもずっと簡単になりました。

重要なポイント:

  • 📱 Apple Developer Programは必須($99/年)
  • 🔧 EASが面倒な作業を自動化
  • 📸 スクリーンショットは事前準備
  • ⏰ 審査は1-3日
  • 🎯 初回は時間がかかるが、2回目以降は楽

このガイドが、次のアプリ開発の参考になれば幸いです!


最終更新: 2024年8月実際のアプリ: ゴミ出しリマインダー

このドキュメントで一部のコンテンツが無効になっています

著者について

D

Dev.AIチーム

AI開発エンジニア。生成AIを活用した開発手法の研究と実践に従事。 最新のAI技術を使った効率的な開発方法を日々探求しています。