ユーザーに即時フィードバックとレビューを求めるために、テストフライトまたはGoogle Playから新しいビルドをダウンロードしてインストールする必要なく、直接特定のユーザーに変更を配信したいと思ったことはありませんか?
私は、実装が可能だったが、結果をユーザーに提供して検証するために、リスクのある実験的変更をすべてのユーザーに配信するか、またはクライアントに一時的なビルドを作成するという手間のある作業を両方に課す必要がありました。
必要なものは柔軟性でした。開発者は、非技術的なステークホルダー、QA、または適切な場合にユーザー全体に提供するために、異なるユーザーグループに異なるアップデートを提供できるようにしたいと考えていました。
生産ビルドは、ワークインプログレス版に切り替え、フィードバックを収集し、再び生産に戻ることができませんでした。
そのような柔軟性を実現するのが チャンネルサーフィング です。ユーザーのデバイスにインストールされたアプリは、実行時でアップデートチャンネルを切り替えることができ、生産アプリをレビューと反復のための柔軟なスペースに変えることができます。非技術的なステークホルダーが生産アプリを使用して変更をテストし、直接フィードバックを提供できるため、特に生産アプリを使用している非技術的なステークホルダーにとっては特に便利です。
アップデートチャンネルの理解
アップデート チャンネルは、Capgo が特定のビルドへのアップデートをターゲットにする方法です。各ビルドはチャンネルと関連付けられており、そのチャンネルはどのアップデートを受け取るかを決定します。
たとえば、ユーザーに影響を与えないようにアップデートを特定のチャンネルに公開できます。過去には、チャンネルを切り替えるには別のネイティブ ビルドをインストールするか、またはマニュアルでデバイスの割り当てをダッシュボードで変更する必要がありました。 preview Capgo のチャンネルでは、次のことができます。 production特定のユーザー グループに異なる機能をターゲットにする
Channels in Capgo allow you to:
- 新機能を段階的にロールアウトする
- ベータ テスト プログラムを作成する
- 個々のユーザーで生産問題をデバッグする
- アップデート チャンネルについては、Capgo チャンネル ドキュメントを参照してください
- __CAPGO_KEEP_0__
__CAPGO_KEEP_0__ Capgo 詳細は後述します。
Channel Surfingとは?
Channel Surfingは、インストール済みのアプリが再インストールせずに、異なるアップデートストリームからデータを取得できるようにします。インストール済みのアプリは、実行中のruntimeでアップデートチャンネルを切り替えることができ、切り替えたチャンネルからアップデートを受け続けるまでは、アプリがアンインストールされるか、別のチャンネルに切り替えるまで続きます。
実際には、製品オーナーまたはQAが、例えば「チャンネル」にビルドを切り替えて、最新の変更を試すことができます。テストが完了したら、元のチャンネルに切り替えるだけです。再インストールや別のプレビュービルドが必要ありません。 production Channel Surfingの内部実装では、アプリがアップデートクライアントに使用するチャンネルを選択できるようにします。この選択肢はruntimeで変更でき、変更がキャンセルされるか置き換えられるまで有効です。 preview Channel Surfingの実装方法 production Channel Surfingを試す前に、プロジェクトは__CAPGO_KEEP_0__ Live Updatesで構成されている必要があります。設定方法については、「__CAPGO_KEEP_0__」のクイックスタートガイドを参照してください。
Channel Surfingのための必要な設定は、__CAPGO_KEEP_0__ ダッシュボードで「デバイスが自ら関連付けられることを許可する」にチェックを入れるだけです。
Channel
Before you can try channel surfing, your project needs to be configured with Capgo Live Updates. To set that up, follow the Capgo quickstart guide.
The only setup required for channel surfing is enabling “Allow devices to self associate” on each channel you want to switch to in the Capgo dashboard. No code の変更や設定の変更が必要です。
チャンネルサーフィングの核となる部分は、単一の API 呼び出しによって動かされています。
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
This は、 Capgo に更新を問い合わせる際に使用されるチャンネルを設定します。 setChannel API についてもっと学びましょう。.
即時チャンネル切り替え (v5.34.0+)
プラグインバージョン 5.34.0、6.34.0、7.34.0、または 8.0.0 (あなたのメジャーバージョンに応じて) から始めて、 より速く、より速く動作します: setChannel() バックエンド検証 (読み取り専用)
- : __CAPGO_KEEP_0__ バックエンドにリクエストを送信して、チャンネルが許可されているかどうかを検証します。: A request is sent to the Capgo backend to validate the channel is allowed
- : 検証が成功した場合、チャンネルはデバイスのローカルストレージに保存されます。Instant Channel Switching (v5.34.0+)
- 即時効果: 次のアップデートチェックでは、新しいチャネルを即座に使用します
以前は setChannel() 保存したチャネルオーバーライドをバックエンドデータベース(例:ダッシュボードまたはAPIの変更)に保存しました。デバイスは、バックエンドの再生産(最大2分)が完了するまで、新しいチャネルが認識されるのを待つ必要がありました。新しい動作では、バックエンドからのみ読み取り(検証用)し、ローカルに保存するため、チャネル切り替えは即時になりました。
チャネル切り替えフローの完全な流れ
より良いユーザー体験を実現するには、チャネルを切り替えただけでは、通常、単にアプリを再起動して待つだけではありません。一般的なアプローチは、すぐにアップデートをチェックし、利用可能な場合はダウンロードし、アプリを再起動して、ユーザーが選択したチャネルのアップデートに直接到達するようにすることです。
一般的なフローは次のようになります:
- チャネルを変更する(
setChannel) - アップデートをチェックする(
getLatest) - アップデートを取得して適用する(
download,setまたはnext) - アプリを再起動する必要がある場合(
reload)
ここでは、完全な例を示します。
import { CapacitorUpdater } from '@capgo/capacitor-updater';
async function switchChannel(selectedChannel: string) {
try {
// 1. Set the updates channel (with optional auto-update trigger)
await CapacitorUpdater.setChannel({
channel: selectedChannel,
triggerAutoUpdate: true // Immediately check for updates
});
console.log(`Switched to channel: ${selectedChannel}`);
// If you want more control, handle the update manually:
// const latest = await CapacitorUpdater.getLatest();
// if (latest.url) {
// const bundle = await CapacitorUpdater.download({
// url: latest.url,
// version: latest.version
// });
// await CapacitorUpdater.set({ id: bundle.id });
// }
} catch (error) {
console.error('Failed to switch channel:', error);
}
}
// Switch to the beta channel
switchChannel('beta');
このフローの構造はあなた次第です。ステップを複数のインタラクションに分割したり、すべて一度に実行したりすることができます。どのようにフローを構造化するかはあなた次第ですが、失敗を考慮するようにしてください。ネットワークの問題や無効なチャンネルはすべて、更新が適用されるのを防ぐことができます。
唯一の要件:自己割り当ての有効化
この機能を有効にするには、チャンネルサーフィングのみが必要です。 アプリがチャンネルを切り替えるために使用できる""を使用する前に、チャンネルに該当する__CAPGO_KEEP_0__ダッシュボードで自己割り当てを有効化する必要があります。 setChannel(), you must enable self-assignment for that channel in the Capgo dashboard:
- __CAPGO_KEEP_0__ダッシュボードの"チャンネル"セクションに移動してください。 管理したいチャンネルの名前をクリックしてください。 section in your Capgo dashboard
- translations
- translations translations
- 変更を保存

