メインコンテンツへスキップ

Capacitor アプリ向け OTA アップデートソフトウェアのデプロイ方法

Capacitor アプリの OTA update ソフトウェアをセットアップし、リリースを QA と production のチャンネルにルーティングし、CI/CD と連携して、Capgo でロールアウトを監視します。

Capacitor の OTA リリースに向けて、QA、ベータ、本番用の各チャンネルを計画しているエンジニア。

Capacitor アプリの Web レイヤーのバグなら、ストア経由の新しいビルドをユーザーにインストールさせなくても修正できることがよくあります。OTA update software は、ネイティブシェルを維持したまま、アプリの Web bundle に対象となる変更を送信します。ここでは、QA から始まり、制御されたロールアウトを経て、失敗時のチェックまでを含むリリースフローを解説します。

YouTube、Quora、Reddit に寄せられた OTA Update software に関する 69 件のコメントや質問を分析したところ、36% が実装の詳細について尋ねていました。

目次

  • ステップ 1: OTA で配信可能なアプリの変更内容を確認する
  • ステップ 2: QA、ベータ、本番用の各チャンネルをセットアップする
  • ステップ 3: OTA Update software を CI/CD に接続してデプロイする
  • ステップ 4: ロールバックとセキュリティチェックでリリースを保護
  • ステップ 5: 利用状況を追跡し、次回のロールアウトを改善
  • よくある質問
  • まとめ

ステップ 1: OTAで配信可能なアプリの変更内容を確認

まず、計画している変更を「Webレイヤー」か「ネイティブレイヤー」かに分類します。この判断によって、OTAでのリリースが可能か、あるいは新しいアプリのビルドが必要かが決まります。

Capacitor アプリでは、WebレイヤーがWebView内で表示されるHTML、CSS、JavaScript、およびアセットを保持しています。OTAアップデートはこのbundleを置き換えることができます。JavaScriptのバグ修正、画面レイアウトの変更、テキストの修正などは、アプリの既存の目的の範囲内であれば、この方法で対応可能です。

ネイティブレイヤーは異なります。これにはコンパイル済みのiOSまたはAndroidの code、ネイティブ設定、権限、およびデバイス機能に接続するプラグインが含まれます。プラグインの追加や権限の変更には、新しいNative Buildと通常のストアへのリリースプロセスが必要です。Web bundleでこの境界を回避しようとしないでください。

デプロイ前に、簡単なリリースチェックリストを作成しましょう。変更されたファイル、bundleを実行可能なインストール済みアプリのバージョン、およびアップデートが既存のネイティブプラグインに依存しているかどうかを確認します。もしbundleがインストール済みのアプリに含まれていないプラグインを呼び出した場合、ユーザーは機能の不具合やエラーに遭遇する可能性があります。

ストアの規約によって、live update が変更できる内容にも制限があります。これらの制限の詳細については、以下の App Storeの規約に準拠したOTAアップデートガイド をリリースレビューの一部として活用してください。

OTAという言葉は、他の分野ではより広い意味を持ちます。例えばコネクテッドカーは、クラウド接続、Wi-Fi、またはセルラーサービスを通じてECU(電子制御ユニット)のファームウェアを受信します。小型デバイスであれば、Wi-FiやBluetooth Low Energy経由でファームウェアを受信することもあります。これらのリリースには、ブートローダー、ストレージ容量の制限、電力チェック、リカバリイメージなどが含まれる場合があります。Capacitor web bundleは組み込みファームウェアとは異なり、そのロールアウト計画は変更対象となるアプリレイヤーに合わせる必要があります。

重要なポイント: Webレイヤーの変更が可能な場合は、live update を使用してください。コンパイル済みの code、プラグイン、または権限(permissions)に変更が及ぶ場合は、新しい Native Build を作成して提出する必要があります。

ステップ 2: QA、Beta、Production 用のチャンネル設定

チャンネルとは、インストール済みのアプリに対してどの bundle を受信できるかを伝える、名前付きのパスのことです。最初のライブリリースを行う前に、QAビルドが誤ってproduction bundleを受信しないよう、個別のチャンネルを設定しておきましょう。

