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

リリース速度: それを測定し改善する方法

モダンソフトウェアチームにとってリリース速度とは何か、DORAメトリクスを使用して測定し、実践的な戦略を通じて速くリリースする方法を学びましょう

リリース速度: それを測定し改善する方法

Elite software teams deploy code about 1,460回リリースします、低パフォーマンスのチームは約 1.5回年に1回、によると DORAの2021年DevOpsのAccelerate State of DevOpsレポート。それは約 973倍のリリース頻度の差、リリース速度は、チームが承認された変更をユーザー価値に定期的に、安全に、そして毎回のリリースを大きなイベントに待たずに実現できるかどうかを示す、非虚偽の指標です。

モバイルチームには、より正確な定義が必要です。Capacitorアプリケーションには、App StoreまたはPlayレビューが必要なネイティブcodeが含まれることがあります。また、Web層は、独立して頻繁に変更されることが多いこともあります。ビニールサブミッションのみを測定すると、ユーザーが経験する更新を無視することになります。実際の質問は、チームがアプリをビルドする頻度ではなく、顧客が機能改善、修正、コンテンツ変更、または構成更新を受け取る頻度です。

目次

ソフトウェアチームにとってリリース速度とは実際に何を意味するか

DORAは、ソフトウェアを生産環境またはエンドユーザーにデプロイする頻度を、チームがソフトウェアをデプロイする頻度を測定するために使用されるコアの配達指標として定義しています。 エリートパフォーマーは、2022年アクセレートのDevOpsの現状レポートに記載されているように、1日複数回のデプロイを実施することができ、低パフォーマーは6か月に1回以下の頻度でデプロイを実施します。 チャートが示すように、エリートのソフトウェアチームは、低パフォーマーと比べて208倍の頻度でデプロイを実施します。 リリース速度コミットされた__CAPGO_KEEP_0__から、ユーザー向けの機能的な変更を生産環境にデプロイするまでの時間を指します。このプロセスには、レビュー、テスト、パッケージング、デプロイ、ロールアウト、採用、エラーが発生したときの回復などが含まれます。高速なビルドパイプラインは役立ちますが、自動的にクライアントフィードバックループを高速化することはできません。

モバイルが計算式を変える理由

native_build_builder_credit_first is the rate at which a team delivers functional, user-facing changes from committed code to a live experience. That journey includes review, testing, packaging, deployment, rollout, adoption, and recovery when something goes wrong. A fast build pipeline helps, but it doesn’t automatically produce a fast customer feedback loop.

リリース速度

Webチームは、JavaScriptの変更を直接インフラに展開し、すぐに利用可能にすることができます。モバイルチームは、異なる依存関係の連鎖に直面します。ネイティブの変更は、新しいバイナリ、ストアの提出、レビュー、承認、ロールアウト、ユーザーの採用を必要とします。チームは修正を迅速に完了することができますが、ユーザーがインストールしたアプリケーションが変更を受け取るまで待つ必要があります。

Capacitor、Ionic、Electronチームにとって、その区別は重要です。彼らのアプリケーションは、ネイティブ機能とHTML、CSS、JavaScript、アセット、設定を組み合わせています。すべての変更をバイナリリリースとして扱うことは、単純なインターフェイスまたは論理更新を遅いパスを通じて強制します。

実践的なルール: codeの変更からユーザーが意図された体験を受け取るまでの時間を測定するのではなく、コミットからビルド完了までの時間だけを測定しないこと。

有効な運用モデルは バイナリリリースのサイクル実装された体験の頻度を分離します。バイナリリリースのサイクルは、チームがネイティブのパッケージングとストアの準拠を効率的に処理するかどうかを示します。実装された体験の頻度は、ユーザーが意味のある変更を受け取る頻度を示します。区別は、より広範な 運用効率の実践に属するものです。パイプラインは技術的に忙しくても、顧客はほとんどの動きを見ない可能性があります。

目標は、プラットフォームの規則を回避したり、任意の実行可能な動作を強制したりすることではありません。実行可能なWeb層の変更を、変更に適した配信メカニズムを通じてルーティングし、ネイティブの機能を通常のストアプロセス内に維持することです。

リリース速度の核となる指標

