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

アプリバージョンヒストリ

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

アプリ バージョン履歴: 開発者ガイド

リリースが遅れて出た場合、サポートチームは朝起きてクラッシュの苦情、ログインの失敗、チェックアウトフローの突然の停止に直面します。エンジニアリングチームはまず明らかな質問を投げかけます: どれが変わったの? その後、部屋は静かになります。

Git コミットを 1 人でpull する人もいます。もう 1 人は CI ログをスキャンします。製品チームは App Store のリリースノートを確認しますが、それは “バグ修正と改善” などとほとんど何も書かれていません。Slack の誰かが最後の瞬間の設定変更を思い出すかもしれませんが、誰も確かめることができないのは、どちらに到達したのか、ストアのビルド、または live update バンドルのどちらか、または両方かもしれません。そうすることで、チームは、変更履歴とアプリ バージョン履歴は同じものではないことを学びます。

アプリをストアから配信し、また code をストアのレビュー パス外で配信するチームの場合、バージョン履歴をシステムとして扱わない限り、運用リスクは 2 倍になります。レビューの遅延、却下された提出、または不明なリリースの起源の痛みを既に味わったチームは、このパターンを認識するでしょう。 ストアからの拒否の後mortem重要な瞬間: バージョン履歴の重要性を理解する

運用のギャップは、圧力の下で現れます

バージョン履歴が重要な瞬間

失敗はバグそのものではなく、バグを見つけるのにかかる時間と、バグが原因となったリリースを特定するのにかかる時間の間の時間の遅れである。

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

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

リリース履歴を保存することで、パブリックのマイルストーンが得られる。バージョンが存在したことを示す。通常、内部イベントのシーケンスに関する十分な情報を提供しない。モダンなモバイル配信では、これは重大なギャップである。アプリのユーザーが実行しているのは、ネイティブバイナリ、ウェブバンドル、アセット、機能フラグ、設定の複数層の結果であることが多い。

パブリックなリリースノートは、顧客に役立つ。インシデントの際には、ほとんど役立たない。

このことをうまく扱うチームは、記憶や散在したツールに頼らない。各デプロイ可能なアーティファクトをタイムスタンプ、起源、目的地チャンネルと紐付けしたバージョンレジャーを維持している。インシデントが始まると、歴史を再構築するのではなく、読むだけである。

弱い歴史が壊すこと

弱いアプリバージョンヒストリシステムは、避けられる問題の連鎖を生み出します:

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

なぜなら、それは管理タスクではなく、生産管理だからです。

アプリバージョンヒストリとは何ですか?

アプリバージョン履歴は アプリケーションの全体的な配信されたアプリケーションに対するGit履歴、リポジトリだけではありません。 code またはアセットが何が変更されたか、いつ変更されたか、誰がリリースを開始したか、そしてそのリリースがどこに送られたかを知ることができます。アプリがストアの提出外で変更できる場合、バージョン履歴は、ネイティブビルドと同じ厳密さでその変更をキャプチャする必要があります。

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

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

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

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

それらは異なる仕事です。変更ログは簡潔で選択的なものでなければなりません。内部の履歴システムは、完全で耐久性のあるものでなければなりません。プロフェッショナルなソフトウェア開発とlive update Pipelinesでは、詳細なアプリバージョン履歴を維持するには、 何, いつ, 誰 すべての修正に対して、責任追跡、エラー回復、迅速なロールバックを可能にするために、以下の バージョン履歴の定義.

ITU Online

必要な最小限のレコード

  • リリースがユーザーに到達する場合、そのリリースには履歴エントリが必要です。最低限、そのエントリには以下の情報が含まれる必要があります。 変更点
  • スナップショット、アーティファクト参照、ハッシュ、または差分可能なバンドル識別子。 リリース時刻
  • 正確なデプロイタイムスタンプ、曖昧なリリース日付ではありません。 リリースをトリガーしたのは誰
  • 名前の付いた開発者、サービスアカウント、またはCIジョブ。 Production、ベータ、ステージング、またはターゲットされた顧客チャネル。
  • どうすれば戻せるか 前の安定版のリビジョンとロールバックパス。

実用的なルール: チームがデプロイできる場合、チームは3つのシステムを検索することなく、デプロイを識別し、戻すことができるはずです。

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

4つの理由でアプリはバージョンヒストリが必要です。

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

