メインコンテンツにジャンプ

継続的デリバリーとは何か?

モバイルチームがライブアップデートを使用して修正を配信する方法を学びましょう

継続的デリバリーとは何か?

生産用修正が完了し、Webビルドは正常で、チームは数分でデプロイすることができます。すると、誰かが思い出して、モバイルリリースはまだアプリストアのレビューに依存している、またはコンプライアンスチェックリスト、またはリリースマネージャーがオフラインの場合があります。codeは完了していますが、製品は動きません。

その間隔は 継続的デリバリー 重要です。 チームに、すべての変更がテストされ、パッケージ化され、追跡可能で、リリース用に準備されている、繰り返し可能な方法を提供します。 最終ステップは、自動化されたプロダクション展開、人間の承認、またはインストール済みアプリに配信されるモバイルアップデートに何でもかまいません。

目次

現代のソフトウェアチームにおける継続的デリバリーの理解

1つのチームは、製品マネージャーが問題を確認するのに時間がかかる前に、問題を修正した小さな変更をマージし、リリース用に検証されたビルドを用意します。もう1つのチームは、モバイルリリースに変更をグループ化し、バイナリレビューサイクルを待ち、リリースウィンドウが狭いときに何も破れないことを願います。両方のチームは継続的統合を使用しているかもしれませんが、最初のチームだけが、ソフトウェアを常にリリース用に準備できるデリバリープロセスを構築しています。

継続的デリバリーとは、自動化されたビルド、テスト、パッケージング、リリース準備を通じて、ソフトウェアを常にリリース用に保つことです。 Jez HumbleとDavid Farleyは2010年に正式にこの実践を普及させました。 Continuous Delivery: Reliable Software Releases through Build, Test,とDeployment AutomationACMレコードの記録に記載されている継続的デリバリの作業のより広いワークフローに、ビルド自動化を超えて継続的統合を拡張した定義

開発者が共有コードベースにマージする変更を検証することは、継続的統合です。継続的デリバリーは、リリース候補を生成し、明確な品質ゲートと検証を実行し、結果のアーティファクトを保存し、制御されたリリースのために利用可能にすることで、次のステップを実行します。

継続的統合は、開発者が共有コードベースにマージする変更を検証します。継続的デリバリーは、リリース候補を生成し、明確な品質ゲートと検証を実行し、結果のアーティファクトを保存し、制御されたリリースのために利用可能にすることで、次のステップを実行します。

継続的デリバリーと継続的デプロイは入れ替わるものではありません。

継続的デリバリーでは、pipelineはすべてのステップを自動化し、生産性に達します。リリースマネージャ、プロダクトオーナー、またはエンジニアは、変更がライブユーザーに到達する時期を決定することができます。継続的デプロイでは、その決定を取り消し、パイプラインが通過した変更を直接生産に送信します。

継続的デリバリーの迅速なプロセスと、より長い待ち時間を持つ伝統的な開発サイクルの比較図。

工場の組み立てラインは、有用な比較事例です。各ステーションは製品をチェックし、結果を記録し、不良品を進めるのを防ぎます。出荷ドックでは、管理者はまだ、どのトラックが出発し、いつ出発するかを決定します。継続的デリバリーは同じように機能します。 自動化は繰り返し検証を取り扱いますが、ビジネスタイミングやリスクについては、人々が制御を維持します。

モバイルチームにとって、この区別は特に重要です。ネイティブバイナリは、ストアのレビュー、調整されたコミュニケーション、または規制されたビジネスユニットからの承認が必要になる場合があります。pipelineは、人によって最終リリースが制御されている場合でも、自動的にバイナリをビルド、テスト、署名、準備できます。

実用的なルール: チームが、要求に応じてテストされた、識別可能なリリース候補を生成できない場合、それはまだ継続的デリバリーを達成していません。

有用な出発点は、 継続的デリバリーPipelineの概要です。重要な質問は、チームが常にリリースするかどうかではなく、次のリリースが予測可能か、繰り返し可能か、安全にプロモートできるかどうかです。

