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

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

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

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

Elite software teams deploy code about 1,460回、低パフォーマンスのチームは約 1.5回年に1回、によると DORAの2021年DevOpsのAccelerate State of DevOpsレポート約973倍のリリース頻度の差があります、そしてそれは、ソフトウェアを配信する方法について考え方を変える

Mobile teams need a more precise definition. A Capacitor application can contain native code that requires App Store or Play review, alongside a web layer that can often change independently. If you measure only binary submissions, you’ll miss the updates users experience. The practical question is not how often your team builds an app. It’s how often customers receive a functional improvement, fix, content change, or configuration update.

、ということです。

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

DORAは、ソフトウェアを生産環境またはエンドユーザーにデプロイする頻度を、主な配達指標として定義し、チームがソフトウェアを生産環境またはエンドユーザーにデプロイする頻度を測定します。 エリートパフォーマーは、オンデマンドの複数デプロイ毎日というカテゴリに分類され、低パフォーマーは6か月に1回以下の頻度でデプロイします。 2022年DevOpsの現状レポート エリートソフトウェアチームは、低パフォーマーチームと比べて208倍の頻度でデプロイを実行します。リリース速度

リリース速度とは、コミットされた__CAPGO_KEEP_0__から生産体験に到達するまでの、チームが機能するユーザーフェイスの変更を提供する速度です。この旅には、レビュー、テスト、パッケージング、デプロイ、ロールアウト、採用、そして何かが間違っているときに回復が含まれます。高速なビルドパイプラインは役立ちますが、自動的に高速な顧客フィードバックループを生み出すわけではありません。

モバイルが計算式を変える理由 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.

context

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

That distinction matters for Capacitor, Ionic, and Electron teams. Their applications often combine native capabilities with HTML, CSS, JavaScript, assets, and configuration. Treating every change as a binary release forces simple interface or logic updates through the slowest path.

実践的なルール: 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階層を使用してください。リスクとチームサイズを考慮しながら、配信能力を目標としている場合は、DORA階層を使用してください。

リスクとチームサイズを考慮しながら、配信能力を目標としている場合は、DORA階層を使用してください。

リスクとチームサイズを考慮しながら、配信能力を目標としている場合は、DORA階層を使用してください。

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

計測されていないメトリックのベンチマークを作成しないでください。基準を確立し、ネイティブとウェブ層の変更を分離し、より小さいバッチ、管理可能なエラー、より速い回復も伴うかどうかを確認します。エンジニアリング出力のより広い視野を持つチームにとって、この 開発者向け製品性向上ガイド は補完的なリファレンスを提供します。

バイナリキャデンスと実行体経験頻度

バイナリリリースとは、ストアまたは承認済みデスクトップチャネルを通じて提出されたアプリケーションパッケージです。 実行体経験頻度 は、ユーザーが見たりすることができるものに影響を与える変更を受け取る頻度です。そのメーターは重なり合いますが、互換性がありません。

月に1回のバイナリキャデンスは、頻繁なウェブ層の配信と共存することができます。Capacitor チームは、ネイティブプラグイン、パーミッション、OS統合、アップデーターチェンジをバイナリリリースとして予約するかもしれませんが、JavaScript、CSS、コピー、構成、資産の更新は制御されたライブアップデートパスを通じて送信することもできます。バイナリの数字はパッケージング作業を表します。経験の数字は製品のイテレーションを表します。

バイナリアプリストアアップデートキャデンスとソフトウェアリリースのための継続的なウェブ層配信を比較する図。

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

アプリストアレビューは、バックエンドチームが同じように直面するのとは異なる遅延を導入します。 Digiaによるモバイルリリース速度分析 ストアレビューを紹介する 24から48時間の遅延 モバイルチームは、ビンリリースのペースと実装されたエクスペリエンスの頻度を別々に追跡するべきであると主張します。ユーザー採用は別の遅延を生み出します。承認後も、ユーザーはすぐに新しいビンをインストールしない可能性があります。

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

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

ネイティブパッケージングが必要な変更用にバイナリPipelineを使用し、変更が不要な場合は機能フラグ、リモート設定、コンテンツ配信、署名されたウェブ層の更新を使用する。目標は、すべての更新をオーバー・ザ・エアメカニズムを通じて強制することではありません。目標は、ビンが必要ない変更に対してストアをデフォルトのゲートとして使用しないことです。

アプリ更新の使用頻度分割 チームがアップデートを受け取るユーザー、アップデートを受け取る時期、そしてアップデートがアクティブなユーザーに到達するかどうかを区別できるようにすることができます。そのデータは、単純なリリースカレンダーよりも実装されたエクスペリエンスの頻度が有用になります。

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

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

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

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

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

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

リスクを軽減することなくQAキューを作成しない

チャネルベースのロールアウトでは、内部テスト、早期アクセス、一般提供を分離します。ステージングはアップデートを受け取ることができます、ベータは選択されたユーザーに公開し、生産ではテレメトリが可視化されるまで待ちます。このアプローチは、テストのバッチを大量に蓄積するのではなく、より小規模で観察可能なアウディエンスにバリデーションを結び付けるのです。

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

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

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

実用的なパイプラインは次の順序で実行できます。

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

動作を観察してみてください:

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

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

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

 Capgo のワークフローを示す図。 Capgo を使用して、ユーザーに即時でオーバー・ザ・エアのモバイル アプリのアップデートを配信することができます。

配信の単位を変更します。ネイティブな機能はバイナリパスのままですが、Web層の修正は、プラットフォームとストアポリシーの境界内に収まる場合、ストアパッケージの新しいリリースを待つ必要はありません。Capgoは署名されたWebバンドル、差分更新、チャネル、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. リリース速度を単にデプロイ頻度だけ追うのではなく、DORA メトリクスを一緒にレビューする。

リリース速度は累乗される。各フィードバックループが次の変更を導くため、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を提出する

ライブアップデートのCapacitorアプリ

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

マーティンによる人間のサポート

今すぐ始めましょう

最新のブログ記事

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