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

アプリバージョンヒストリ:開発者向けリリースガイド

アプリバージョンヒストリ:開発者向けリリースガイド

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

アプリバージョンヒストリ:開発者向けリリースガイド

リリースは夜遅くに出されます。サポートチームは、クラッシュの報告、ログインの失敗、チェックアウトフローの突然の停止などを受け取ります。エンジニアは最初に明らかな質問を投げかけます: どの変更が行われましたか? すると、部屋は静寂に包まれます。

Git コミットを 1 人が Pull します。もう 1 人は CI ログをスキャンします。製品は App Store のリリースノートを確認しますが、それは「バグ修正と改善」などとほとんど何も書かれていません。誰かが Slack にある最後の手動で設定を変更したことを思い出しますが、誰も確かめられていないのは、どちらがストアのビルドに、どちらがライブアップデートのバンドルに、どちらが両方に到達したかを知りません。その時、チームは、変更ログとアプリバージョンヒストリは同じものではないことを学びます。

ストアからアプリを配信するチームが、ストアのレビュー経路外でもcodeを公開する場合、バージョン履歴をシステムとして扱っていない限り、運用リスクは倍増します。レビュー遅延、却下された提出、リリースの不明確さなどを経験したチームは、このパターンを認識するでしょう。 App Store拒否の後始末. その教訓は簡単です: リリース状態が曖昧な場合、速度が最も必要なときに、インシデント対応が遅れるのです。

目次

バージョン履歴の重要性を実感する瞬間

失敗はバグそのものではなく、バグを見つけた時からそのバグを引き起こしたリリースを特定するまでの時間の遅れである。

モバイルチームは欠陥を乗り越えることができる。時間を浪費するのは不確実性である。もし、承認されたバイナリのものを知ることができず、配信されたバンドルのものを知ることができず、受信したチャンネルのものを知ることができず、変更をトリガーした人のものを知ることができないなら、1分ごとに考古学の調査に時間を費やすことになる。エンジニアはコミットメッセージを調べる。サポートはスクリーンショットを転送する。製品は、問題が全体に影響を与えるか、あるセグメントにのみ影響を与えるかを確認する。誰もが単一の運用記録を持っていない。

プレッシャー下で運用のギャップが現れる

リリース履歴を保存することで、パブリックのマイルストーンが得られる。バージョンが存在したことを示す。通常、内部イベントのシーケンスに関する十分な情報を提供しない。モバイルのデリバリーでは、ネイティブバイナリ、ウェブバンドル、アセット、機能フラグ、設定など、複数のレイヤーによって生成されるアプリのユーザーが実行しているものは、内部イベントのシーケンスに関する情報が不足していることが問題となる。

パブリックなリリースノートは、顧客に役立つ。インシデントの際には、レスポンダーには役立たない。

このことをうまく扱うチームは、記憶や散在したツールに頼るのではなく、タイムスタンプ、起源、目的地チャンネルと紐づいたバージョンレジャーを維持している。インシデントが始まると、歴史を再構築するのではなく、読み取る。

歴史が弱い場合に起こること

弱いアプリバージョンヒストリシステムは、次の連鎖的な問題を引き起こす:

  • ロールバックが遅延する: チームは、最後に正常なバージョンが何だったかについて議論する。
  • サポートの精度が低下する: エージェントは、レポートが古いストアビルドか新しいライブパッチに属しているかを判断できない。
  • ポストモーテムが曖昧になる: レグレッションが発生したことはわかっているが、正確なリリースシーケンスを証明できない。
  • 内部の信頼性が低下する: 製品、サポート、エンジニアは「現在のバージョン」という言葉を同じように使っていない。

なぜなら、これは管理タスクではない。実行中のシステムの制御だから。

App Version Historyとは何ですか?

App Version Historyは あなたの全ての実行中のアプリケーションのGit履歴、リポジトリだけではありません。code またはアセットの変更、変更時刻、リリースを開始した人物、リリースが行われた場所を含む、完全なアプリのバージョン履歴を表示する必要があります。アプリがストアの提出外で変更される場合、その変更を同等の厳密さでキャプチャする必要があります。

アプリのバージョン履歴の重要なコンポーネントを示す図、更新、バグ修正、機能の追加を含みます。