継続的デリバリーPipelineの核となるコンポーネント

継続的デリバリーPipelineは、ソース変更を制御されたリリース候補に変換します。実装は、Webサービス、Capacitorアプリケーション、Electronデスクトップアプリケーションなど、異なりますが、責任は一貫しています。

ソースコントロールは入力定義

すべてのパイプラインには、信頼できる真実の源が必要です。開発者は、code、構成、テスト、パイプライン定義をバージョン管理システムにコミットします。変更はコミット、プルリクエスト、または承認されたリビジョンに追跡できるものでなければなりませんが、未文書化のローカルビルドに追跡されることはありません。

ブランチ戦略は明確さよりも重要ではありません。チームは短期間のブランチ、トランクベース開発、または別のモデルを使用できますが、パイプラインはどのリビジョンがビルドされているか、どのリビジョンがリリースに適しているか明確に示す必要があります。

ビルドは再現可能なアーティファクトを作成します。

ビルドステージでは、ソースcodeを展開可能なものに変換します。クロスプラットフォームアプリケーションでは、Webバンドル、ネイティブプロジェクト出力、Electronパッケージ、署名済みモバイルバイナリなどが含まれるかもしれません。ビルドはクリーンで一貫した環境で実行され、依存関係をキャプチャするのではなく、開発者のマシンに依存するのではなく、依存関係をキャプチャする必要があります。

ローカルでパスしたビルドがCIで失敗した場合、それは配信プロセスではありません。それはリリースドリフトへの招待です。

テストは層化された証拠を提供します。

リリースの信頼を確立するには、単一のテストスイートでは十分ではありません。効果的なパイプラインでは、異なるスコープのチェックを組み合わせる必要があります。

  • ユニットテスト 孤立した関数やコンポーネントで欠陥を早期に検出します。
  • 統合テスト サービス、プラグイン、ストレージ、プラットフォームAPIとの通信を検証します。
  • 受容テスト ユーザー ワークフロー、例えば認証、チェックアウト、同期、オフライン リカバリーを実行します。
  • 静的チェックとポリシー フォーマットの強制、依存関係のルール、セキュリティ要件、他のプロジェクトの標準を強制します。

モバイルおよびクロスプラットフォーム アプリケーションでは、ステージング環境がプロダクションの構成と似ているものに対して、エンドツーエンド テストを実行します。簡略化されたモックに対してテストが通った場合、プラットフォーム パーミッションの問題、API のバージョン ミスマッチ、またはアップデート ハンドリングの失敗を露呈しない可能性があります。

アーティファクトはリリースの特性を保持します。

pipeline は、検証に通ったアーティファクトを正確に保存する必要があります。同じソースから再構築すると、依存関係、ツール、または構成が変更された場合に、異なる結果が得られます。アーティファクトの保存により、チームは安定したオブジェクトをプロモート、検査、比較、ロールバックできます。

デプロイ オートメーションでは、承認されたアーティファクトを目的の環境に公開します。構成を一貫して適用し、誰かまたは何かがアクションを開始したことを記録し、ステージが失敗した場合に明確なステータスを表示する必要があります。チームは、デプロイ サービス、CI ワークフロー、またはプラットフォーム固有のリリース システムを使用できますが、プロセスは、手動コマンドのシーケンスに依存してはなりません。

デプロイ オートメーション ガイドライン

__CAPGO_KEEP_0__ チーム向けのデプロイ オートメーション ガイドライン deployment automation guidance for Capacitor teams 継続的デリバリー パイプラインの 5 つのステージを示す図、ビルド、テスト、デプロイを含みます。

継続的デリバリー パイプラインの 5 つのステージを示す図、ビルド、テスト、デプロイを含みます。

継続的デリバリーの基本

品質ゲートとロールバックは設計の一部です