開発者がcodeをタップしているスクリーンショット。

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

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

歴史がない場合、ロールバックは議論になります。歴史がある場合、ロールバックは決定になります。エンジニアは最後の数回のリリースを検査し、タイムスタンプを比較し、疑わしいアップデートを特定し、移動トラフィックまたはユーザーを安定したリビジョンに戻すことができます。

モバイルでは、ストアの修正が時間を要するため、速度はより重要です。アプリがライブアップデートも使用している場合、内部の履歴は悪いパッチを広めるのを止める最速の方法になります。

アクセスログは混乱から解放されます

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

適切な履歴システムは混乱をクエリに変えるのです。特定の日付範囲、リリースチャネル、または機能ロールアウトのためのリビジョン履歴を取得し、整合的なレコードを表示できます。そのためには、規制が必要ですが、規制に何か具体的なものを調べさせることができます。

サポートはバージョン固有の問題に答えることができます

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

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

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

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

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

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

バージョンヒストリは、緊急時のみのものではありません。実際、チームは証拠に基づいてリリース決定を下すのに役立ちます。

Androidは、バージョン認識の重要性の良い例です。Androidのパブリックバージョンヒストリは、 2007年11月5日にベータ版としてリリースされました。最初の商用版 アンドロイド 1.0 は 2008年9月23日にリリースされました。そしてプラットフォームは 世界中で3億台以上のアクティブなデバイスに成長しました。 最新の主なリリースは Android 15 2024年、 Android 14 35%の採用率を達成した アメリカの半ばで、 Android 11 インドでは28%の採用率で最も普及していた 。Androidは通常、1年ごとのメジャーアップデートを Androidバージョン履歴の参照によると 年一回のメジャーアップデートを

製品およびエンジニアリングでは、分散化はロールアウトの決定を仮定に頼ることができないことを意味します。アプリのバージョンとOSの現実、チャネル、顧客コホートの可視性が必要です。チームは、互換性の維持を code で、ロールアウトのスピードを遅くするか、古いパスを生き残らせるか、どの時点で決定します。

App Storeのバージョン履歴 vs Live Update バージョン履歴

App Storeのバージョン履歴と live update バージョン履歴は異なる問題を解決します。チームは、1つをもう1つが置き換えるものとして仮定する場合にトラブルになります。

App Storeは、主なバイナリリリースの公的記録を提供します。これは重要です。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がリリースされました。, and プラットフォームは marked a major design shift. The platform serves 世界中で1.5億台以上のアクティブなデバイス, そして iOS 16 は 米国におけるアクティブなiOSデバイスの約32%の採用率を達成した2025年初頭までに このiOSバージョン履歴の参考

。 その年間のペースは、ネイティブのリリース計画のための有用な背景です。

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

ストアの歴史は何がうまくいくか

Attribute アプリストア / プレイストア Live Update プラットフォーム(例:Capgo)
対象ユーザー パブリックとパートナー向け 内部エンジニアリング、サポート、運用
リリース単位 ネイティブバイナリ バンドル、資産、設定、対象パッチ
リリースのペース 提出とレビューのフローに連動 あなたのデプロイPipelineのスピードに応じて
メタデータの深さ リリース指向のコンテキスト 設計が良ければ詳細な運用メタデータ
ロールバックパス 通常、別のストアアクションが必要 直接前のリビジョンに戻ることができる
フォレンジック マイルストーンのトラッキングに適している インシデントレベルでの調査に適している

プラットフォーム配布バイナリ、承認、公開リリースノートは、ストアが正しい場所である。製品マネージャーと外部のステークホルダーは、その記録が必要になる。stableで、プラットフォームポリシーと一致している。

live update の履歴がゲームを変える場所

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

API の深さが主な制限である。App Store ConnectなどのパブリックAPIはバージョンヒストリを公開できるが、 50件の歴史的結果の制限, これは長期的な分析をブロックし、コンプライアンスまたは法的調査を困難にするため、 App Store Connectの歴史の制限についてのの議論

もしインシデントのタイムラインが、浅い履歴を持つパブリックのAPIに依存している場合、インシデントのタイムラインはありません。パブリックのAPIに依存しているので、パーティアルな記憶しかありません。

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

Capgoのバージョン履歴 チームが配信モデルを評価している場合、区別は実用的なものではなく、哲学的なものではありません。 アプリのストアのアップデートと直接のアップデートの