まずはシンプルな構成から始めましょう。内部チェック用に QA チャンネル、限定テストグループ用に beta チャンネル、そして一般ユーザー向けに production チャンネルを使用します。チームのリリースのノートやデプロイ設定において、各チャンネルの目的を明確にしておいてください。

次に、適切なアプリビルドを適切なチャンネルに割り当てます。インストールされたアプリは、対象のチャンネルをリッスンするように設定されている必要があります。bundle を upload する前に、テストデバイスでこの設定を確認してください。もし QA ビルドが production をリッスンしていると、チェックが完了する前に production リリースがテスターに届いてしまう可能性があります。

各チャンネルを、明確なレビュー工程と紐付けて管理しましょう。例えば、QAチームは主要な画面の読み込みやサインインフローが正常であることを確認できます。ベータテスターは、より幅広い利用シーンで変更点を確認できます。これらの検証を経て、初めて本番環境へリリースすべきです。

Capgo は、QA、ベータ、本番用のチャンネルベースのリリースをサポートしています。ロールアウト制御機能により、一部のデバイスにのみ新しいbundleを配信し、他のユーザーは安定したフォールバック状態を維持するといった運用が可能です。オーディエンスグループやリリースゲートを定義する場合、この チャンネルベースのロールアウトガイド がワークフローの構築に役立ちます。

まずはチームが監視可能な少人数のコホートから開始しましょう。公開前に、アップデートの失敗率の上昇やサインイン経路の破損など、ロールアウトを停止する条件を事前に合意しておきます。明確な停止ルールを決めておくことで、最初の警告が出た際に慌てて判断を下すことを防げます。

ステップ3: OTA Update SoftwareをCI/CDに接続してデプロイする

CI/CDを利用することで、code の変更を、再現可能なビルドおよびリリースタスクへと繋げられます。テスト済みの同一bundleがビルド、チェックされ、意図したチャンネルへ確実に送信されるよう設定しましょう。

まずはOTAデプロイを開始するトリガーとなるイベントを選択します。リリースブランチへのマージ、バージョンタグ、あるいはパイプラインでの手動承認などが考えられます。レビュープロセスに合わせたトリガーを選びましょう。開発ブランチのすべての変更が、そのまま本番環境に公開されないよう注意してください。

次に、必要な認証情報をCI/CDのシークレットストアに追加します。デプロイ用のキーをソースファイルやビルドログに含めないようにしてください。アクセス権限は必要な担当者やジョブのみに制限し、万が一漏洩した場合は速やかに認証情報をローテーションしてください。

bundleをuploadする前に、pipelineでweb assetsをbuildするようにします。ビルドの失敗や、ネイティブ依存関係の不整合を検知するチェックを追加してください。リリースに必要なネイティブプラグインがインストール済みのアプリに含まれていない場合は、OTAジョブを停止し、代わりにNative Buildを準備するようにします。

を使用すると、 Capgoまた、CLIはワンコマンドでのデプロイフローをサポートしています。アプリのweb assetsをbuildした後、ローカルのターミナルやCI/CDジョブから設定済みのデプロイコマンドを実行します。ターゲットとなるchannelを慎重に設定し、コマンドとそのオプションをバージョン管理に含めておくことで、チームメンバーがリリースパスをレビューできるようにします。

最初のデプロイはQA環境に対して行います。テストデバイスでアプリを開き、bundleのチェック、ダウンロード、そしてアップデート適用後に意図した変更が表示されることを確認してください。リリース記録にはbundleのバージョンとchannelを保存しておきましょう。この詳細情報により、報告された問題から正確なロールアウトを追跡できるようになります。

pipelineを構築する前にセットアップパターンを比較したい場合は、この OTAアップデートSaaSセットアップガイド では、一つのリリースワークフローの一部として、channel、ロールバック計画、analytics、CI/CDについて解説しています。