デプロイの頻度は会話を始めるが、リリースのパフォーマンスを単独で説明することはできない。DORAは、デプロイの頻度、またはそれら間の時間を指す。 現在のフレームワークには5つの核となる指標 含まれており、再作業率を含む。再作業率は、以前の変更を修正するために費やされる労力ではなく、新しい価値を提供するために費やされる労力を追跡する。 DORAの指標ガイド

を使用して、チーム間で定義を一貫させる。

速度と安定性を共に追跡する

  • これらの指標はシステムとして機能する。 デプロイの頻度
  • は、変更が生産環境またはエンドユーザーに到達する頻度を測定する。 measures the time from code commit to deployment.
  • リリース失敗率 リリース失敗率は、デプロイが失敗、ロールバック、または修正を引き起こす頻度を測定します。
  • 復旧平均時間 復旧平均時間は、生産障害後にチームがサービスを復旧するスピードを測定します。
  • 再作業率 再作業率は、以前の変更を修正するために使用される配信容量の割合を示します。

モバイルチームは、配信パスの差異を考慮してリードタイムを解釈する必要があります。JavaScriptまたはアセットの変更はユーザーに使用可能な状態になりますが、ネイティブの変更はバイナリパイプライン内に残っている可能性があります。両方のパスを1つのダッシュボードに組み合わせると、有能なチームが遅く見え、App Storeのレビューのボトルネックを隠す可能性があります。

歴史的なDORAのレベルは、有用な用語を提供します。エリートのパフォーマーは、1日に複数回のデプロイを実行できます。高パフォーマーは、1か月に1回から1週間に1回の間、平均パフォーマーは6か月に1回から1か月に1回の間、低パフォーマーは6か月に1回以下の頻度でデプロイします。DORA 2022レポートによると、これらのレベルは配信能力を説明します。リスク、チームサイズ、バイナリリリースとライブウェブレイヤーアップデートの差異を考慮せずにこれらのレベルを目標としていることはできません。 DORA 2022レポートこれらのレベルは配信能力を説明します。リスク、チームサイズ、バイナリリリースとライブウェブレイヤーアップデートの差異を考慮せずにこれらのレベルを目標としていることはできません。

リスクを考慮したダッシュボードを使用する

リリース頻度のグラフだけを使用すると、リスクの高いバッチングを褒めます。失敗率のグラフだけを使用すると、変更を避けるチームを隠します。クロスプラットフォームのチームは、ネイティブのバイナリリリースとウェブレイヤーアップデートを分離し、更新の採用、ロールバックイベント、再作業を追跡する必要があります。

パフォーマンス階層 展開頻度 変更のリードタイム 変更失敗率 復旧までの平均時間
エリート オンデマンド、1日あたり複数の展開 展開フローのトラッキング 安定性のガイドラインとしてのトラッキング 復旧速度のトラッキング
1か月ごとに1週間ごとに 展開フローとともに追跡 安定性の基準として追跡 復旧速度の追跡
Medium 半年ごとから毎月 展開フローとともに追跡 安定性の基準として追跡 復旧速度の追跡
Low 半年ごとより少ない頻度 展開フローとともに追跡 安定性の基準として追跡 リリース速度を追跡する

計測していないメトリックに対してベンチマークを作成しないようにする。基準を確立し、ネイティブとウェブ層の変更を分離し、より速い配信が小さなバッチ、管理可能なエラー、そして迅速な復旧をもたらすかどうかを確認する。 開発者向けの製品性向上ガイド バイナリキャデンスと実装されたエクスペリエンスの頻度

バイナリリリースとは、ストアまたは承認されたデスクトップチャネルを通じて提出されたアプリケーションパッケージです。

実装されたエクスペリエンスの頻度 ユーザーが見たりすることができるものの変更を受け取る頻度です。両方の測定値は重なり合いますが、互換性がありません。 月に一度のバイナリキャデンスは、頻繁なウェブ層の配信と共存することができます。__CAPGO_KEEP_0__ チームは、ネイティブプラグイン、パーミッション、OS統合、アップデートの変更をバイナリリリースとして予約するかもしれませんが、JavaScript、CSS、コピー、構成、資産の更新は制御されたライブアップデートパスを通じて送信するかもしれません。バイナリの数字はパッケージングの作業を表します。エクスペリエンスの数字は製品のイテレーションを表します。

A monthly binary cadence can coexist with frequent web-layer delivery. A Capacitor team might reserve binary releases for native plugins, permissions, OS integrations, and updater changes, while sending eligible JavaScript, CSS, copy, configuration, and asset updates through a controlled live-update path. The binary number describes packaging work. The experience number describes product iteration.

