チームは通常、モバイル環境のために3つのアプローチのうちの1つを選択します。
- 2つのアプリID(本番+プレプロダクション)
- 1つのアプリID + 動的実行環境切り替え
- 1つのアプリID + Capgo チャンネル
最初の2つは機能するかもしれませんが、長期的な摩擦を生み出すことになります。実際のチームでは、Capgo チャンネルモデルが通常最も綺麗です。
なぜアプリIDの複製がノイズになるのか
使用 com.myapp と com.myapp.beta コンテキスト: Capgo マーケティング ウェブサイト。役割: 短いUIラベルまたはナビゲーションアイテム。ページ/エリア: page trust.astro。メッセージキー `and` (And)。
- 簡単に思えるかもしれませんが、すぐに複製が発生します。
- 2つのリリースパイプライン
- 2つのプッシュID、ディープリンク、エンタイトルメントマッピングセット
- 環境設定が異なる環境間で一貫性がとれず、不一致な動作が発生します。
ストアコンソール、チーム、内部のQA指示を管理することになります。
ランタイム切り替えの設定が汚くなる理由
通常、1つのアプリIDとランタイム切り替えのパターンは、アプリが起動時に環境変数やフラグを読み取り、API、キー、更新動作をダイナミックに変更することを意味します。
しかし、これは次の場合に機能しません。
- QAが予定されたフローを回避するようになり、設定状態が古くなります。
- 誰かがプロダクションで間違ったエンドポイントを使用します。
- 環境の変化が再現が難しいバグを引き起こします。
- ユーザー端末で「このバイナリが使用している設定バージョンは何ですか?」というデバッグが必要になります。
複雑さはリリースごとに増加し、チームの速度が低下します。
The Capgo way: one app ID, many channels
Capgo makes environment control explicit through channels:
- App Store / Play での 1 つの生産アプリ ID を保持してください。
- 「シェル」のための 1 つのネイティブバイナリを配信します (ネイティブの変更が真の再構築を必要とするまで)。
- チャンネルによって動作をルーティングするのではなく、重複したアプリのアイデンティティによって。
In practice では、これは次のことを意味します:
production: 全てのユーザーstaging: 内部のQAとリリース候補beta: 招待されたテスターhotfix: 緊急パッチトラック
Your TestFlight/Play 内部テストアプリは staging .forever.
JS/CSS/アセットの更新を Capgo を通して繰り返し実行できますが、ネイティブアプリの新しいバージョンを公開する必要はありません。
実践における推奨構造
1) ネイティブリリースベースライン
JSの多くのバージョンでは、最後のネイティブバイナリは同じままです:
bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual
実際にネイティブエリアが変更された場合にのみ、ネイティブバイナリを再構築します。
2) 環境用に専用のチャンネルを使用します
チャンネルを使用して更新を公開します:
bun run build
bunx @capgo/cli deploy --channel staging
テストにQA、問題を修正し、次にプロモートします:
bunx @capgo/cli promote vX.Y.Z --channel production
明示的なバージョニングを好む場合は:
bunx @capgo/cli deploy vX.Y.Z --channel staging
bunx @capgo/cli promote vX.Y.Z --channel production
3) TestFlightを「常にプレプロダクション」に設定します
iOSワークフローの場合、これはプレプロダクションの更新と関連付けられたTestFlightビルドを保持することを意味します:
- 各JS変更のために頻繁にネイティブの提出は必要ありません。
- QAは、ステージングチャンネルを介して近似的なプロダクションcodeを検証します。
- プロダクションユーザーはのみプロモートされたプロダクションチャンネルパッケージを受け取ります。
4) チャンネル切り替えは制御されたワークフローでのみ使用します
高度なチーム向けに、制御されたチャンネル切り替えをQA/管理ユーザー向けに公開します:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
これは任意のものです。多くのチームでは、ダッシュボードからチャンネル割り当てを使用し、内部ユーザーのみではなく、すべての顧客に切り替えるのではなく、内部ユーザーのみで切り替えます。
運用チェックリスト
- 1 つのアプリ ID (複製の生産/ステージング ID はありません)
- 1 つのベースラインネイティブビルドパイプライン
- チャンネルマッピングがドキュメントされている (“
staging,beta,production,hotfix) - CI/CD でのプロモーションパスの強制
- ネイティブの再構築は、ネイティブの変更のみに
- ロールバックは定期的にテスト
実用的な利点
このアプローチは、環境の漂流を排除し、ビルドの混乱を軽減し、修正を高速化します:
- QAは、実際のバイナリを取得します(偽の「ステージングアプリ」アイデンティティはありません)
- TestFlightのパスは安定する
- チームは「2つのアプリIDの負債」を避ける
- Capgoで迅速に多くのJSのみの修正をプッシュできます
最終的な結果は、よりシンプルな統治: 少ないアーティファクト、きれいなテレメトリ、リリースオペレーションにおける驚きの減少
Capgo環境のベストプラクティス: 1つのモバイルアプリIDでステージング
あなたが使用している Capgo環境のベストプラクティス: 1つのモバイルアプリIDでステージング __CAPGO_KEEP_0__を使用してチャネルルーティングとステージドロールアウトの計画を行い、チャネルと接続する チャネル チャネル チャネル チャネル チャンネル チャンネルの実装詳細のため ベータテストソリューション ベータテストソリューションの製品ワークフロー バージョン対象ソリューション バージョン対象ソリューションの製品ワークフロー