品質ゲートとは、パイプラインが進む前に必ず通過しなければならない明示的な条件です。例として、テストの成功、有効な署名、承認された依存関係スキャン、環境構成のマッチング、または必要なレビューが挙げられます。ゲートは、チームが保護するものと誰がそれを上書きできるかを文書化することで最も効果的です。

ロールバックも同等の注意が必要です。デプロイが重大な欠陥を導入した場合、回復パスは自動化されたものまたは簡単でテストされたアクションに簡略化されるべきです。パイプラインが迅速にパブリッシュできるものの、チームが前のリリースを手動で再構築する必要がある場合、頻繁なデリバリーの安全性は十分ではありません。 技術的な 継続的デリバリーの定義と自動化されたパイプラインメカニズム

この中心的な特性を強調する技術的な定義は、次のとおりです: 変更は自動的にビルド、テスト、リリース用に準備され、生産デプロイはまだ手動の決定が必要な場合でも、パイプラインはただのスケジュールではありません。リリースの準備が継続的なものになるようにするのは、パイプラインのアーキテクチャです。

パイプラインの健康度を測るDORAメトリクス

チームはデプロイの頻度を増やすことができますが、生産性が安定しないことになります。そのため、リリースの数だけではデリバリーのパフォーマンスを評価することはできません。

DORAは4つのコアフロー メトリクスを定義しています: メトリクス
何を教えてくれるか チームが変更を頻繁にデプロイする頻度
変更のリードタイム コミットから生産環境までの変更がどれくらいの時間を要するか
変更の失敗率 デプロイが失敗、ロールバック、ホットフィックス、または他の回復イベントを引き起こす頻度
サービスを正常な状態に戻すのにかかる平均時間 エリートチームはDORAパフォーマンスバンドで示すように

1日複数回 リードタイムが1時間未満失敗率を維持する under one hour, and maintain a change failure rate in the 0 から 15% の範囲. 低パフォーマンスのチームは 半年以上にわたって 待ちます 6 か月以上 プロダクションに到達するまでの時間を待ちます Octopus の継続的デリバリー メトリクス ペーパーによると.

これらの数字は、コンテキストなしでコピーするべきではないものです。デリバリーを制御システムとして扱う必要があることを示しています。小さなバッチはリリースの表面積を減らし、短いフィードバックループはチームが問題を変更が導入したときに近く検出できるようにします。

スピードだけは罠です

デプロイ頻度は、祝福しやすく、誤用しやすいものです。モバイルチームは、低リスクのバンドルを多数公開し、繰り返し失敗した変更をロールバックするかもしれません。バックエンドチームは、頻繁にデプロイするかもしれませんが、インシデントの後、サービスを復元するのに長い時間を費やすかもしれません。どちらの場合も、スピードだけでは、運用上の弱点を隠します。

4 つのメトリクスを一緒に追跡してください。リードタイムが低下しつつ、変更失敗率が上昇しているとき、pipeline は、安全策よりも速くなっています。デプロイ頻度が低いまま、ビルドが待ち受けている場合、ボトルネックは、ガバナンスではなく、エンジニアリングにあるかもしれません。

現在の DORA ガイドラインでは、コアフロー メトリクスを超えて、 変更失敗率、展開再作業率、失敗展開回復時間、Pipeライン安定性, DORA メトリクス ガイドライン. これらの測定値は、特にモバイル Pipeラインで、失敗したストアの提出、却下されたバイナリ、または問題のあるライブアップデートが、単純な展開数では明らかにならない再作業を生み出すことが多い。

エンドツーエンドのパスをインストルメントする

コミットからビルド、テスト、アーティファクトの公開、承認、展開、回復までのタイムスタンプと結果をキャプチャする。リリースをそのソースリビジョンと環境と結び付ける。モバイルのアップデートの場合、チャンネル、バンドルバージョン、採用状況、失敗状況、ロールバックイベントを含める。