それだけです。アプリの設定変更は必要ありません。 defaultChannel 必要な設定はありません。ユーザーが切り替えるチャネルを選択したい場合は、チャネル設定で__CAPGO_KEEP_0__を有効にします。
__CAPGO_KEEP_0__が無効の場合、チャネルを呼び出す試行は失敗し、イベントが発生します。 setChannel() 利用可能なチャネルの一覧 channelPrivate 自我割り当てが可能なチャネルのリストを取得できます。
このメソッドは、自我割り当てが有効なチャネルのみを返します。
現在のチャネルを取得
const { channels } = await CapacitorUpdater.listChannels();
console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI
現在のチャネルを確認できます。
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__
const { channel } = await CapacitorUpdater.getChannel();
console.log('Current channel:', channel);
デフォルトチャンネルに戻す
デフォルトに戻るには、次の手順を実行してください。
await CapacitorUpdater.unsetChannel({});
この手順では、デバイスを特定のチャンネルから解除し、デフォルトの defaultChannel またはクラウドのデフォルトに戻ります。
チャンネルサーフィングのテスト方法
チャンネルサーフィングを実際に確認するには、リリースビルドが必要です - @capgo/capacitor-updater APIはリリースビルド用に設計されています。デバッグビルドでは、通常の更新フローを回避するために、開発サーバーからJavaScriptを読み込むことが多いからです。
前提条件
チャンネルサーフィングの唯一の要件は、 「デバイスが自らアソシエートを許可する」 を各チャンネルに有効にすることです。アプリの設定変更は必要ありません。
テストビルドの作成
通常のアプリ開発と同じようにアプリを構築します:
bun run build && npx cap sync
次に、XcodeまたはAndroid Studioを使用してネイティブビルドを作成するか、CI/CDパイプラインを使用します。アプリは、Capgoダッシュボードで設定されているクラウドのデフォルトチャネルに基づいて起動します。
異なるチャネルへのアップデートの公開
アプリがインストールされたら、異なるチャネルへのアップデートを公開します:
# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview
# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production
そこから、アプリ内でチャネルサーフィングUIに移動し、チャネル切り替えをトリガーします。アプリは、選択されたチャネルからアップデートを取得し、更新されたアップデートにリロードします。
チャネル切り替えUIの作成
チャネルサーフィングは、通常、すべてのユーザーに公開したくない機能です。たとえば、ユーザーが認証された従業員のみに、プレビュー チャネルにアプリを切り替えるボタンを提供することができます。
チャネル切り替えUIの例
import { useState, useEffect } from 'react';
import { CapacitorUpdater } from '@capgo/capacitor-updater';
export function ChannelSwitcher() {
const [currentChannel, setCurrentChannel] = useState<string>('');
const [availableChannels, setAvailableChannels] = useState<string[]>([]);
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadChannelInfo();
}, []);
async function loadChannelInfo() {
const { channel } = await CapacitorUpdater.getChannel();
setCurrentChannel(channel || 'default');
const { channels } = await CapacitorUpdater.listChannels();
setAvailableChannels(channels.map(c => c.name));
}
async function handleChannelSwitch(channel: string) {
setIsLoading(true);
try {
await CapacitorUpdater.setChannel({
channel,
triggerAutoUpdate: true
});
setCurrentChannel(channel);
// App will update in background or on next restart
} catch (error) {
console.error('Failed to switch channel:', error);
} finally {
setIsLoading(false);
}
}
return (
<div>
<p>Current channel: {currentChannel}</p>
<div>
{availableChannels.map(channel => (
<button
key={channel}
onClick={() => handleChannelSwitch(channel)}
disabled={isLoading || channel === currentChannel}
>
Switch to {channel}
</button>
))}
</div>
</div>
);
}
チャネルサーフィングの際に発生する問題
これらはすべてチャネルサーフィングに特有のものではありませんが、実行時でチャネルを切り替えるようになったらすぐに現れます。
実行時バージョン不一致
Capgoのアップデートはネイティブアプリのバージョンと紐付けされています。アップデートのネイティブバージョンがインストール済みアプリのネイティブバージョンと一致しない場合、アップデートはダウンロードされず、適用されません。チャネルサーフィングの場合、通常、アプリはチャネルを切り替えますが、アップデートが適用されないことがあります。チャネルにアップデートが存在しているにもかかわらず、実際にはアップデートが適用されません。
This usually means the update was published from a different native version of the app. Make sure your channel’s bundle is compatible with the native version installed on the device.
削除またはキャンセル
If an app has already downloaded an update for a channel, deleting that update from the Capgo dashboard does not remove it from devices that already have it. Deletion only stops 将来 のダウンロード。
The most reliable way to undo a bad update is to publish a known-good update to the same channel. This creates a new update at the top of the channel’s history, which clients will treat as the latest version and apply instead.
Capgo also provides a rollback mechanism that can instruct clients to re-apply a previous stable update or fall back to the update embedded in the build.
データ移行に関する考慮事項
Switching channels changes the JavaScript bundle the app runs. If your app depends on migrations or data shapes that are not compatible across channels, switching back and forth may cause issues.
例えば、ベータ版のアップデートがデータベースのマイグレーションを適用した場合、プロダクション版は新しいスキーマを理解できない可能性があります。開発者は、更新が安全に切り替えられるようにするか、必要に応じて切り替えを一方向に制限する必要があります。
チャンネルサーフィングは、プロダクション環境で変更を迅速にレビューする必要がある場合に特に便利です。
__CAPGO_KEEP_0__
Rapid Validation
急速バグ修正
Imagine an urgent bug fix that needs validation before being rolled out broadly. With channel surfing, the change can be isolated to a small set of designated users who can review it before it reaches production.
ステークホルダーレビュー
A product owner or QA can switch their installed production build to another update channel, verify the fix or feature, and then switch back again once they’re done.
Streamlined Testing
テストの簡素化
- This makes it easier to involve non-technical stakeholders in review and decision-making, while keeping the workflow smooth. A single production build becomes a flexible tool for testing, feedback, and validation.用例
- QAテスト: QAチームは機能ブランチ間を切り替えることができます
- ベータプログラムs:ユーザーは早期アクセス用のベータチャンネルに参加することができます: ご利用者にリリースする前に、製品オーナーは変更をプレビューする
- A/B Testing: 実験のためにユーザーを異なるチャネルに割り当てる
- Debugging: 特定のユーザーをデバッグチャネルに切り替えて問題を診断する
比較: チャネル変更方法
| 方法 | 効果時間 | 保存先 | 使用例 |
|---|---|---|---|
setChannel() プラグインから |
即時 | デバイスのみ(ローカル) | アプリ内でユーザーがチャネルを切り替える |
| デバイスのオーバーライド | 最大2分 | バックエンドデータベース | 特定のデバイスのための管理者が行う変更 |
| API チャネル割り当て | 最大2分 | バックエンドデータベース | 自動化されたバックエンド統合 |
チャネル切り替えUIを構築する際に、最良のユーザー体験を得るには、常にプラグインの setChannel() メソッドを使用してください。
ベスト プラクティス
- アクセス制限: チャンネルサーフィングは通常内部使用用 - すべてのユーザーに公開しないでください
- エラー処理: チャンネル切り替え時にエラーを優雅に処理するようにしてください
- 互換性の確認: インストール済みのネイティブ版と異なるチャンネルの更新が互換性があることを確認してください
- チャンネルドキュメント: 各チャンネルの目的を明確にドキュメント化してください
- 使用状況の監視: デバッグ用にデバイスがどのチャンネルに接続されているかを追跡してください
リソース
Conclusion
アプリのCapacitorを通してチャンネルサーフィングがどのように変化するか。生産ビルドを固定エンドポイントとして扱うのではなく、テスト、検証、迅速な反復のための柔軟なツールとして扱うことができるようになります。
Cloudflareの最新のプラグインバージョンで導入された即時チャンネル切り替えにより、ユーザーは新しいチャンネンから即座に更新を受け取ることができるようになりました。
バグフィックスの検証、ベータプログラムの実行、特定のユーザーと問題のデバッグなど、さまざまなシナリオでチャンネルサーフィングは、正しいアップデートを正しいユーザーに正しいタイミングで配信できるようにします。
Channel Surfing for Capgoの続き: Capgoのアップデートチャンネルを実行時で切り替える方法
__CAPGO_KEEP_0__を使用している場合 Channel Surfing for Capgo: Capgoのアップデートチャンネルを実行時で切り替える方法 を使用してチャンネルルーティングとステージドロールアウトを計画し、接続する チャンネル __CAPGO_KEEP_0__ チャンネル __CAPGO_KEEP_0__ チャンネル __CAPGO_KEEP_0__ ベータテスト ソリューション __CAPGO_KEEP_0__ バージョン ターゲット ソリューション __CAPGO_KEEP_0__