abtesting-mobile について
abtesting-mobileは、iOS・AndroidアプリのA/Bテスト、機能フラグ、段階的ロールアウトを計画・実施するスキルです。Firebase Remote Config、Optimizely、Statsig、アプリストア実験を使う手順を扱います。
主な機能
- 01Firebase Remote Configの設定
- 02Optimizelyの実験ワークフロー
- 03Statsigのフラグと実験
- 04段階的ロールアウトとカナリアリリース
- 05バリアント割り当てとイベント追跡
活用シーン
- 01モバイルアプリのUI変更をテスト
- 02一定割合のユーザーに機能を公開
- 03Optimizelyでボタンの色を比較
- 04再デプロイせずにリモート設定を更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill abtesting-mobileインストール後、Claude Code で/abtesting-mobileを入力して読み込まれたか確認します。
詳細
abtesting-mobile
目的
このスキルでは、Firebase Remote Config、Optimizely、Statsig、アプリストアの実験などのツールを使用して、モバイルアプリの A/B テストを行います。機能フラグ、段階的なロールアウト、カナリアリリースに重点を置き、ユーザーエクスペリエンスの最適化を目指します。
使用するタイミング
UI の変更、機能の切り替え、段階的なロールアウトなど、モバイルアプリで実験を行う場合にこのスキルを使用します。リスクを最小限に抑え、データに基づくインサイトを得る場合や、アプリストアの実験に関するガイドラインを遵守する場合に、iOS/Android アプリに適用してください。
主な機能
- Firebase Remote Config を設定して、アプリを再デプロイせずにパラメーターを動的に更新します。
- Optimizely SDK を統合し、イベントトラッキングやオーディエンスセグメンテーションを含む、A/B テストの一連のサイクルを実施します。
- Statsig を使用して、最小限の設定で機能フラグや実験をすばやく実施します。
- Firebase またはアプリストアの API を使用して段階的なロールアウトを管理し、ユーザーへの公開範囲を制御します。
- 新機能の対象割合を指定して、カナリアリリースをサポートします。
使用パターン
A/B テストを設定するには、まずサービスで認証し、次に設定ファイルでパラメーターを定義して、アプリコードで値を取得し、結果を監視します。Firebase では CLI を使用して設定を更新し、Optimizely ではアプリのライフサイクルの早い段階で SDK を初期化します。エラーへの耐性を高めるため、実験は必ず try-catch ブロックで囲んでください。パターン:設定を読み込む → バリアントを割り当てる → イベントを追跡する → データを分析する。
主なコマンド/API
Firebase Remote Config の場合:
- CLI:パラメーターを取得するには
firebase rc:fetch --token $FIREBASE_API_KEYを実行します。 - API エンドポイント:
https://firebaseremoteconfig.googleapis.com/v1/projects/{projectId}/remoteConfigに、{"parameters": {"feature_flag": {"defaultValue": {"value": "true"}}}}のような JSON ボディを指定して POST します。 - コードスニペット(iOS 向け Swift):
let remoteConfig = RemoteConfig.remoteConfig() remoteConfig.fetch { status, error in if status == .success { remoteConfig.activate() } }
Optimizely の場合:
- CLI:
optimizely project create --apiKey $OPTIMIZELY_API_KEY --name "MobileExperiment"を実行します。 - API エンドポイント:実験の一覧を取得するには
https://api.optimizely.com/v2/experimentsに GET します。 - コードスニペット(Android 向け Kotlin):
OptimizelyManager.getInstance().optimizely.start { userId, attributes -> val variation = optimizely.decide(userId, "experimentKey") // Apply variation }
Statsig の場合:
- CLI:
statsig config set --key $STATSIG_API_KEY --feature "newFeature" --value trueを実行します。 - API エンドポイント:
https://api.statsig.com/v1/evaluateに{"userID": "123", "featureKey": "feature"}をボディとして指定して POST します。 - コードスニペット(React Native 向け汎用 JS):
import Statsig from 'statsig-react-native'; Statsig.initialize('your-sdk-key').then(() => { const value = Statsig.checkGate('feature_gate'); });
統合に関する注意事項
パッケージマネージャーを使って SDK を追加し、統合します(例:iOS では pod 'Firebase/RemoteConfig'、Android では implementation 'com.optimizely.ab:android-sdk:4.0.0')。認証には環境変数を使用し、CI/CD パイプラインで $FIREBASE_API_KEY を設定してください。設定形式には、次のような JSON ファイルを使用します:
{
"parameters": {
"color_scheme": {
"defaultValue": { "value": "blue" },
"description": "A/B test for app theme"
}
}
}
設定をキャッシュして、アプリがオフラインの状況に対応できるようにしてください。複数のツールを使う場合は、シンプルなフラグには Firebase、複雑な実験には Optimizely を優先します。
エラー処理
認証エラーが発生した場合は、401 レスポンスを確認し、トークンを更新して再試行します。Firebase では、コード 3(ネットワークエラー)の NSError を捕捉し、デフォルト値にフォールバックします。コード例:
try {
remoteConfig.fetchAndActivate { status, error in
if let error = error { print("Error: \(error.localizedDescription)") }
}
} catch { print("Fetch failed: \(error)") }
Optimizely では、判定エラーをログに記録し、デフォルトのバリエーションを使用します。よくある問題:無効な API キー — echo $OPTIMIZELY_API_KEY で確認します。ネットワーク障害 — 指数バックオフを実装します。
具体的な使用例
例 1:Firebase を使用して新機能の段階的なロールアウトを設定します。
- 手順:
$FIREBASE_API_KEYをエクスポートし、firebase rc:set --project myapp --params '{"rollout_percent": 50}'を実行します。次に、アプリコードで値を取得して確認し、50%のユーザーに対して機能を有効にします。
例 2:Optimizely でボタンの色に関する A/B テストを実施します。
- 手順:
optimizely experiment create --apiKey $OPTIMIZELY_API_KEY --key "buttonColorTest" --variations '["red", "blue"]'を実行して実験を作成し、SDK を統合します。次に、コードで決定されたバリエーションを使用してボタンの色を設定し、クリックを追跡します。
グラフの関係性
- 関連:abtesting クラスター(例:Web バリアント向けの abtesting-web)
- 接続:mobile タグ経由(mobile-analytics などのスキルにリンク)
- 依存関係:完全な機能を利用するには、firebase クラスターと optimizely クラスターが必要です
- 重複:rollout タグとデプロイスキルへのエッジを共有