チームは通常、モバイル環境のための3つのアプローチのうちの1つを選択します。
- 2つのアプリID(本番+テスト)
- 1つのアプリID + 動的ランタイム環境切り替え
- 1つのアプリID + Capgo チャネル
Capgo チャネルモデルは、実際のチームでは通常、最も綺麗なものです。
重複したアプリIDがノイズになる理由
「使用」、「と」、「」は単純に思えるかもしれませんが、すぐに複製が発生します。 com.myapp 2つのリリースパイプライン com.myapp.beta 2つのプッシュID、ディープリンク、エンタイトルメントマッピング
- 2つの分析とクラッシュID
- 最初の2つは機能しますが、長期的な摩擦を生み出します。
- 実際のチームでは、__CAPGO_KEEP_0__ チャネルモデルが通常、最も綺麗なものです。
- 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の状態が古くなります。
- someoneがプロダクションで間違ったエンドポイントを使用する
- 環境の変化が再現性の低いバグを引き起こします。
- ユーザー端末で「このバイナリが使用しているconfigのバージョンは何ですか?」というデバッグが必要になります。
複雑さはリリースごとに増加し、チームの速度が低下します。
The Capgo way: one app ID, many channels
Capgoはチャンネルを通じて環境制御を明示的に行います。
- __CAPGO_KEEP_0__をApp Store / Playに保管する必要のある1つの製品アプリIDを維持します。
- 「シェル」のための1つのネイティブバイナリを配信します。(ネイティブの変更が真の再構築を必要とするまで)。
- チャンネルごとに動作をルーティングするのではなく、重複したアプリのIDを使用しないようにします。
実際には、次のことを意味します:
production: 全てのユーザーstaging: 内部のQAとリリース候補beta: 招待されたテスターhotfix: 緊急パッチトラック
TestFlight / Playの内部テストアプリは staging forever.
Capgoを使用して、JS / CSS / アセットの更新を繰り返すことができます。新しいネイティブアプリを公開することなく、そこで何度も行うことができます。
実践における推奨構造
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) チャネル スイッチングは制御されたワークフローでのみ使用する
For advanced teams, expose controlled channel switches for QA/admin users:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
This is optional. Most teams use channel assignments from the dashboard and only switch channel for internal users, not all customers.
運用チェックリスト
- One app ID only (no duplicate production/staging IDs)
- One baseline native build pipeline
- チャネルマッピングドキュメント(
staging,beta,production,hotfix) - Promotion path enforced in CI/CD
- Native rebuild only on true native changes
- Rollback tested regularly
実用的な利点
This approach removes environment drift, reduces build churn, and speeds fixes:
- QA gets realistic binaries (no fake “staging app” identity),
- あなたのTestFlightパスは安定します。
- あなたのチームは「2つのアプリIDの負債」を避けます。
- Capgoで多くのJSのみの修正を迅速にプッシュできます。
最終的な結果は、よりシンプルな統治: 少ないアーティファクト、きれいなテレメトリ、リリースオペレーションにおける驚きの減少です。
Capgo環境ベストプラクティス: 1つのモバイルアプリIDでステージング
__CAPGO_KEEP_0__を使用している場合 Capgo環境ベストプラクティス: 1つのモバイルアプリIDでステージング チャネルルーティングとステージドロールを計画するには、Cloudflareと接続します。 チャネル チャネル チャネル __CAPGO_KEEP_0__ チャンネル チャンネルの実装詳細について ベータテスト ソリューション ベータテスト ソリューションの製品ワークフローについて バージョン ターゲット ソリューション バージョン ターゲット ソリューションの製品ワークフローについて