多くのチームは、バージョン履歴をマーケティングのアーティファクトとして扱っています。そうではありません。適切なシステムは、バイナリ、JavaScript バンドル、アセット、構成変更、ロールアウト チャネル、リリース メタデータを一つの監査可能なトレイルに記録します。比較する配信モデルについて、この区別は伝統的なバージョニングとOTA更新の間のギャップの中心です。 Capacitor 内の伝統的なバージョニングとOTA更新の間のギャップの中心です。.

変更ログはユーザー向けですが、履歴システムは管理者向けです。

ユーザー向けのリリースノートは「何が新しいの?」と答えます。オペレーショナル履歴は「どのくらいのものが実際に配信されたのか、いつ、誰によって、そしてそれを逆にするにはどうすればよいか?」と答えます。

それらは異なる仕事です。変更ログは簡潔で選択的なものでなければなりません。内部の履歴システムは、完全で耐久性のあるものでなければなりません。プロフェッショナルなソフトウェア開発とライブアップデートパイプラインでは、詳細なアプリのバージョン履歴を維持するには、 , いつ を含む、各リビジョンを有効にするために責任を負う、エラーを回復する、そして迅速にロールバックするために記録する必要があります。この バージョン履歴の定義 (ITU オンライン).

チームが必要とする最小レコード

リリースがユーザーに到達する場合、そのリリースには履歴エントリが必要です。最低限、そのエントリには以下の情報が含まれる必要があります。

  • 変更内容: スナップショット、アーティファクト参照、ハッシュ、または差分可能なバンドル ID。
  • リリース時刻: 正確なデプロイタイムスタンプ、曖昧なリリース日付ではありません。
  • トリガーした人物: 名前の付いた開発者、サービス アカウント、または CI ジョブ。
  • 配布先: 本番、ベータ、ステージング、またはターゲット カスタマー チャネル。
  • リバースアクションの方法: 前回の安定版のリビジョンとロールバックパス。

実践的なルール: チームがデプロイできる場合、チームは3つのシステムを検索することなく、リビジョンを識別し、ロールバックすることができるはずです。

成熟したアプリのバージョンヒストリには不変性が必要です。チームは注釈を追加できるはずですが、リリースレコード自体を書き換えることはできません。一度ヒストリが簡単に編集できるようになると、インシデントや監査の際に役に立たなくなります。

4つの理由:アプリにバージョンヒストリが必要な理由

アプリのバージョンヒストリの議論は抽象的なものではありません。サポートキュー、インシデントブリッジ、コンプライアンスレビュー、ロードマップの決定に現れます。バージョンヒストリを省略すると、チームは遅いコーディネーションのコストを支払うことになります。

デベロッパーがcodeを入力する携帯型コンピュータの画面が木の机の上で表示されている。

インシデント対応が速まる

リリースが失敗した場合、最初のオペレーショナルタスクはバージョン分離です。どのビルドまたはバンドルが問題を引き起こしたか、どのアウディエンスが受け取ったか、どの前の知られている良好な状態が何だったかを確認する必要があります。

ヒストリがなければ、ロールバックは議論になります。ヒストリがあれば、ロールバックは決定になります。エンジニアは最後の数回のリリースを検査し、タイムスタンプを比較し、疑わしいアップデートを特定し、交通量またはユーザーを安定したリビジョンに戻すことができます。

速度はモバイルではさらに重要です。ストアの修正には時間がかかる場合、ライブアップデートを使用するアプリも、内部のヒストリが最速の方法で悪いパッチを広がらせないようにする方法になります。

監査トレイルは混乱から解放される

チームが管理されているチームは、この痛みをすでに知っています。誰かが、生産環境で何が変更されたか、誰が承認したか、いつリリースされたかという証拠を求めるのです。リリースデータがSlack、Gitタグ、CIアーティファクト、アプリストアの注釈にまたがる場合、答えは長すぎて、まだ不完全な感じがします。

正しい歴史システムは、混乱をクエリに変えるのです。特定の日付範囲、リリースチャネル、または機能ロールアウトのためのリビジョントレイルを取得し、一貫した記録を表示することができます。それは、統治の必要性を排除するわけではありませんが、統治に何か具体的なものを調べることができるようになります。

サポートはバージョンごとの問題を解決できます

サポートには、rawコミットログが必要ありません。ユーザー報告をリリース状態とつなぐ信頼できる方法が必要です。

