Feature FlagsやA/Bテストはリードタイムの改善や、リリース施策の効果検証の点で有益な手法です。これを実現するためのSaaSやOSSソフトウェアがいくつかあるので、現時点での比較をしてみました。
※あくまで比較記事ですのでプロダクトとしての優劣を論じる記事ではありません。どれを採用すべきかは顧客のワークロードによります。
Feature Flags + A/BテストをサポートするSaaS
代表的なSaaSから紹介しましょう。
LaunchDarkly
フィーチャーフラグとA/Bテストを提供するサービスです。フィーチャーフラグとしての機能を幅広く持っており、特にSDKの対応する言語の数が他と比較して多いです。A/Bテストには頻度論的分析機能を備えています。
Firebase Remote Config
Googleが提供するフィーチャーフラグサービスです。基本無料で利用でき、Google Analyticsとの連携を行ってA/Bテストを実施することができます。A/Bテストはベイズ論的分析を行っており、同時テスト数は24という制限があります。デフォルトではUIでフラグの更新を行ってからクライアントへの反映までは一定の時間がかかります(Cloud FunctionとFCMを利用した即時更新のワークフローを組む方法が紹介されています。)
Optimizely
A/Bテストの分野で最も有名なサービスの一つです。法人向けの様々な機能があり、A/Bテストの独自管理プラットフォーム、多腕バンディット、A/Bテストごとにユーザーが重複しないようにする機能などA/Bテストを使い倒したいユーザー向けの機能が充実しています。
Split
フィーチャーフラグとA/Bテストを提供するサービスです。デリバリーやトランクベースなどの開発生産性向上を全面に押し出しており、フラグのリリース時に設定したパフォーマンスやエラーデータからアラートを飛ばすなどの機能を備えています。A/Bテストに関しては最上位プランのみ可能になります。
VWO
ウェブ開発をより簡単かつ高速にするための機能群を提供しているサービスです。一つまたは複数の機能をグループ化し複数のパッケージとして提供しています。ウェブに特化したプランではノーコードでコンテンツを配信でき、ヒートマップやセッションレコーディング機能を提供しています。A/Bテストでは頻度論的分析とベイズ論的分析の両方を採用しているようです。また、複数のフラグのバリエーションを使った際の最も良い組み合わせを見つけるマルチバリアントテスト機能を提供しています。
KARTE Blocks
KARTEが提供するウェブサイトに特化したフィーチャーフラグ・A/Bテストサービスです。ウェブページをブロックという単位で分割し、UIで編集・配信し、ABテストを行うことができます。国内での多数の導入実績があり日本語でのドキュメントやサポートがあります。
ポジショニングマップ
この領域のプロダクトを多機能、低価格の軸でポジショニングしたものが次の図です。
機能比較表
最後に、現時点での機能比較表です。
SaaS | OSS | OSS(library) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
機能分類 | 機能 | LaunchDarkly | Firebase(Remote Config) | Optimizely (Intelligence Cloud) | Split | VWO | KARTE Blocks | Unleash/unleash | growthbook/growthbook | featurehub-io/featurehub | markphelps/flipt | checkr/flagr | ff4j/ff4j | togglz/togglz | jnunemaker/flipper |
フィーチャーフラグ | フラグステータス | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
フラグ依存管理 | ✅ | ✅ | |||||||||||||
フラグ更新即時反映 | ✅ | ▲ | |||||||||||||
Cloud Function + FCM | feat: Real-time push for feature toggle changes (Stream) #383 | ✅ | |||||||||||||
パーセンテージロールアウト | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
カスタムユーザー属性 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
カスタムターゲティングルール | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||||
セグメントターゲティング | ✅ | ✅ | ✅ | ||||||||||||
フラグ自動更新(キルスイッチ) | ✅ | ✅ | |||||||||||||
フラグスケジュール更新 | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||||||
A/Bテスト | A/Bテスト機能 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Google Analytics | ✅ | Google Analytics | |||||
同時A/Bテスト数 | 24 | 1 | NA | Unlimit | |||||||||||
頻度論分析 vs ベイズ論分析 | Frequentist | Bayesian | Frequentist | Frequentist | Depends on tests | Bayesian | |||||||||
セグメント分析 | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||||||
カスタムセグメント | ✅ | ✅ | ✅ | ||||||||||||
マルチバリアントテスト | ✅ | ✅ | |||||||||||||
多腕バンディットテスト | ✅ Depends on plan | ||||||||||||||
複数テストの相互排他 | ✅ Depends on plan | ✅ | |||||||||||||
データエクスポート | ✅ | ✅ Depends on plan | ✅ | ✅ | |||||||||||
SDK | API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
JavaScript | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
Node.js | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
Kotlin | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||||
Swift | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||||||
Java | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
Go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||
Python | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
PHP | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
Ruby | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||||
Rust | ✅ | ||||||||||||||
C# | ✅ | ✅ | ✅ | ✅ | |||||||||||
Flutter(Dart) | ✅ | ✅ | |||||||||||||
C/C++ | ✅ | ✅ | |||||||||||||
Objective C | ✅ | ||||||||||||||
Xamarin | ✅ | ||||||||||||||
Lua | ✅ | ||||||||||||||
Roku | ✅ | ||||||||||||||
Haskell | ✅ | ||||||||||||||
Erlang | ✅ | ||||||||||||||
.NET | ✅ | ✅ | ✅ | ||||||||||||
API | REST Admin API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ (use gem) | |||||||
Webhooks | ✅ | ✅ | ✅ | ||||||||||||
セキュリティ/権限管理 | シングルサインオン(SSO) | ✅ | ✅ | ✅ | ✅ | Saas plan | ✅ | ||||||||
二要素認証 | ✅ | ✅ | ✅ Depends on plan | ✅ | |||||||||||
ロール & 権限 | ✅ | ✅ | ✅ | ✅ | |||||||||||
設定更新承認フロー | ✅ | ✅ | |||||||||||||
通知 | Webhook | ✅ | ✅ | ||||||||||||
Slack | ✅ | ✅ | ✅ | ✅ | |||||||||||
Microsoft Teams | ✅ | ||||||||||||||
Datadog | ✅ | ||||||||||||||
サービス連携 | JIRA | ✅ | ✅ | ||||||||||||
サポート | チームサポート | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | enterprise plan | |||||||
日本語ドキュメント & サポート | ✅ | ||||||||||||||
その他 | ユーザーダッシュボード | ✅ | ▲ | ||||||||||||
Firehose stream | |||||||||||||||
(Streaming events to another system) | ✅ | ||||||||||||||
変更履歴 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||||
利用アカウント数 | Unlimited | Depends on plan | |||||||||||||
Proxy (Ensures high performance and that you don't expose the full feature toggle configuration to end-users) | ✅ | ||||||||||||||
評価結果のUIでの確認 | ✅ | ||||||||||||||
Dark theme | ✅ | ||||||||||||||
Deployment Options | ✅ | ||||||||||||||
備考 | Webに特化/ページエディタ |
最後に
Feature FlagsやA/Bテストはかなり強力な仕組みですが、他のプラクティスに比べると後回しされがちで文化的に浸透している開発組織は決して多くはありません。Developer Productivity室では今後もFeature FlagsやA/Bテスト文化の啓蒙や、プラクティスの創出に取り組んでいきます。