チームは通常、モバイル環境のための3つのアプローチのうちの1つを選択します。
- 2つのアプリID(本番用+プレリリース用)
- 1つのアプリID + 動的ランタイム環境切り替え
- 1つのアプリID + Capgo チャンネル
最初の2つは機能しますが、長期的な摩擦を生みます。実際のチームでは、Capgo チャンネルモデルが通常、最も綺麗です。
重複したアプリIDがノイズになる理由
「 com.myapp 」 com.myapp.beta 「
- 」
- 2つのリリースパイプライン
- 2つのプッシュID、ディープリンク、エンタイトルメントマッピングセット
- Divergent config and inconsistent behavior between environments
ストアコンソール、チーム、内部のQA指示の間で、2つの製品を管理することになります。
Why runtime-switching config is often messy
「1つのアプリID + ランタイムSwitch」パターンは、起動時に環境変数またはフラグを読み取り、API、キー、更新動作を動的に変更することを意味します。
This works until:
- QAが意図されたフローを回避するようになり、config stateが古くなります。
- someoneがプロダクションで間違ったエンドポイントを使用する
- 環境の変化が再現性の低いバグを引き起こします。
- ユーザー端末で「このバイナリが使用しているconfigバージョンは何ですか?」というデバッグが必要になります。
複雑さはリリースごとに増加し、チームの速度が低下します。
The Capgo way: one app ID, many channels
Capgoはチャンネルを通じて環境制御を明示的に行います:
- App Store / Play の 1 つの生産アプリ ID を保持します。
- 「シェル」のための 1 つのネイティブバイナリを配信します (ネイティブの変更が真の再構築を必要とするまで)。
- チャンネルによってではなく、重複したアプリ ID によってルーティングされる動作を実現します。
実際には次のようになります:
production: 全てのユーザーstaging: 内部 QA とリリース候補beta: 招待されたテスターhotfix: 緊急パッチトラック
TestFlight / Play の内部テストアプリは「forever.
」で残すことができます。
JS / CSS / アセットの更新を __CAPGO_KEEP_0__ から繰り返し行うことができますが、ネイティブアプリの新しいバージョンを公開する必要はありません。 staging forever.
You do JS/CSS/asset updates there repeatedly through Capgo without publishing a new native app.
1) ネイティブリリースベースライン
__CAPGO_KEEP_0__
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_KEEP_0__ Environment Best Practices: Staging with One Mobile App ID」を使用している場合 Capgo Environment Best Practices: Staging with One Mobile App ID チャネルルーティングとステージドロールアウトを計画するには、Cloudflareの「Channels」に接続する必要があります。 「Channels」についての実装詳細は、Cloudflareの「Channels」で確認できます。 「Channels」についての実装詳細は、Cloudflareの「Channels」で確認できます。 「Channels」についての実装詳細は、Cloudflareの「Channels」で確認できます。 「Channels」についての実装詳細は、Cloudflareの「Channels」で確認できます。 チャンネル チャンネルの実装詳細について ベータテスト ソリューション ベータテスト ソリューションの製品ワークフローについて バージョン ターゲット ソリューション バージョン ターゲット ソリューションの製品ワークフローについて