1 つのモバイル番号では十分ではない理由

アプリストアのレビューは、バックエンドチームが同じように直面することとは異なる遅延を導入します。

App store review introduces latency that backend teams don’t face in the same way. The Digiaによるモバイルリリース速度分析 ストアレビューは 24時間から48時間の遅延 モバイルチームは、バイナリリリースのペースと実装されたエクスペリエンスの頻度を別々に追跡するべきであると主張します。ユーザー採用は別の遅延を生みます。承認後も、ユーザーは新しいバイナリをすぐにインストールしない可能性があります。

これは、共通の測定値の欠陥を生み出します。チームは頻繁にバイナリを提出する可能性がありますが、多くの顧客は古いバージョンを実行し続けます。製品チームが提出のみを測定すると、ユーザーが経験していない進歩を主張できます。

各変更を適切なパスを通してルーティングする

バイナリパイプラインを使用して、ネイティブパッケージングが必要な変更を処理すること。機能フラグ、リモート設定、コンテンツ配信、署名されたウェブ層の更新を使用して、バイナリが必要ない変更を処理すること。目標は、すべての更新をオーバー・ザ・エアメカニズムを通して強制することではなく、バイナリが必要ない変更をストアのデフォルトゲートから除外することです。

アプリ更新の使用頻度のセグメント化 は、チームがアップデートを受け取るユーザー、アップデートを受け取るタイミング、そしてアップデートがアクティブなユーザーに到達するかどうかを区別するのに役立ちます。そのデータは、単純なリリースカレンダーよりも実装されたエクスペリエンスの頻度が有用になります。

リリースパイプラインを速めるための実践的な戦略

リリースの速度を向上させるには、チームは待ち時間、繰り返し手動作業、不必要な結合を削除する必要があります。まず、各リリースが時間を費やす場所を測定してみましょう。手動署名、ネイティブ依存性のインストール、シリアルテスト、承認のハンドオフ、フルバンドルの転送にはそれぞれ異なる修正が必要なので、それらを個別のボトルネックとして扱ってください。

機械的な作業を自動化する

信頼できるCI/CDパイプラインは、知られているコミットからビルドされ、固定依存性をインストールし、テストを実行し、署名されたアーティファクトを生成し、ローカルステップを繰り返さずにそれらを公開します。独立したテストスーツを並列化し、ビルドシステムがサポートする場合はネイティブ依存性をキャッシュしてください。ステージングとプロダクションの構成を構造的に一貫させてください。環境の不一致がプロセスの後半でリリースをブロックする可能性があるためです。

自動化は時計を変えるのではなく、所有権を変える。自動化がなければ、1人の開発者が署名、ビルド、承認、公開を調整する必要があります。自動化があれば、パイプラインは繰り返し作業を実行し、開発者は結果をレビューし、エラーを処理します。

差分更新は別の種類の浪費を解決します。ウェブバンドルのみが変更された場合、変更されたファイルのみを送信することで、転送作業を削減し、制約された接続でライブ配信を実現できます。アーティファクトは実際の変更面を反映し、すべての未変更アセットを再度パッケージ化する必要がなくなります。

リスクを軽減するだけでQAキューを作成する必要はありません

チャネルベースのロールアウトでは、内部テスト、早期アクセス、一般提供を分離します。ステージングはアップデートを受け取ることができます、ベータは選択されたユーザーに公開し、生産はテレメトリが可視化されるまで待機します。この方法では、検証は小さな観察可能なユーザーグループに結び付けられ、1 つの遅れた承認で大量のバッチを蓄積するのではなく、検証が行われます。

機能フラグは、内部アプリケーション内で制御を追加します。開発者は、code をマージすることなく、フルエクスペリエンスを有効にする必要がなく、定義されたアウディエンスに有効にすることができ、エラーと動作を監視することができます。その結果、短期間のブランチが可能になり、問題のあるエクスペリエンスを無効にすることができます。ただし、ネイティブバイナリを再構築する必要はありません。

テストカバレージとパフォーマンス検証のガイダンスについては、 PageSpeed Plus のテスト戦略記事 を参照してください。自動化されたデプロイゲートを設定する前に。

