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

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

サポート、監査、ロールバックのためにアプリバージョンヒストリーの重要性を学びましょう。このガイドでは、データモデル、プラットフォームの違い、ベストプラクティスについて説明します。

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

リリースが遅れて出る。サポートが起きると、クラッシュの苦情、ログインの失敗、チェックアウトフローの突然の停止が起こる。エンジニアは最初に明らかな質問を投げる:何が変わったのか?その後、部屋は静かになる。

Gitコミットを1人で引っ張り、CIログをもう1人で調べる。製品はApp Storeのリリースノートを確認し、ほとんどのことは「バグ修正と改善」というだけのものである。Slackの誰かが最後の瞬間の設定変更を思い出すが、誰も確かめることができない。どちらがストアビルドに、どちらがライブアップデートパッケージにどちらがどちらに着地したのか。チームはその時、変更履歴とアプリバージョンヒストリーは同じものではないことを学ぶ。

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

目次

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

失敗は、実際にはバグそのものではなく、バグを見つけるのにかかる時間と、バグを引き起こしたバージョンを特定するのにかかる時間の間の時間差である。

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

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

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

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

このことをうまく扱うチームは、メモリや散在したツールに頼らない。タイムスタンプ、起源、目的地チャンネルと関連付けられた、すべてのデプロイ可能なアーティファクトを維持する。インシデントが始まると、歴史を再構築するのではなく、読み取る。

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

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

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

なぜこれは管理タスクではないのか?

なぜこれは生産管理タスクであるのか?

アプリバージョンヒストリとは何か? アプリの全ての実装されたアプリケーションのGitヒストリ, にはリポジトリだけではありません。 code またはアセットが変更されたとき、変更された時期、リリースを開始した人、そしてそのリリースがどこに行ったかを知ることができます。アプリがストアの提出外で変更される場合、その変更を同等の厳しさでキャプチャする必要があります。

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

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

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

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

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

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

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

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

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

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

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

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

開発者がcodeを入力する携帯型コンピュータの画面が木の机の上に表示されている。

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

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

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

速度はモバイルでも重要です。ストアの修正には時間がかかる場合、内部の歴史は悪いパッチを広がらせないように止める最速の方法になります。

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

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

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

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

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

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

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

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

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

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

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

Androidは、バージョン認識の重要性を示す良い例である。Androidの公開バージョン履歴は、 2007年11月5日に始まり、 2008年9月23日 にリリースされた最初の商用バージョン Android 1.0は、 3億を超えるアクティブなデバイスが世界中で利用されている。最新の主なリリースは Android 15 であり、2024年にリリースされた Android 14 reaching 米国で2024年半ばまでに35%の採用率に達しています, while Android 11 インドで28%の採用率で最も普及しています . Androidは通常、1年ごとにメジャーアップデートを提供します. Android also typically ships Androidバージョン履歴の参照によると according to the Android version history reference.

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.

アプリストア履歴vsライブアップデート履歴

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • バージョンID 内部識別子として一意のものが必要です。
  • __CAPGO_KEEP_0__ __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__ プラットフォーム固有のシーケンス用
  • チャンネル 生産、ステージング、ベータ、または顧客固有のロールアウトストリーム用
  • タイムスタンプ 正確なデプロイ時刻用
  • 作者 リリースを開始した開発者、サービスアカウント、またはCIパイプライン用
  • __CAPGO_KEEP_0__ ソース管理の追跡のために。
  • リリースノート 内部コンテキストのみに焦点を当てるため、単にマーケティングコピーではありません。
  • アーティファクトURL バイナリまたはバンドルの場所のために。
  • バージョンIDを上書きするために。 高速ロールバックの理由のために。
  • ステータス ダースボード上で複雑なデータベースエンティティ関係図を描くプロフェッショナル開発者がオフィスで働いている。

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

バージョンタグ付けの__CAPGO_KEEP_0__アプリケーション version tagging in Capacitor apps データモデル自体と組み合わせると、非常に便利な補完機能です。

A practical JSON example

主にモバイルリリースオペレーションをカバーするシンプルな形状があります。

{
  "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_KEEP_0__ のようなツールが役立ちます。 Capgo Capacitorのアプリバージョン履歴 Capgoがバージョン管理とロールバックをどのように扱うか __CAPGO_KEEP_0__がバージョン管理とロールバックをどのように扱うか

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

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

ロールバックの予測なし

ロールバックのフローは、"どのバージョンを試すか" という質問から始まらない。前の安定版リリースが明確である、可視化された修正履歴から始まる。

それが、インシデント対応の質が改善される理由です。

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

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

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

製品バージョン履歴は一般的に文書管理として扱われます。成熟したチームはそれを運用管理面として扱います。

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

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

現在のリリースパイプラインをレビューし、次の質問を考えてみましょう。生産が次の 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.