チームは、コンパイラやテストランナーではなく、手動の承認キュー、不信頼性のあるステージング環境、署名の欠如、または誰もが練習していないロールバックプロセスが、最も遅い部分であることがよく発見される。

健康的な Pipeラインは、失敗を早く見つけ、回復を面白くする。

「リリース速度の実践」を使用 全体のフローを調べるのではなく、1 つのステージを孤立して最適化するのではなく。目標は、より速い学習と安全な変更、ではなく、出荷速度に付随する虚飾の数字ではない。 継続的デリバリー vs 継続的展開

Continuous Delivery vs Continuous Deployment

1つのゲートの差はあるが、そのゲートは運用モデルを変える。

継続的デリバリー 継続的デリバリーは、すべてのパッシングの変更をリリースに準備し、最終的な生産決定を人間のコントロール下に保つ。 継続的デプロイ すべてのパッシングの変更がすべての品質ゲートを通過した場合に自動的にプロダクションに昇格する。

アスペクト 継続的デリバリー 継続的デプロイ
Pipelineスコープ ビルド、テスト、パッケージング、リリースの準備 ビルド、テスト、パッケージング、リリースのデプロイ
生産決定 A person may approve or trigger deployment 自動デプロイ
リスク管理 自動化と意図的なリリースゲートの組み合わせ 自動検出と回復に大きく依存
適切な選択 モバイルアプリ、規制されたワークフロー、コーディネーションが必要な変更 強力なテスト、フラグ、監視、ロールバックを備えた成熟したWebサービス
主なトレードオフ より多くのコントロールが可能ですが、承認の遅延が発生する可能性があります より速いフィードバックが得られますが、人間のレビューの遅延が発生する可能性があります

自動デプロイは、チームが迅速に不正な変更を検出して、前回の状態に戻すことができる場合に適しています。機能フラグ、カニリリース、ヘルスチェック、自動ロールバックは、爆発半径を減らすのに役立ちますが、弱いテストや観察性の欠如を補うことはできません。

モバイルアプリケーションでは、継続的デリバリーがより誠実な選択肢となることが多い。ストアレビュー、ネイティブバージョン管理、顧客コミュニケーション、プラットフォームの制約などにより、完全自動のプロダクションデプロイは現実的ではない。チームは、ビジネスリスクやプラットフォームリスクを伴うステップを除いて、ほぼすべてのことを自動化し、リスクを意図的に保留することができる。

採用障壁に関する研究は、慎重さを裏付けています。2017年の実証研究では 11の要因 が、組織が自動的にプロダクションに変更をプッシュすることを制限したことを明らかにしました。これには、自動受け入れテストの欠如、手動の品質チェック、自動テストのカバレッジ不足、官僚的なデプロイプロセスなどがあります。これらは、継続的デリバリーの制限に関する の研究.

に記載されています。

選択は成熟度の競争ではありません。チームが制御できる失敗モードに基づいて選択すべきです。 2つのモデル間の詳細な比較については、を参照してください。実践的なテストは単純です:承認ゲートを削除すると、チームが問題を検出して逆転する前にユーザーに公開される場合、ゲートを維持し、パイプラインを改善することから始めます。

モバイルおよびクロスプラットフォームアプリケーションのための継続的デリバリー

モバイルチームは、ウェブチームが避けることが多いデリバリー制約を引き継ぎます。ウェブデプロイは、プロダクションシステムが新しいcodeを提供するのと同時にユーザーに到達することができます。ネイティブモバイルの変更は、ストアレビュー、ユーザーの採用、インストールを待たなければならないため、利用可能になるまで待たなければなりません。

それは、モバイルチームが継続的な配信を放棄する必要があることを意味しない。むしろ、プラットフォームが許可する場合に、ネイティブシェルとウェブ層を分離する必要があることを意味する。 ネイティブシェル ウェブ層 __CAPGO_KEEP_0__とElectronアプリケーションは、ネイティブ機能と別々にJavaScript、CSS、資産をパッケージ化できるため、有効な変更に対して新しいストアバイナリが必要なく配信パスを作成できる。 https://Capacitor.appからスクリーンショット

