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

ホワイトラベル・マルチテナントアプリ

1つのコードベースから全テナントのアプリを配信

テナント、ブランド、拠点ごとに専用の Capgo チャネルを用意。他のテナントに影響を与えず、特定のテナントのWebレイヤーだけを更新できます。さらに Capgo Build でブランド別のネイティブシェルを構築できます。

1つのコードベース
全テナント共通の Capacitor アプリ
テナントごとに1チャネル
独自のbundle、履歴、ロールバック
クラウドビルド
Android flavorsとiOS schemes

シェル

Capacitor アプリが

テナント

チャンネル

ネイティブ

Capgo のビルド

課題

顧客ごとにフォークが増えると、ホワイトラベルアプリは難しくなる

ブランドのバリエーションはすぐに増える

顧客はそれぞれ、ロゴ、テーマ、機能セット、コンテンツ、ローンチ日を独自に求めます。フォークを分けると、その要望はリリースのたびにメンテナンス負担になります。

ストアの審査がテナントごとの修正を遅らせる

特定のテナントのメニューの誤字やonboardingの修正に、新しいバイナリやストア審査(通常24〜48時間、時にはそれ以上)を待つ必要はありません。

一括リリースは大雑把すぎる

1回のグローバルアップデートで全ブランドが一度に壊れる可能性があります。ブランドごとにフォークを分けると、チーム全体の速度が落ちます。テナントごとのリリースレーンが必要です。

よくある構成

Capgo アプリでのホワイトライトの実例

顧客ブランドのSaaSアプリ

各法人顧客ごとに独自のロゴ、テーマ、onboarding コピー、機能セットを持ち、専用のチャンネルでアップデートを受け取ります。

フランチャイズ・店舗向けアプリ

各レストラン、クリニック、ジム、支店ごとに、新しいバイナリなしでローカルメニューやアセット、キャンペーン画面を Live Update として配信できます。

ミニアプリ・マーケットプレイス

ホストアプリがワークスペースやミニアプリを一覧表示し、setChannel() で実行時に対応する Capgo チャンネルへデバイスを切り替えます。

ソリューション

アプリシェルは1つ、リリースレーンはテナントごと

ネイティブシェルは共通のまま。各テナントの Web レイヤーはそれぞれのチャンネルを通して配信されます。

テナントごとのチャンネル

テナント、フランチャイズ、ワークスペースごとにチャンネルを用意。1つのテナントにも全テナントにも配信でき、他のチャンネルに触れずに1つのチャンネルだけロールバックできます。

チャネルのドキュメント

実行時のセルフアサイン

セルフアサインを有効にすると、アプリは setChannel() を呼び出してデバイスをテナントのチャンネルに割り当てます。Capgo はアップデートチェックのたびに引き続きチャンネルを検証します。

setChannel() リファレンス

シェル間のバージョンターゲティング

テナントは異なるネイティブバージョンで稼働していることがよくあります。チャンネルごとにメジャーアップデートをブロックするか、最小ネイティブバージョンを設定することで、bundle を実行できるシェルにだけ届くようにできます。

バージョンターゲティングのドキュメント

ブランドシェル向けの Capgo Build

各 Android flavor や iOS scheme をクラウドでビルドしてストアにアップロードします。毎週変わるウェブレイヤーには Live Updates を使いましょう。

ビルドオプション

仕組み

ホワイトラベルチームが Capgo でリリースする方法

Capacitor のコードベースは1つ、テナントごとにチャンネルは1つ。コマンドと code は Capgo CLI と updater のドキュメントに記載されています。

  1. テナントごとにチャンネルを作成

    各テナントには、独自の bundle と履歴を持つチャンネルが割り当てられます。アプリがデバイスをそのチャンネルへ移せるように、セルフアサインを許可します。

    npx @capgo/cli@latest channel add acme com.example.app --self-assign
    npx @capgo/cli@latest channel add globex com.example.app --self-assign
    チャネルのドキュメント
  2. 各テナントの bundle をアップロード

    テナントのテーマと設定で web レイヤーをビルドし、そのテナントのチャンネルにだけアップロードします。他のテナントは現在の bundle を維持します。

    npx @capgo/cli@latest bundle upload --channel acme
    npx @capgo/cli@latest bundle upload --channel globex
    ロールバックのドキュメント
  3. サインイン時にデバイスを所属テナントへ移動

    サインイン後、テナントのチャンネルを指定して setChannel() を呼び出します。選択内容はデバイスに保存され、次回のアップデートチェック時に有効になります。

    import { CapacitorUpdater } from '@capgo/capacitor-updater'
    
    await CapacitorUpdater.setChannel({
      channel: tenant.channel,
      triggerAutoUpdate: true,
    })
    setChannel() リファレンス
  4. ブランド専用のシェルをクラウドでビルド

    テナントが独自のストア掲載情報、アイコン、権限を必要とする場合は、Capgo Build でその flavor や scheme をビルドします。自分の Mac は不要です。

    npx @capgo/cli@latest build request com.acme.app --platform android --android-flavor acme
    npx @capgo/cli@latest build request com.acme.app --platform ios --ios-scheme Acme
    ビルドオプション