通常、実用的質問に答える必要があります。

  • この顧客は現在のストアバージョンにいるか?
  • 彼らは最新のライブバンドルを受け取ったか?
  • この問題は、後続のリビジョンで既に修正されているか?
  • サポートは、ユーザーにリロード、更新、またはステージドロールアウトを待つよう求めるべきか?

サポートとエンジニアが同じアプリバージョンハイストを読むと、エスカレーションが短くなり、感情が少なくなります。会話は「私たちは思う」から「このデバイスはこのリビジョンにあります」に変わります。

リリースメカニズムに関する参考資料とモバイルアップデート制御の重要性についての説明は、この埋め込まれたウォークスルーにあります。

製品とエンジニアはロールアウトの可視性を取得します

バージョン履歴は、緊急事態のみに用いるものではない。実際、チームは証拠に基づいてリリース決定を下すのに役立つ。

Androidは、バージョン認識の重要性を示す良い例である。Androidの公開バージョン履歴は、 2007年11月5日にリリースされたベータ版から始まる。最初の商用版は 2008年9月23日にリリースされたAndroid 1.0である。 プラットフォームは、 世界で3億台以上のアクティブなデバイスに成長している。最新の主なリリースは 2024年にリリースされたAndroid 15である。. The latest major release was Android 15 in 2024, with Android 14 到達 米国で2024年半ばまでに35%の採用率, しかし Android 11 インドで最も普及している 28%の採用率. Androidは通常、 1年ごとにメジャーアップデートを提供 というAndroidバージョンヒストリの参照に従って

For product and engineering, that kind of fragmentation means rollout decisions can’t rely on assumptions. You need visibility into which app revisions map to which OS realities, channels, and customer cohorts. That’s how teams decide when to retire compatibility code, when to slow a rollout, and when to keep an older path alive.

そのようなフラグメンテーションはロールアウトの決定を仮定に頼ることができないことを意味します。アプリのリビジョンがどのOSの現実、チャネル、顧客コホートにマップされるかを把握する必要があります。チームは、互換性の廃止時期、ロールアウトの遅延時期、古いパスを維持する時期を決定するためです。__CAPGO_KEEP_0__は何を指すかを把握する必要があります。

ストアの履歴とライブ更新履歴は、異なる問題を解決します。チームは、1つが他を置き換えることができるという仮定でトラブルになります。

ストアは、主なバイナリーリリースの公的記録を提供します。それは重要です。iOSでは、バージョン履歴は2007年6月29日にオリジナルのiPhone OSから始まりました。 2007年6月29日 そしてiPhone OS 1からiOS 18までの18の主なバージョンに進化しました。 2024年9月までに、App Store自体は2008年7月11日にiOS 2とともに 2013年9月18日にiOS 7とともに大きなデザインの変化を示しました。プラットフォームは、世界中で1.5億台以上のアクティブなデバイスを提供しています。 そして marked a major design shift. The platform serves over 1.5 billion active devices globally, and iOS 16 はるかに 米国における有効なiOSデバイスの32%の採用率を達成したこの iOSバージョン履歴の参照。 その年間のペースは、ネイティブのリリース計画のための有用なコンテキストです。

しかし、実際の運用では、店はまだ粗いタイムラインです。

Storeの履歴は何がうまくいくか

Storeのリリース履歴は、以下のいくつかのことがうまくいきます:

属性 App Store / Play Store Live Update Platform (e.g., Capgo)
対象ユーザー パブリックとパートナー向け 内部エンジニアリング、サポート、運用
リリース単位 ネイティブバイナリ バンドル、アセット、設定、ターゲットパッチ
リリースサイクル 提出とレビューフローのタイミングに合わせる デプロイPipelineのスピードに応じて
メタデータの深さ リリースに焦点を当てたコンテキスト メタデータの詳細な運用情報
ロールバックパス 通常、別のストアアクションが必要です 直接前のリビジョンに戻ることができます
フォレンジック マイルストーンの追跡に適しています インシデントレベル調査に適しています

プラットフォーム配布バイナリ、承認、公開リリースノートは、ストアが正しい場所です。製品マネージャーと外部の利害関係者は、その記録が必要です。それは、可視性、安定性、プラットフォームポリシーと一致しています。

ライブアップデート履歴がゲームを変える場所

チームがJavaScript、資産、コピー、または構成変更をストアのレビュー経路外で配信している場合、内部バージョンヒストリーは公開リリースノートよりも重要になります。そのような状況は、多くのモバイルパイプラインが現在の日常業務です。