ソフトウェアリリースパイプラインを自動化、テスト、デプロイを使用して加速するための 3 つのステップを示す図です。

実用的パイプラインは、次のシーケンスを実行することができます。

  1. コミットと検証: すべての関連する変更に対して、linting、ユニットテスト、バンドルチェック、セキュリティチェックを実行します。
  2. コントロールされたチャネルに公開: 明確なバージョンヒストリとアウディエンスルールとともに、ステージングまたはベータにアーティファクトを送信します。
  3. 観察とプロモーション: リリース速度の改善
  4. 回復する: 以前の知られているバージョンを保持して、ロールバックが別のストアの提出を必要としないようにします。

動作を観察してみて:

The デプロイ自動化ガイド これらの実践を繰り返し配信に変える実装上のコンテキストを提供します。 Capacitor チームにとって、実用的な区別は重要です: ネイティブの変更は依然としてバイナリ リリースが必要ですが、エラブルなウェブ層の変更は制御されたライブアップデートのパスを使用して、ストアのレビューを待たずにユーザーに到達できます。

Capgo がクロスプラットフォーム アプリのためのより速いリリースを可能にする

Capacitor チームは、エラブルなウェブ層の変更のためのライブアップデートのパスとして Capgo を使用できます。開発者は JavaScript のバグを修正し、ウェブ バンドルをビルドし、Capgo CLI から署名されたアップデートを公開します。アップデーターは、ターゲット デバイスにバンドルを配信し、次の起動時に適用し、アップデートが失敗した場合にロールバック保護を維持できます。

Capgo のワークフローを示す図。

配信の単位を変更するワークフローです。ネイティブ機能はバイナリパスのままですが、ウェブ層の修正は、プラットフォームとストアポリシーの境界内に収まる場合、ストアパッケージの更新を待つ必要はありません。Capgoは署名されたウェブバンドル、差分更新、チャネル、CI/CD統合、デバイスごとのログ、採用と失敗のメトリクス、バージョン履歴、自動ロールバック保護をサポートします。

リリースの制御をチームワークに変えるチャネル

チャネルはクロスプラットフォームチームが自然に使う方法にマップされます:

  • ステージング 内部テスターに隔離されたアップデートストリームを提供します。
  • ベータ 早期採用者と制御された検証をサポートします。
  • プロダクション 一般ユーザーに提供します。チームが証拠に満足したら、

各チャネルは独自のキャデンスで進むことができます。つまり、開発者は内部検証用に修正を公開するのではなく、テスト済みのバンドルを推進することができます。

ロールバックは公開と同じくらい重要です。重大な問題が発生した場合、前のバンドルに戻ることでチームに回復パスを提供し、根本的な修正が調査されている間の安全ネットを確保できます。

比較する2つのリリースパス

A traditional Capacitor cycle often looks like this:

  1. Change web and native code.
  2. ビルドするバイナリ。
  3. レビューに提出してください。
  4. 承認と展開待ち
  5. ユーザーが採用するのを待つ。

Capgoのウェブ層の有効な変更に対するライブアップデートサイクルは、以下のようになります。

  1. ウェブ層を変更する。
  2. バンドルを構築して署名する。
  3. チャンネルを制御する場所に公開する。
  4. 採用と失敗を観察する。
  5. プロモーションまたはロールバック。

チームは、このワークフローを自動化されたパイプラインと接続することができます。 Capgo GitHub Actions統合ガイド。。重要な結果は、約束されたリリース数ではなく、ネイティブのリリース作業とウェブ層のイテレーションを分離し、両方を測定できる能力です。

一般的な誤解について

より速いリリースは、必ずしも質の低いものとは限りません。 小さな変更は、エンジニアに狭いデバッグ対象領域を与えることがよくあります。リリースに一つの焦点を持つ変更が含まれている場合、チームは、リグレッションをより小さなセットの原因と関連付けることができ、より正確な単位をロールバックできます。その利点は、チームが頻繁なリリースを弱いテスト、不明確な所有権、または不十分なテレメトリを正当化するために使用する場合に失われます。

2番目の誤解は、展開頻度が速度を定義することであると考えることです。DORAでは、リードタイム、変更失敗率、平均復旧時間などのメトリックを組み合わせて、配達を評価します。常に展開するチームでも、時間をインシデントの修復に費やすチームでも、健康的な速度を構築していません。未完成のリスクを移動させるだけの速度を加速しています。