の比較は、ガバナンスとスピードのトレードオフを強調しています。 これは、バージョン履歴の要件を形作るものです。

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

日常運用から保存すべきフィールド

モデルは、一般的な運用に関する質問を簡単に回答できるようにする必要があります。これらのフィールドは、ほとんどの作業を実行します:

  • バージョンID 一意の内部識別子として使用するため、変更されないものを選択してください。
  • シーケンスバージョン 人間が読みやすいリリースラベルとして使用します。
  • ビルド番号 ネイティブプラットフォームのシーケンスに使用します。
  • チャネル 生産、ステージング、ベータ、または顧客固有のロールアウトストリームに使用します。
  • タイムスタンプ 正確なデプロイメント時間に使用します。
  • 作成者 開発者、サービスアカウント、またはCIパイプラインがリリースを開始した場合のために。
  • コミットハッシュ ソースコントロールへのトレースバックのために。
  • リリースノート 内部コンテキストのために、ただしマーケティングコピーのために。
  • アーティファクトURL バイナリまたはバンドルの場所のために。
  • 上位バージョンID 高速ロールバックの理由のために。
  • ステータス ドラフト、有効、ロールバック、廃止、または失敗のために。

オフィスで白い板に複雑なデータベースエンティティ関係図を描くプロフェッショナルな開発者。

hybridアプリの名前とリリース識別子を設定している場合、このガイドはデータモデル自体と合わせて便利なバージョン付けのガイドです。 Capacitorアプリのバージョン付けについてのガイド 実用的な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、__CAPGO_KEEP_0__ Actions、Bitrise、Fastlane、またはカスタムスクリプトからでも、すべてのリリースパスは同じコアメタデータを出力する必要があります。1つのパスが著者情報を省略し、もう1つのパスがチャンネル情報を省略すると、歴史は信頼できなくなります。

GitHubで実践する

Putting It into Practice with Capgo

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

__CAPGO_KEEP_0__の設定で、開発者は修正を実行し、CIは新しいバンドルをビルドし、システムはバンドル識別子、展開時間、起源ジョブ、ターゲットチャンネルを記録します。チームは、チャンネルごとに歴史を検査できるようになります。

バグ修正フローが説明可能なもの

live updateの設定で、開発者は修正を実行し、CIは新しいバンドルをビルドし、システムはバンドル識別子、展開時間、起源ジョブ、ターゲットチャンネルを記録します。チームは、チャンネルごとに歴史を検査できるようになります。

Capgoのツールは Capgo fits. It provides bundle history for Capacitor apps, tracks updates by channel, and supports rollback-oriented workflows for teams shipping outside store review. This overview of Capgo Capgoのツールは

__CAPGO_KEEP_0__

スクリーンショットはhttps://capgo.app

__CAPGO_KEEP_0__

Capgoのツールは

__CAPGO_KEEP_0__

  • Capgoのツールは __CAPGO_KEEP_0__
  • サポートはスクリプトを受け取ります: エージェントは、影響を受けたユーザーが再起動する必要があるか、ステージングされた修正を待っているかを説明できます。
  • 製品は隔離を取得します: 利害関係者は、問題が一つのチャネルまたはリリース波に隔離されているかどうかを確認できます。

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

レコード管理からリリース管理まで

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

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

堅固なヒストリーシステムは、サポートに信頼できる答えを与え、製品に実際のロールアウトのイメージを与え、エンジニアに安全なパスを与え、知られている状態に戻る安全なパスを与えます。また、ユーザーが実際に実行していることを正確に知らないことによるリリースの不安を取り除くこともできます。

現在のリリースパイプラインを確認してみましょう。1つの質問に答えてみましょう。生産が次の1時間で破綻した場合、チームは悪いバージョンを特定して検索せずに逆転させることができますか? その答えが「いいえ」なら、バージョン履歴が改善されます。


CapgoはCapacitorチームにバージョン履歴をリリースオペレーションの一部として扱うように助けています。チャネルベースのライブアップデート、バンドル履歴、ロールバックサポートを同じワークフローで必要とする場合は、Capgoをご覧ください。 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.

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

コンテキスト:Capgoのマーケティングウェブサイト。役割:サポートする説明文またはメタ説明文。見つける場所:コンポーネントGetStarted.astro。Capgoの製品/ブランド名と開発者用語をそのまま保存。

マーティンから人間のサポート

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