主な制限はAPIの深さです。App Store ConnectなどのパブリックAPIはバージョンヒストリーを公開できますが、50の歴史的結果を超えることはできず、 長期的な分析を完全に実行できず、法的または法的調査を困難にします。この App Store Connect の履歴制限についての議論制限の 1 つの理由は、チームが内部のバージョン追跡を構築または採用する必要があることです。内部のバージョン追跡は、全てのリビジョンの履歴を保存し、チャンネルベースのロールアウトをサポートします。

インシデントのタイムラインがパブリック API に依存している場合、インシデントのタイムラインを持っていません。パートIALな記憶を持っています。

ライブアップデート履歴はプライベート、検索可能、詳細でなければなりません。差分アップデート、チャンネルターゲット、デプロイ元、インストール状態、ロールバック関係を表示する必要があります。また、次のようなオペレーショナルな質問をしてほしいです: ベータアウディエンスに最初に送られたプロダクションホットフィックスはどれですか? 最後のネイティブリリース後に送られたアセットのみの変更はどれですか? 最後に安定したバンドルをサポートするべきリビジョンはどれですか?

チームが配信モデルを評価している場合、区別は実用的なものであり、哲学的なものではありません。この アプリのアップデートと直接アップデートの比較 この比較は、バージョン履歴の要件を形作る統治とスピードのトレードオフを強調しています。

バージョン履歴データモデルの設計

有効なアプリのバージョン履歴は、データモデルの設計から始まります。スキーマが浅い場合、履歴も浅くなります。チームは通常、バージョン番号とビルド番号を追跡します。チャンネル、パッチ、ロールバックを追加した場合、十分ではありません。

最初から保存すべきフィールド

モデルは、一般的なオペレーショナルな質問を簡単に回答できるようにする必要があります。これらのフィールドは、ほとんどの作業を行っています:

  • バージョンID 内部識別子として一意の内部識別子が変更されないようにします。
  • シーケンスバージョン 人間が読みやすいリリースラベルとして。
  • ビルド番号 ネイティブプラットフォームのシーケンスのために。
  • チャンネル 生産、ステージング、ベータ、または顧客固有のロールアウトストリームのために。
  • タイムスタンプ 正確なデプロイ時刻のために。
  • 作者 リリースを開始した開発者、サービスアカウント、またはCIパイプラインのために。
  • コミットハッシュ ソース管理システムへのトレースバックのために。
  • リリースノート 内部コンテキストのみに焦点を当てた、一般向けマーケティングコピーではありません。
  • アーティファクトのURL バイナリまたはパッケージの場所のために。
  • バージョンIDが上書きされるバージョンID 高速ロールバックの理由のために。
  • ステータス アプリケーション開発者がオフィスで白板に複雑なデータベースエンティティ関係図を描いている。

ハイブリッドアプリの名前付けとリリース識別子に取り組んでいる場合、このガイドを参照してください。

バージョンタグ付けのための__CAPGO_KEEP_0__アプリのガイド version tagging in Capacitor apps データモデル自体の有用な補完です。

実用的なJSONの例

主にモバイルリリースオペレーションをカバーするシンプルな形です。

{
  "versionId": "ver_2025_02_18_prod_001",
  "semanticVersion": "2.5.1",
  "buildNumber": "42",
  "platform": "ios",
  "channel": "production",
  "timestamp": "2025-02-18T14:22:00Z",
  "author": "ci-release-bot",
  "commitHash": "a1b2c3d4",
  "releaseNotes": "Fixes login redirect loop and updates remote config defaults",
  "artifactType": "live-bundle",
  "artifactUrl": "bundle://releases/2.5.1",
  "supersedesVersionId": "ver_2025_02_11_prod_004",
  "status": "active",
  "rollbackTarget": "ver_2025_02_11_prod_004",
  "metadata": {
    "storeBuild": "2.5.0",
    "featureFlags": ["new-auth-flow"],
    "audience": "all-users"
  }
}

リリースレコードを、サポート、セキュリティ、エンジニアリングがすべて同じ日に必要とするように保存してください。最終的には、必要になります。

一貫性が鍵です。Xcode Cloud、GitHub Actions、Bitrise、Fastlane、またはカスタムスクリプトから来るものを問わず、すべてのリリースパスは同じコアメタデータを出力する必要があります。1 つのパスが著者情報を省略し、もう 1 つのパスがチャネル情報を省略すると、履歴を信頼できるものとして扱うのは困難になります。