速度だけでは、長いダウンタイムの道を速く進むことだけです。

モバイルチームはよく、ストアレビューが改善を不可能にすると言います。ストアレビューはバイナリ配布を制限しますが、すべてのユーザーフェイスの変更を定義するものではありません。有用な区別は、変更がネイティブのcodeに属するものか、ウェブ層に属するものかです。機能フラグ、リモート構成、コンテンツ更新、有効な署名されたバンドルは、後者を短縮することができますが、ネイティブの変更がレビューされないことを示すものではありません。

リアルタイムの更新も、有効なポリシーとセキュリティの質問を引き起こします。チームはAppleとGoogleの規則を理解し、許可されたコンテンツと行動に制限し、署名と認証されたバンドルを生成し、チャンネルを保護し、明確なロールバックパスを維持する必要があります。リアルタイムの更新システムは、禁止された実行可能な動作を秘密裏に配信する方法にはなり得ません。

最終的な誤解は、観察性はチームが速くなるまで待つことができるということです。できません。デバイスごとのログ、バージョン履歴、更新の採用、エラー信号、ロールバックコントロールは、ユーザーが意図したリリースを受け取ったかどうかを教えてくれます。証拠がなければ、更新の高数値は製品の価値や運用の健康状態について何も言えません。

リリース速度の向上のためのアクション計画

測定から始め、待ち時間の最大の原因を除去しましょう。ネイティブバイナリーリリースとウェブレイヤーアップデートを分離し、各パスでリードタイムを記録し、頻度と共に失敗と回復を追跡することで、チームは単一の数字を最適化しながら、顧客の体験が遅いままになるのを防ぎます。

最初のスプリントのクイックウィン

  • コンテキスト: Capgo Builder / ネイティブクラウドビルド製品ページ。役割: 短いUIラベルまたはナビゲーションアイテム。メッセージキー `native_build_builder_credit_first` (ネイティブビルドビルダークレジットファースト)。 トリガーを自動化する:
  • リポジトリからバリデーションとビルドジョブを実行するのではなく、開発者のラップトップから実行する。 バージョニングを標準化する:
  • 一貫したバージョニングスキームを使用することで、チームは何が変更されたかと、ユーザーが受け取ったアーティファクトを特定できるようになります。 ステージングチャンネルを作成する:
  • 内部テスターに制御されたパスを提供し、広範な配信が必要なくなるようにします。 アップデートを一時停止、推進、またはロールバックできるユーザーを記録する。
  • バッチサイズのレビューを実行します。 リリースパイプラインに入る前に、大きな変更を分割します。

次の投資はアーキテクチャです。バイナリが必要な変更と、Web層を通して移動できる変更を特定します。差分バンドリングを追加する、進歩的なチャネルを導入する、そして、観察性システムに配信イベントを接続する。ダッシュボードは、どのユーザーがアップデートを受け取ったか、失敗したか、チームが安全なバージョンを回復するのにどれくらいの時間がかかったかを回答するようにする必要があります。

長期的には、製品とエンジニアリングのリーダーは 実装されたエクスペリエンスの頻度、バージョン番号の活動のみではありません。小さなリリースは、安定性を保護し、ロールバックルーチンを維持し、回復を配信の例外的なイベントとしてではなく、配信の一部として扱うチームでは、より密なフィードバックループを作成します。

現在のスプリントでこのチェックリストを使用します。

  1. バイナリのキャデンスと実装されたエクスペリエンスの頻度を分離します。
  2. ビルド、テスト、署名、公開パスの自動化を実行します。
  3. ステージングとベータチャネルを確立する前に、生産配信を拡大します。
  4. 採用、失敗、ロールバックの可視性を追加します。
  5. リリース速度を複数のフィードバックループで積み重ねる

リリース速度は、各フィードバックループが次の変更に影響するため、複数される。1つのボトルネックを削除すると、チームが小さな変更を実装し、迅速に観察し、再構築せずに回復できる場合、次のサイクルも改善される。


Capgo provides Capacitor and Electron teams with a controlled live-update path for signed web-layer bundles, differential delivery, channels, observability, and rollback protection. If App Store review is slowing eligible fixes and experience changes, visit Capgo CapgoのPRを提出する

Live updates for Capacitor apps

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

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

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

今すぐ始めましょう

Capgo gives you the best insights you need to create a truly professional mobile app.