Screenshot from https://capgo.app

そのワークフローでは、チームはバンドルをCIでビルドし、テストし、品質ゲートを適用し、アーティファクトを記録する。デプロイステージでは、承認されたバンドルをステージングまたはプロダクションのチャンネルに送信し、インストールされたアプリケーションは次の起動時にアップデートを適用する。 Capgo モバイルパイプラインには追加のゲートが必要

実用的なクロスプラットフォームパイプラインは、以下のアプリケーション動作以外のものを検証する必要がある

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__

  • プラットフォーム互換性: ターゲットアプリのバージョンにすでにインストールされているネイティブランタイムと組み合わせて、バンドルが正常に動作することを確認します。
  • 署名と整合性: 公開されたアップデートが署名され、クライアントは有効なバンドルのみを受け入れることを確認します。
  • チャンネルターゲット: 開発からステージング、そして最後にプロダクションまで、混在するアウディエンスを混ぜないようにアップデートを推進します。
  • 起動時復旧: アップデートが失敗した場合、失敗したアップデートを拒否またはロールバックできることを確認し、応用できないようにします。
  • ネイティブ境界チェック: ネイティブプラグインまたはパーミッションの変更が必要なWeb層の変更をブロックします。 それらはまだ新しいバイナリリリースに属するためです。

差分アップデートは、変更されたファイルのみを公開することで、送信されるデータの量を削減できます。 ターゲットロールアウトも、広範な採用前に制御されたアウディエンスに変更を公開することができます。 その制御はテストを置き換えるものではなく、ストアポリシーまたはネイティブ互換性要件を回避する理由にはならない。

以下のウォークスルーは、CDが信頼できるものになるように、検証ステージを削除せずに、ライブアップデートがCapacitor配信ワークフローにどのように組み込まれるかを示しています。

重要な設計決定は、Web Bundleとして配信できるものと、ネイティブリリースが必要なものを定義することです。UIの変更、コピー、JavaScriptのロジック、および互換性のあるアセットは、より速いパスを遂行できます。ネイティブcode、権限、プラグイン、またはプラットフォームのエンタイトメントの変更は、より遅い、ストアを介したパスを必要とします。そうしたものを別のリリースクラスとして扱うことで、パイプラインを速く維持できます。ただし、モバイルプラットフォームには外部の制御が存在しないと仮定する必要はありません。

規制と速度のバランス

規制チームは、遅いリリースを非難することが多いが、深い問題は通常、手動の規制作業、分離されたドキュメント、および弱い監査トレイルにある。システム間で証拠をコピーする必要があるリリースは、自動化されたテストが優れたものであっても、遅いままになる。

継続的な配信は、チームがパイプラインに要件をエンコードすることで、制御を向上させることができる。品質ゲートは、承認されたテスト、署名されたアーティファクト、文書化された変更の参照、またはレビューを要求することができる。パイプラインは結果を自動的に保持することができ、監査官やオペレータは記憶とスクリーンショットに頼るのではなく、一貫したレコードを取得できる。

2025年の調査では、50の金融機関が自動化された継続的な配信パイプラインを使用していることがわかりました。 調査によると、自動化された継続的な配信パイプラインは、速度と安全性の両方を向上させることができ、金融機関における継続的な配信の報告書によると、速度と安全性の両方を向上させることができる。 制御は自動化で繰り返し実行できる

Automation makes controls repeatable

手動の展開手順はバリアを生み出す。1つのエンジニアがチェックリストを正しく実行した場合、他のエンジニアはマイグレーションチェックを省略したり、間違ったアーティファクトを展開したりする可能性がある。自動化は責任を排除しないが、予想される手順を実行可能でレビュー可能にする。

