revopush-setup について
React Native と Expo アプリに Revopush OTA 更新を導入するためのセットアップスキルです。プロジェクト検出、バージョン選択、ネイティブと JavaScript の統合、検証を案内し、ファイル変更時の確認も重視します。
主な機能
- 01React Native と Expo の構成検出
- 02互換性のある SDK バージョン選定
- 03ネイティブ連携の手順案内
- 04JavaScript のルートコンポーネントのラップ
- 05統合状態のチェック
活用シーン
- 01React Native アプリへの OTA 更新追加
- 02Expo プロジェクトでの Revopush 設定
- 03Microsoft CodePush からの移行
- 04リリース前の OTA 統合検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ revopush/ skills --skill revopush-setupインストール後、Claude Code で/revopush-setupを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/codepush-options.template.jsevals/evals.jsonreferences/android.mdcli-and-releases.mdexpo.mdios.mdjs-api.mdmigration.mdversions.mdscripts/detect-project.shverify-integration.shwrap-entry.js詳細
Revopush OTA のセットアップ
React Native または Expo アプリに Revopush OTA アップデートを統合します。Revopush は Microsoft CodePush の後継となるホスト型(SaaS)のドロップイン製品です。JS API とネイティブ側の設定の大部分は同一で、異なるのはパッケージ名とサーバー URL のみです。現行の SDK 系列(2.5.x/2.6.x)では、自動差分(「diff」)アップデートも提供されます。サーバーから送信されるのは変更されたバイトのみで、設定は不要です。
docs.revopush.org が信頼できる唯一の情報源であり、Revopush はホスト型のみです。
必ずホスト型サーバー https://api.revopush.org(API)と
https://app.revopush.org(ダッシュボード)を指定してください。Revopush は現在、セルフホストのオプションを提供していません。SDK や CLI の接続先として、ユーザー独自のサーバーを指定するよう案内しないでください。バージョンや手順が古いように見える場合は、最新のドキュメントを確認してください。
ヒント: SDK をインストールすると、信頼できるセットアップドキュメントが
node_modules/@revopush/react-native-code-push/docs/(setup-android.md、setup-ios.md、api-js.mdなど)に同梱されます。ここで扱っていない特殊なテンプレートなどのケースについては、そちらを参照してください。インストール済みのバージョンに正確に対応しています。
使用する場面
開発者が React Native または Expo プロジェクトに Revopush/CodePush OTA アップデートを追加または設定したい場合に使用します。すでに統合済みのアプリのリリースを公開することだけが目的の場合は使用しないでください。その場合は revopush CLI のみを使用します(references/cli-and-releases.md を参照)。
安全上のルール
これらの編集では、実際のネイティブプロジェクトファイルを変更します。透明性を保って作業してください。
- プロジェクトのルートを確認します —
react-nativeを含むpackage.jsonが存在する必要があります。存在しない場合は作業を中止し、アプリの場所を尋ねてください。 - 編集前に検出します。
scripts/detect-project.shを実行し、変更を加える前に、検出された React Native のバージョン、Expo か bare かの判定、ネイティブファイルの形式(Swift と Objective-C、Kotlin DSL と Groovy、Kotlin と Java)、および Android のホストパターン(MainApplication の設定方法を決定します)をユーザーに示してください。ワークフローはこの結果に応じて分岐します。 - 慎重に編集します。 ネイティブファイルを変更する前に、対象ファイルと追加内容をユーザーに伝えてください。変更の確認や取り消しを容易にするため、一度に 1 つのファイルだけを編集します。
scripts/wrap-entry.jsヘルパーはまず--dry-runを実行し、変更するファイルをバックアップします。JS のラップにはこれを使用してください。 - デプロイキーを決して捏造しないでください。 キーはダッシュボード(https://app.revopush.org。ユーザーがそこで登録してログインします)または CLI で作成します。ユーザーに iOS と Android のキーを尋ねるか、
references/cli-and-releases.mdに従って取得できるよう案内してください。まだキーがない場合に限り、プレースホルダーとしてYOUR_DEPLOYMENT_KEYを使用し、リリースを機能させる前に値を入力する必要があることを伝えてください。
ワークフロー
1. 検出
プロジェクトのルートから scripts/detect-project.sh を実行し、概要をユーザーに示します。RN のバージョン、Expo かベアか、存在する iOS/Android のソースバリアントが報告されます。検出結果に応じて分岐します。
| 検出結果 | 実行すること |
|---|---|
Microsoft react-native-code-push が存在する | これは移行です。references/migration.md を読み、その手順に従います(その後、参照先のバージョン/ネイティブ手順を適用します)。 |
| React Native < 0.76 | Revopush には RN 0.76 以降が必要です。React Native をアップグレードするか、古いバージョンでは Microsoft CodePush(https://github.com/microsoft/react-native-code-push)を使うようユーザーに伝えます。**ここで停止します。** |
| Expo SDK < 52 | Revopush には Expo SDK 52 以降が必要です。Expo をアップグレードするようユーザーに伝えるか、停止します。 |
| Expo SDK 52+ | references/expo.md を読み、その手順に従います。 |
| ベア React Native 0.76+ | references/versions.md を読んで SDK のバージョンを選び、続いて references/ios.md と references/android.md を読み、検出されたバリアントに対応するネイティブ変更を行います。 |
| React Native プロジェクトではない/不明 | 停止し、React Native アプリの場所をユーザーに尋ねます。 |
アプリが expo に依存し、かつ ios//android/ フォルダーがある場合、detect-project.sh はフォルダーが gitignore 対象かどうかで判別します。
- Gitignore 対象 → 生成されたフォルダーです。**管理対象の Expo(CNG)**です。Expo の手順を使います。
prebuild --cleanは安全です。確認せずに進めます。 - 追跡対象(コミット済み) → 判別できません。ユーザーに尋ねます。管理対象アプリでは Expo の手順を使い(
prebuild --cleanでネイティブコードを再生成します)、expo モジュールを使いつつios//android/を手動で管理しているベアアプリではベアの手順を使います。prebuild --cleanはネイティブコードを上書きするため、実行してはいけません。
2. SDK バージョンを選択してインストールする
references/versions.md を読んで、適切な @revopush/react-native-code-push のバージョンを選びます。差分更新には必ず 2.x 系(2.5.x/2.6.x)を使います。新規セットアップで 1.x 系を使ってはいけません。現在の対応関係は次のとおりです。RN 0.76–0.82 → @2.5.1、RN 0.83+ → @2.6.x、RN < 0.76 → サポート対象外(Microsoft CodePush を使用)。その後、インストールします。
- ベア RN:
npm install --save @revopush/[email protected](0.76–0.82)、または@2.6.0/最新の 2.6.x(0.83+)を使います。versions.md を参照してください。 - Expo: SDK と設定プラグインを両方インストールします。Expo SDK に応じて対応する組み合わせに固定してください(SDK 52–54 →
@revopush/[email protected]+@revopush/[email protected]、SDK 55+ →@2.6.0+@1.1.0)。expo installによる自動解決に頼らないでください。references/expo.mdの表を参照してください。
Revopush CLI も最新バージョンをインストールまたは更新するようユーザーに勧めます(npm install -g @revopush/code-push-cli / npm update -g @revopush/code-push-cli)。references/cli-and-releases.md を参照してください。
3. ネイティブ統合を適用する
- ベア RN:
references/ios.mdとreferences/android.mdの手順に従います。検出されたバリアントに対応するセクションを選びます。iOS では Swift と Objective-C、Android では Groovy のbuild.gradleと Kotlin DSL のbuild.gradle.kts、および Kotlin と Java のMainApplicationを使い分けます。MainApplication のバンドル接続では、検出されたAndroid ホストパターンを使って、getJSBundleFile()オーバーライド(§3a)と bridgeless のjsBundleFilePath(§3b)のどちらを使うか選択します。判断基準は New Architecture が有効かどうかではなく、DefaultReactNativeHostが存在するかどうかです。安全ルールに従い、自分の Read/Edit ツールを使って、ファイルを 1 つずつ編集します。 - Expo:
references/expo.mdに従って設定プラグインを編集し、その後npx expo prebuild --cleanを実行します。
4. JS レイヤーを接続する
ルートコンポーネントを codePush() 高階コンポーネントでラップします。これが最もシンプルで適切なデフォルト設定です。
まず適切なファイルを見つけてください。 index.js ではなく、export default <RootComponent> があるファイルをラップします。Bare RN では通常 App.tsx/App.js です(bare の index.js は AppRegistry.registerComponent(name, () => App) であり、デフォルトエクスポートがないため、ヘルパーは正しく処理を拒否します)。Expo Router の場合はルートの app/_layout.tsx です。不明な場合は、package.json の "main" を確認して、登録されるコンポーネントをたどってください。
次に、冪等でバックアップも作成する編集には scripts/wrap-entry.js を使います。
node scripts/wrap-entry.js <path-to-root-component-file> --dry-run # preview
node scripts/wrap-entry.js <path-to-root-component-file> # apply
HOC のオプションについて、またユーザーが更新フローを自分で制御したい高度なケース(手動での codePush.sync()、checkForUpdate()、カスタムのダウンロード/インストール UI、進行状況コールバック)については、references/js-api.md を読んでください。
5. デプロイキーとリリース
iOS と Android のデプロイキーを追加し、references/cli-and-releases.md に従ってリリースを作成する方法をユーザーに説明します。
6. 検証する
まず静的な完全性チェックを実行し、指摘された問題を解決します。
node --version >/dev/null && scripts/verify-integration.sh # from project root
SDK の依存関係、ネイティブの接続、サーバー URL とキー、Podfile の 15.5、JS のラップについて、PASS/WARN/FAIL が報告されます。続行する前に FAIL を修正してください。WARN(プレースホルダーのキーなど)は注意を促すものです。
次に、実際のリリースを使ってエンドツーエンドで確認します。OTA が「動作していないように見える」ものの、実際には動作しているケースがここで分かります。
- リリースビルドを作成します(OTA は debug/dev では適用されません)。bare RN の場合は
npx react-native run-ios --mode Release --no-packager(または Android の release バリアント)を実行します。Expo の場合は dev/native ビルドを作成します(Revopush は Expo Go では動作しません)。 - 目に見える簡単な JS 変更を行い、ビルドに含まれるキーに対応するデプロイ先にリリースします:
revopush release-react <app> <ios|android> -d Staging(references/cli-and-releases.mdを参照してください)。 - アプリを2回再起動します。 デフォルトの
installMode: ON_NEXT_RESTARTでは、1回目の起動時に更新がダウンロードされ、次の起動時に初めて適用されます。1回だけ再起動しても何も変わらず、失敗したように見えます。この点をユーザーにはっきり伝えてください。
このワークフローを簡潔に保つため、該当する分岐の場合にのみ各リファレンスを読んでください。