プロのヒント: 本番環境へのデプロイには承認ステップを必須にします。自動化によってリリースをbuildしてuploadすることは可能ですが、最終的なターゲットchannelやロールアウト計画は人間が確認するようにします。

QAを通過したら、計画されたステージに従ってリリースを昇格させます。ステージ間でテスト済みのbundleを変更しないようにすることで、本番環境のユーザーにチームが承認したものと同じアーティファクトを届けることができます。

ステップ4: ロールバックとセキュリティチェックでリリースを保護する

リリース計画には、最初のユーザーに bundle が届く前にリカバリパスが必要です。誰がロールアウトを一時停止できるか、チームがどのように安定版を復元するか、どのシグナルを失敗とみなすかを決めておきましょう。

まず、bundle の整合性を検証します。Code 署名を使用すると、アプリはアップデートが信頼できるソースから提供され、転送中に改ざんされていないかを確認できます。署名鍵はアクセス制限されたシークレットストアに保管してください。アプリはアップデートを有効化する前に検証する必要があります。

また、bundle を、それを実行するネイティブアプリと照らし合わせて確認しましょう。インストールされているシェルに含まれていないネイティブ code を呼び出すと、Web アップデートでも失敗する可能性があります。アップロード前にプラグインとネイティブ依存関係の変更を確認し、サポート対象とする最も古いアプリバージョンで bundle をテストしてください。

デプロイ前にロールバックルールを設定しましょう。シンプルな計画では、安定版の bundle、ロールアウトを一時停止できる担当者、以前のバージョンを復元する手順を定めます。Capgo は、段階的ロールアウトの対象外のデバイスを安定したフォールバックに保ち、失敗率が、最小サンプルサイズを満たした上で設定した閾値を超えると、ロールアウトを自動で一時停止します。この一時停止により、チームが何が失敗したかを確認している間の影響の拡大を抑えられます。

自動一時停止とロールバックは異なるアクションです。一時停止は、新しいリリースがさらに多くのデバイスに配信されるのを止めるものであり、ロールバックは、影響を受けたデバイスを正常に動作する bundle に戻すものです。ワークフローがどちらの制御を使っているかを把握し、本番インシデントの発生前にリカバリパスをテストしておきましょう。

機密性の高いアップデートシステムでは、署名と暗号化でそれぞれ異なるリスクに対処します。署名は、誰がbundleを公開したか、および内容が改ざんされていないかの検証に役立ちます。暗号化は、通信中やストレージ保存中のbundleの内容を保護します。配信にはHTTPSを使用し、署名鍵を保護してください。また、暗号化をアプリレベルのチェックの代わりとして扱わないようにしましょう。

車両のファームウェアなど、安全性が重視されるシステムにアップデートが影響を与える場合、チームは個別の検証およびフェイルセーフ計画を立てる必要があります。アクティベーション前に、停電、接続不良、ストレージ容量の制限などを考慮してください。Capacitorのウェブリリースは、ファームウェアの安全性テストや、組み込みシステムに適用されるコンプライアンスプロセスに代わるものではありません。

本番環境へのロールアウト前に、OTA bundleの署名とロールバック制御を確認するリリースエンジニア。

ステップ 5: 採用状況を追跡し、次回のロールアウトを改善する

デプロイは、uploadが成功しただけで完了したわけではありません。デバイス上で何が起きているかを確認し、その結果に基づいて、継続、一時停止、または以前のbundleへの復元を判断してください。

バージョンとchannelごとにリリースを追跡します。downloads、installs、失敗した試行、採用率、および成功率を監視してください。失敗が発生したデバイスとアプリのバージョンを確認します。インストール数が多いだけでは、新しいbundleが正常に起動したことの証明にはなりません。

CapgoのObserveビューでは、特定のバージョンとチャンネルごとに、インストール数、失敗数、採用率、成功率を5分単位で追跡できます。また、インストール済みアプリのビルドとネイティブパッケージが異なるbundleを配信しているチャンネルを検出し、ブロックの原因となるパッケージを特定して依存関係の差分を表示できます。

