Cordovaのhot code push代替を探しているなら、おそらく理由は cordova-hot-code-push-plugin とMicrosoftのCodePush for Cordovaの両方が動作しなくなったか、メンテナンスが終了したためです。現在もメンテナンスされている選択肢は @capgo/cordova-updaterです。これは、Capacitorへ先に移行させることなく、チャンネル、ロールバック、暗号化されたbundleを備え、Cordova Android 13+およびCordova iOS 7+アプリにCapgo live updatesをもたらすCordovaプラグインです。
2026年のCordova live updatesの現状
cordova-hot-code-pushはアーカイブ済み
この nordnet/cordova-hot-code-push リポジトリはGitHubでアーカイブされています。最後のcodeの変更は2018年9月で、最後のnpmリリースは cordova-hot-code-push-plugin 、1.5.3です。これは当時のCordovaプラットフォームとファイルベースのWebView読み込み向けに設計されました。最新のCordova Androidは、アプリを https://localhost パスハンドラー経由で配信しており、Cordova iOSは WKWebView 次の app:// スキームを使用しています。それを前提とするプラグインは file:// loading はそのモデルに適合せず、誰も更新していません。
Cordova プラットフォームを更新しなければ、既存のインストールは動作し続けるように見えます。これが罠です。最新の Cordova Android や Xcode への移行は、更新メカニズムのリスクを伴わずにはできません。
Cordova 用 CodePush は終了しました
Microsoft はアーカイブし cordova-plugin-code-push、2022 年に App Center での Cordova サポートを終了し、2025 年 3 月 31 日に build、distribution、CodePush を含む App Center コアサービスを廃止しました。プラグインは App Center の CodePush サービスと通信していたため、更新を提供するバックエンドは残っていません。CodePush サーバーのセルフホスティングに移行した場合でも、アーカイブ済みのクライアントプラグインに依存することになります。
Ionic Appflowの代替手段
cordova-plugin-ionic Cordova アプリを Ionic Appflow のライブ更新に接続していました。Ionic は Appflow の縮小を発表しており、同様に代替手段を探しているチームもいます。その経路については Appflow 代替ガイド.
代替手段に求められる要件
ツールを選ぶ前に、以下の要件を満たしているか確認してください:
| 要件 | なぜ重要か |
|---|---|
| 現在の Cordova Android および iOS で動作する | ストアの要件によりプラットフォームのアップグレードが強制されます: 2026年4月以降の App Store アップロードには Xcode 26、Google Play では毎年の Android ターゲット API 引き上げ |
依存関係なし cordova-plugin-ionic-webview |
そのプラグインは古くなっており、最新のスキームハンドラーと競合します |
| 自動ロールバック | 不適切なbundleによってアプリが起動不能になるのを防ぎます |
| チャンネル | 全ユーザーに配信する前に、内部ユーザーでテストしましょう |
| 署名または暗号化されたbundle | ネットワーク経由で配信されるcodeの改ざんを防止します |
| バージョンターゲティング | より新しいネイティブシェルを必要とするJavaScriptは絶対に配信しないでください |
| CIフレンドリーなCLI | リリースはパイプライン上のコマンド一つで完結させるべきです |
| メンテナンス済み | スター数だけでなく、最近のリリースも確認しましょう |
Cordova向けCapgo
@capgo/cordova-updater 同じ JavaScript API を使用しており、 @capgo/capacitor-updater 同じ Capgo Cloud バックエンドを利用します。Bundles、channels、stats、signing は、Cordova、Capacitor、Electron クライアントで同様に動作します。
要件
- Cordova CLI 12+ 以上
- Cordova Android 13+ (デフォルト
https://localhost/スキーム) - Cordova iOS 7+ (デフォルト
app://localhost/スキーム) cordova-plugin-ionic-webview削除済み
プラットフォームを確認してください:
cordova platform ls
必要に応じてアップグレード:
cordova platform rm android && cordova platform add android@latest
cordova platform rm ios && cordova platform add ios@latest
インストール
Capgo(ダッシュボードまたはCLI)でアプリを作成し、アプリIDを指定してプラグインを追加します:
bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add com.example.app --name "My Cordova App"
cordova plugin add @capgo/cordova-updater --variable APP_ID=com.example.app
cordova prepare android ios
インストール時にさらにオプションを設定できます。これらはプラグイン変数なので、次を実行してください: cordova prepare 変更後に:
cordova plugin add @capgo/cordova-updater \
--variable APP_ID=com.example.app \
--variable DEFAULT_CHANNEL=production \
--variable AUTO_UPDATE=atBackground \
--variable APP_READY_TIMEOUT=10000
AUTO_UPDATE デフォルトでは atBackground。これはバックグラウンドでアップデートをダウンロードし、次にアプリがバックグラウンドになったときに適用します。その他のモードには以下があります: atInstall, onLaunch と off 完全に手動で制御したい場合。
アプリの正常起動をプラグインに通知する
これはスキップできない1行です。 notifyAppReady() を、起動のたびに devicereadyの後に呼び出してください。新しいbundleが APP_READY_TIMEOUT ミリ秒以内にこれを呼び出さない場合、プラグインはそれを失敗と判定し、最後に正常動作したbundleにロールバックします。
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
}, false);
スクリプトの先頭ではなく、アプリが実際にレンダリングされた後に呼び出してください。これにより、起動中にクラッシュしたbundleを検出できます。
手動アップデートのフロー
設定すると AUTO_UPDATE=off、チェック、ダウンロード、適用のタイミングを制御できます:
document.addEventListener('deviceready', async () => {
const { Updater } = cordova.plugins;
await Updater.notifyAppReady();
const latest = await Updater.getLatest();
if (latest.url && !latest.error) {
const bundle = await Updater.download({
url: latest.url,
version: latest.version,
checksum: latest.checksum,
});
// Applied on next background/restart
await Updater.next({ id: bundle.id });
}
});
TypeScript 型はパッケージに同梱されています:
import type { UpdaterPlugin } from '@capgo/cordova-updater';
declare const cordova: { plugins: { Updater: UpdaterPlugin } };
アップデートを公開する
をビルドし www フォルダをアップロードします:
bun run build
bunx @capgo/cli@latest bundle upload com.example.app --path ./www --channel production
テスト後に CI に追加します。 Live Update ページ で、ダッシュボードからチャネルのロールアウト、統計、ロールバックを確認できます。
cordova-hot-code-pushからの移行
- 旧プラグインとその設定を削除します。 削除
cordova-hot-code-push-pluginこのchcpセクション内config.xml、およびcordova-hcpCLI とchcp.json/chcp.manifestビルドからの生成。 - 削除
cordova-plugin-ionic-webview存在する場合、デフォルトの Cordova WebView でアプリが実行されることをテストします。 - Cordova プラットフォームをアップグレード Android 13+ および iOS 7+ へ。
- インストール
@capgo/cordova-updater以下を追加します:notifyAppReady(). - 新しいストアビルドをリリース。 古いインストールには古いプラグインが残ります。Capgo アップデータは新しいバイナリにのみ含まれます。
- 最初の bundle をアップロード テストチャネルにデプロイし、デバイスで確認してから本番環境に昇格します。
ストアから更新しないユーザーは、更新するまで古いメカニズムのままです。移行期間中は、まだ動作している場合は古い更新サーバーをオンラインに保つか、新しいバイナリをインストールするまでそのユーザーにはOTA更新が提供されないことを許容してください。
CodePush for Cordovaからの移行
- 置換する
codePush.sync()の呼び出しにnotifyAppReady()と、自動モードまたはgetLatest/download/nextフロー。 - デプロイキーをチャネルに置き換えます(
DEFAULT_CHANNEL). - 置換する
code-push release-cordovaを使用してbunx @capgo/cli@latest bundle upload. - 以下の
CodePushDeploymentKeyから設定config.xml.
App Center ユーザー向けのステップバイステップ版については、 App Center 移行ガイド.
セキュリティとストアの規約
- 暗号化と署名。 設定
PUBLIC_KEYインストール時に CLI の暗号化キーを使用し、デバイスがアプリ用に署名されたバンドルのみを受け入れるようにします。 - Apple と Google のポリシー。 JavaScript などの解釈型 code を OTA で更新することは、アプリの目的を変更したり、レビューが必要な機能を追加したりしない限り、どちらも許可されています。ネイティブ code、新しいプラグイン、権限の変更にはストアへのリリースが必要です。
- バージョンターゲティング。 バンドルが新しいバイナリにのみ存在するネイティブプラグインを必要とする場合、そのネイティブバージョンをターゲットにします。Capgo のドキュメントの live updateの互換性 その仕組みを説明します。
トラブルシューティング
Bundleはダウンロードされたのに、アプリが旧バージョンを表示します。 まだ使用しています cordova-plugin-ionic-webview、またはカスタムスキーム。削除してデフォルトを使用してください。
更新のたびにアプリがロールバックします。 notifyAppReady() が呼び出されないか、エラー後に呼び出されています。デバイスのコンソールを確認し、起動のたびに呼び出しが実行されることを確認してください。
プラットフォームアップグレード後にiOSビルドが失敗します。 Cordova iOS 7以降には最新のXcodeが必要です。App StoreへのアップロードにはXcode 26が必要です。署名アセットは以下で生成できます iOS証明書ジェネレーター。Capacitorに移行すると、 Capgo のビルド ローカルのMacなしで、クラウドに署名済みiOSビルドを生成できます。
Androidでは更新が動作しますが、iOSでは動作しません。 のiOSスキームが config.xml デフォルトの app スキームであることを確認してください localhost ホスト名。
Capacitor への移行を検討すべきですか?
必須ではありません。Cordova向けの Capgo は、判断を保留しながらリリースを継続できるように設計されています。Capacitor は、メンテナンスされたネイティブレイヤー、iOSでのSwift Package Manager、そしてより大きなプラグインエコシステムを提供します。準備が整ったら、同じ Capgo アプリIDとチャネルを維持したまま、クライアントプラグインを差し替えるだけです。当社の Cordovaから Capacitor への移行ガイド で手順を解説しています。