Capgoの実践

バージョン履歴を理解する最速の方法は、ホットフィックスワークフローを確認することです。

リリース後、バグレポートが届きます。問題は生産フローに影響を与えますが、すでに最近のウェブバンドルを受け取ったデバイスにのみ影響を与えます。エンジニアリングには、広範な会議が必要ではありません。必要なのは、フィルタされたリビジョン、チャネル、タイムスタンプのリストです。

説明が可能なホットフィックスワークフロー

ライブアップデートの設定では、開発者は修正を実行し、CIは新しいバンドルをビルドし、システムはバンドル識別子、展開時間、起源ジョブ、ターゲットチャネルを記録します。チームは、チャネルごとに履歴を検査できるようになります。最後のネイティブの提出から、後続のパッチまでの変更が含まれているかどうかを推測する必要がなくなります。

そのようなツールとしては Capgo Capacitorのアプリバージョン履歴を提供し、チャンネルごとにアップデートを追跡し、外部ストアのレビュー外でチームが配信するロールバック指向のワークフローをサポートします。このCapacitorのバージョン管理とロールバックの概要 Capgoがバージョン管理とロールバックをどのように取り扱うか 通常、モバイルチームは頻繁にアップデートをリリースするようになると、次のような運用モデルが必要になります。

ダッシュボードの表示は重要です。レスポンダーは、ログからリリース状態を再構築する時間がないからです。

https://capgo.appから

ロールバックの迷いなし

ロールバックフローの良い例は、まず「どのバージョンを試すか?」と尋ねるのではなく、可視化されたリビジョンチェーンから始まるものです。前の安定版リリースが明確であることがわかります。

これは、インシデント対応の質が改善されることです。具体的には、次のようになります。

  • エンジニアリングチームは確実性を得ることができます。 チームは、正確なホットフィックス候補とその前身を特定できます。
  • サポートチームはスクリプトを得ることができます。 エージェントは、影響を受けたユーザーがリローンチする必要があるか、またはステージドな修正を待っているかを説明できます。
  • 製品が保持する内容: 利害関係者は、問題が一つのチャネルまたはリリース波に限定されているかどうかを確認できます。

これにより、ポストモーテムも改善されます。チームが「パッチが問題を引き起こしたと信じている」ということを述べるのではなく、次のシーケンスを指すことができます:ネイティブビルド承認、ライブバンドルの展開、エラーの報告、ロールバックのトリガー、安定バンドルの復元。 そのレベルのトレースアビリティは、アプリバージョンハイストを帳簿管理からリリース管理に変えるのを可能にします。

記録管理からリリース管理へ

アプリバージョンハイストは一般的に文書管理として扱われます。成熟したチームはそれを運用管理面として扱います。

その変化は重要です。モバイル配信は今、2つの時計で動作しています。最初の時計はストア時計で、ネイティブバイナリ、パブリックリリース、レビュー駆動のキャデンスを規定しています。2番目の時計はライブアップデート時計で、高速修正、ターゲットロールアウト、ロールバックのスピードを規定しています。最初の時計だけを追跡すると、最も速い時刻に起こる出来事に対しては視界がなくなります。

信頼できる答えをサポートに、実際のロールアウトのイメージを製品に、安全な状態に戻る安全なパスをエンジニアリングに提供する強力な歴史システムは、リリースの不安源を排除します:ユーザーが実際にどのバージョンを実行しているかを知りません。

現在のリリースパイプラインをレビューし、次の質問を考えてみましょう。生産が次の1時間で破綻した場合、チームは悪いリビジョンを特定し、検索する必要なく逆転させることができますか? その答えが「いいえ」であれば、バージョンハイストに改善が必要です。


CapgoはCapacitorチームにバージョン履歴をリリース作業の一部として扱うことを助けています。チャンネルベースのライブ更新、バンドル履歴、ロールバックサポートを同じワークフローで必要とする場合は、以下の内容をご覧ください。 Capgo.

Capacitorアプリの即時更新

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.

When a web-layer bug is live, ship the fix through __CAPGO_KEEP_0__ 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マーケティングサイト。役割:サポートする説明文またはメタ説明文。見つかった場所:コンポーネントGetStarted.astro。Capgo製品/ブランド名と開発者用語をそのまま保存。

human support from Martin

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