Capacitor で構築されたアプリ

地域メディアやキャリアアプリは共通コアを持ちつつ、地域ごとの制御が必要

地域のスポーツ、エンターテインメント、通信ブランドは、共通のアプリ基盤を使い回しながら、ブランドや国ごとにスケジュール、キャンペーン、サポート、市場に合わせたコンテンツを切り替えられます。

Tigo Sports Guatemala アプリのアイコン スポーツ

Tigo Sports Guatemala

試合日程やローカルコンテンツの市場管理が求められる、地域スポーツメディアアプリ。

Google Play インストール数
160万
ストア評価
3.3
TV SPIELFILM - TV-Programmアプリのアイコン エンターテインメント

TV SPIELFILM - TV番組表

市場や番組枠によって表示されるコンテンツが変わるエンターテインメントガイド。

Google Play インストール数
1210万
ストア評価
4.4
Mi Orangeのアプリアイコン ツール

Mi Orange

共通アカウントの仕組みを持ちながら、ローカルの製品・サポートコンテンツが必要なキャリアアプリ。

Google Play インストール数
930万
ストア評価
4.2

導入実績

Capgo を活用するチームの声

5.0/5 開発チームによる評価 9,400+ チーム数 レビューを読む

no-tone @ Webincode

Webincode 開発者

「Device IDを特定のグループに追加して、そのグループにだけ変更をプッシュできるのは本当に助かります。」

Nate van Jole

CTO, プライベート

「セットアップは1日もかかりませんでした。チャンネルベースのロールアウトのおかげで、本番ユーザーに配信する前に自分のデバイスでテストできます。」

Sergiu Sのポートレート

Sergiu S

リードデベロッパー、drivolino GmbH

“Capgo Capacitor Updater pluginのおかげで、アップデートの配信方法が完全に変わりました。以前は何日もかかっていた作業が、今ではわずか数分で終わります。”

よくある質問

ホワイトラベルのFAQ

1つの Capgo 環境で多数のブランドを運用する前に、チームがよく聞く質問。

ブランドごとに別々の Capgo アプリが必要ですか?

必要になるのは、各ブランドがストアで独自のApp IDを持っている場合だけです。複数のテナントを1つのストアアプリで提供するなら、テナントごとに1つのチャンネルを持つ1つの Capgo アプリになります。ブランド別のストアアプリは別々の Capgo アプリで、それぞれ独自のチャンネルを持ちます。

チャネルのドキュメント

ユーザーはアプリ内でテナントを切り替えられますか?

はい。テナントのチャンネルがセルフアサインを許可していれば、アプリから setChannel() を呼び出します。現在のプラグインバージョンでは、選択内容はデバイスに保存され、次回のアップデートチェック時に使用されます。

setChannel() リファレンス

一部のテナントが古いネイティブバージョンを使っている場合はどうなりますか?

バージョンターゲティングを使用してください。チャンネルでメジャーアップデートをブロックするか、bundleに最小ネイティブバージョンを設定して、古いシェルでも実行できるbundleを維持します。

バージョンターゲティングのドキュメント

他のテナントに影響を与えずに、特定のテナントだけロールバックできますか?

はい。各チャンネルは独自のbundle履歴を保持しています。そのテナントのチャンネルを以前のbundleにロールバックしても、他のチャンネルはそのままです。

ロールバックのドキュメント

ストアリリースがまだ必要なものは何ですか?

アプリ名、アイコン、権限、ネイティブプラグイン、およびnative codeはバイナリに含まれます。Capgo Buildを使用すれば、各flavorやschemeをビルドしてApp Store ConnectとGoogle Playへアップロードできます。

Capgo Buildドキュメント

自社アプリでテナントチャンネルを試す

14日間のトライアル期間中に、2つのテナントチャンネルを作成し、それぞれにbundleをアップロードして、setChannel()でテストデバイスをチャンネル間で切り替えてみてください。