規制管轄区域のPipelineは、次の制御を明示的に表示するべきである。

  • 変更の特性: リリースをソースリビジョン、アーティファクト、チケット、承認ロールと関連付ける。
  • 品質の証拠: リリースレコードとともにテスト結果とゲートアウトカムを保存する。
  • プロモーション境界: 開発、ステージング、生産の権限を分離する。
  • ロールバックの準備: 前の知られている良好なバージョンを保持し、回復テストを実行可能にする。
  • 運用信号: リリース後、エラー、利用可能性、更新失敗、展開結果を監視する。

リスクは、チームが迅速に運用を開始することではなく、観測性、ロールバック機能、変更追跡機能のない運用を開始することです。 chậmい手動プロセスでも、未テストまたは不正しく構成された変更をリリースすることができますが、自動化されたプロセスでは、常にリリース前にブロックすることができます。

金融技術または医療分野のモバイルチームにとって、継続的な配信とは、ドキュメント化された承認ゲートを持つ自動化されたバンドルパイプラインかもしれません。 これは、組織がリスクモデルが必要とする制御を取り除く必要がないままに、主な利益を提供します。 その要件を通して作業するチームは、 規制要件を考慮してCapacitorアプリケーションを使用できます。 安全性は、証拠、制御された露出、回復から来ます。 それが、すべてのデプロイを手動で行うことから来るわけではありません。

実装手順と回避すべき一般的な罠

チームがすでに従っているパスから始め、手動のハンドオフを一つずつ削除してください。

アプリケーション__CAPGO_KEEP_0__、テスト、構成、パイプライン定義をバージョン管理下に置いてください。

  1. Put application code, tests, configuration, and pipeline definitions under version control. ビルドとテストのステージを自動化してください。
  2. クリーンな環境で単体テスト、統合テスト、受け入れテストを実行し、生産へのプロモーションを自動化する前に実行してください。 明確な品質ゲートを定義してください。
  3. 明確な品質ゲートを定義してください。 チェックを書き留め、パイプラインが停止する失敗を特定する。
  4. 不可変アーティファクトを保存する。 検証に合格したアーティファクトをプロモートし、各環境ごとに再構築するのではなく。
  5. 自動的に展開およびロールバックする。 失敗したリリースは、緊急の手動調査ではなく、明確な回復アクションをトリガーする。
  6. 観察性とメトリクスを最初から追加する。 展開頻度、リードタイム、変更失敗率、およびサービス復旧までの平均時間を追跡する。

一般的な失敗は予測可能である。チームは、テストカバレッジを向上させる前にリリースのスケジュールを自動化し、承認キューを常に開放し、生産環境に似ていない環境に展開し、またはリリース頻度のみを測定する。機能フラグは、ユーザーへの露出から展開を分離することができるが、未テストのcodeや忘れられたフラグのクリーンアップを免除することはできない。

モバイルおよびクロスプラットフォームアプリの場合、ネイティブおよびWebリリースの境界を定義する前に、ライブアップデートのパスを選択する。バンドルパイプラインは、ネイティブ機能が必要な変更を拒否し、互換性のあるJavaScript、CSS、コピー、構成、およびアセットは自動化されたルートを遂行できるようにする。


Capgoは、CapacitorJSおよびElectronアプリ向けに署名されたライブアップデート、ターゲットチャンネル、CI/CD統合、差分バンドル、観察性、およびロールバック保護を提供し、チームがストアレビューを唯一の配信パスとして扱うことなく、適格なモバイル変更をリリース用に準備できるように支援する。 Capgoを評価し、既存の継続的配信パイプラインにそのアップデートワークフローを統合する方法を検討する。 __CAPGO_KEEP_0__を評価し、既存の継続的配信パイプラインにそのアップデートワークフローを統合する方法を検討する。

リアルタイムの更新はCapacitorアプリに適用されます。

ウェブ層のバグが生じた場合、Capgoを通じて修正を配信し、アプリストアの承認待ちの日数を省きます。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路を通じます。

マーティンから人間のサポートを受けます。

今すぐ始めましょう。

最新のブログ記事

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。