メインコンテンツまでスキップ

差分アップデート

over-the-air アップデートをデバイスに配信する際は、アップデートのダウンロードとインストールにかかる時間が、スムーズなユーザーエクスペリエンスにとって重要です。

CodePush でデプロイされるアップデートは、通常、アプリのコードのごく一部しか変更しないため、バンドル全体をダウンロードしてインストールするのは非効率です。CodePush はパッケージのバージョン間の差分アップデートを自動的に計算するため、変更部分のみがダウンロードおよびインストールされます。

差分アップデートの仕組みClick to copy link​

差分アップデートパッケージには、新しいバージョン全体ではなく、デバイスにインストール済みのバージョンとインストールするバージョンとの間の変更のみが含まれます。

ファイル単位の差分とバイナリ差分のアップデートパッケージを比較した図

ファイル単位の差分: CodePush は 2 つのリリースをファイルごとに比較します。アップデートパッケージには、新たに追加されたファイルと変更されたファイルの全体、および削除するファイルの一覧のみが含まれます。変更のないファイルはパッケージに含まれません。

バイナリ差分: より効率的な差分の仕組みです。ファイル単位の差分と同様に、変更のないファイルはパッケージに含まれず、パッケージには削除するファイルの一覧が含まれます。2 つのバージョン間で変更されたファイルについては、CodePush はそのファイルの旧バージョンと新バージョンの間のバイトレベルのパッチを計算し、ファイル全体の代わりにそのパッチを配信します。ほとんどの React Native アップデートでは、バージョン間で JS バンドルが必ず変更されるため、この手法により JS バンドルファイル全体の取得を避けられます。

CodePush での差分アップデートClick to copy link​

CodePush はパッケージのバージョン間の差分アップデートを自動的に計算します。これはデフォルトで有効になっており、クライアントが SDK ダウンロードおよびインストールできる、より小さなアップデートが得られます。データ転送コストの削減にもつながります。

ファイル単位の差分はデフォルトで有効になっており、一般的なすべての CodePush SDK 実装で動作します。より効率的なバイナリ差分は、バージョン 10.6.0 以降の Bitrise CodePush SDKでサポートされています。

バイナリ差分は現在オプトイン方式です。有効にするには、アプリの設定で CodePushEnableDeltaUpdates を true に設定してください。

Expo の Continuous Native Generation 機能を使用する場合は、次のキーを app.json ファイルに追加してください。設定の全体については、Expo アプリ向けの CodePush の設定を参照してください。

[
"@bitrise/code-push-sdk/expo",
{
"ios": {
"CodePushDeploymentKey": "...",
"CodePushServerURL": "https://<workspace-slug>.codepush.bitrise.io",
+ "CodePushEnableDeltaUpdates": true
},
"android": {
"CodePushDeploymentKey": "...",
"CodePushServerURL": "https://<workspace-slug>.codepush.bitrise.io",
+ "CodePushEnableDeltaUpdates": true
}
}
]

アップデート間の差分の作成方法Click to copy link​

CodePush の差分は、new update が作成されるときに、サーバー側で自動的に計算されます。差分は常に以前のアップデートを基準とし、Bitrise は新しく作成されたアップデートと直前の 5 つのアップデートとの間の差分を生成します。具体例は次のとおりです。

アップデート v8 が作成されると、v8 について、v7、v6、v5、v4、v3 を基準とした差分パッケージが生成されます。これらの以前のバージョンのいずれかから v8 にアップグレードするアプリは、より小さな差分パッケージを受信します。v1、v2、またはストアリリース (バイナリのアプリストアリリースの一部として配布されたバンドル) からアップグレードするアプリは、完全なアップデートを受信します。