これらのシグナルを、定義済みの判断ルールに沿って活用しましょう。失敗率が合意した範囲内であれば、ロールアウトを次のグループへ進めます。しきい値を超えた場合は、一時停止して対象のバージョンとチャンネルを調査してください。原因が不明なうちはロールアウトを拡大しないでください。

変更内容、対象ユーザー、開始コホート、結果を簡潔なリリースノートにまとめておきましょう。ロールアウトを一時停止した場合は、主要な問題と実施した対応も追記してください。これにより、元のリリース担当者がサインオフした後にサポートから問題報告があっても、次のオンコール担当への引き継ぎがスムーズになります。

アナリティクスは、無計画なロールアウトのコストを可視化するのにも役立ちます。採用と失敗のシグナルがなければ、bundleがアップロードされたことは分かっても、ユーザーに届いたか、正しく起動したかまでは判断できません。リリースシグナルの詳細については、次を参照してください。 リアルタイムのアプリアップデート・アナリティクスガイド.

ロールアウト後は、エンジニアリングとサポートの両チームで結果をレビューしましょう。コホートのサイズが役立ったか、停止ルールが問題を検知できたか、リカバリ手順が明確だったかを確認します。プロセスは一度に1箇所ずつ変更してください。そうすることで、次回のリリースを評価しやすくなります。

重要なポイント: リリースごとにbundleのバージョンとchannelで追跡し、設定した失敗しきい値に基づいて配信の停止または継続を判断できます。

よくある質問

Capacitor アプリでは、どのような内容をOTAでアップデートできますか?

Capacitor アプリでは、HTML、CSS、JavaScript、アセットなどの対象となるWebレイヤーファイルをOTAで更新できます。ネイティブシェルはそのまま維持されます。プラグインの追加、権限の変更、またはコンパイル済みのiOS/Android code の変更を伴う場合は、新しいNative Buildを作成し、通常のストアプロセスを通じて申請してください。

OTAアップデートにはApp Storeの審査が必要ですか?

対象となるWebレイヤーのアップデートは、各ストアの規約に従い、アプリの承認された範囲内であれば、新しいストア申請なしでユーザーに配信可能です。ネイティブの code や権限の変更には、新しいアプリバイナリが必要です。また、OTAアップデートはアプリの本来の目的の範囲内で行う必要があります。

本番環境へリリースする前に、OTAリリースをどのようにテストすべきですか?

まずbundleをQA channelに送信します。サポート予定のアプリバージョンでテストを行い、主要な画面やネイティブプラグインの呼び出しが正常に動作することを確認してください。より広いテストグループを使用する場合は、テスト済みの同じbundleをbetaへ移行します。本番環境へのリリースは、限定的なコホートから開始し、明確な停止しきい値を設定してください。

Capgo は段階的なロールアウトとモニタリングをサポートしていますか?

はい。Capgo は、一部のデバイスにのみbundleを配信し、他のデバイスは安定したフォールバック状態を維持するロールアウトをサポートしています。Observeビューでは、インストール数、失敗数、採用率、成功率を、バージョンおよびchannelごとに5分間隔で追跡できます。また、Capgo は、失敗率が設定したしきい値を超えた場合にロールアウトを自動的に一時停止します。

まとめ

OTAリリースは互換性のあるWebレイヤーの変更に限定し、QAチャネルと本番チャネルを経由させ、ロールアウト前にリカバリールールを設定してください。Capgo を使えば、bundleのデプロイとリリース信号を一つのワークフローに統合できます。まずは14日間の無料トライアルを開始し、本番に接続する前にテスト用のbundleをQAへ送信しましょう。

Capacitor アプリ向けの Live Updates

Web レイヤーのバグが本番で発生したら、App Store の審査を何日も待たずに Capgo で修正を配信しましょう。ネイティブの変更は通常の審査フローに残したまま、ユーザーはバックグラウンドでアップデートを受け取れます。

最新のブログ記事

Capgoは、真にプロフェッショナルなモバイルアプリを作るために必要な最高のインサイトを提供します。