フィーチャーフラグ比較:Unleash vs GrowthBook vs Flipt で機能フラグを管理する
オープンソースラボ編集部 ・ 2026年6月13日
フィーチャーフラグ比較:Unleash vs GrowthBook vs Flipt で機能フラグを管理する
新機能のA/Bテスト・段階的ロールアウト・カナリアリリース・緊急キルスイッチを安全に実装するフィーチャーフラグ(Feature Flag)プラットフォームが開発の必須インフラとなっています。Unleash(Node.js製・エンタープライズ)・GrowthBook(実験プラットフォーム)・Flipt(Go製・高速)の3つが2026年のOSSフィーチャーフラグのデファクトスタンダードです。
フィーチャーフラグを使う理由
- デプロイとリリースの分離: コードを先にデプロイしておいてフラグONで機能を有効化→ロールバックはフラグOFFだけ
- 段階的ロールアウト: 全ユーザーに一斉公開する前に1%→10%→50%→100%と段階的に有効化してリスクを最小化
- A/Bテスト: 機能AとBを別グループに見せてKPIを比較してデータドリブンな意思決定
- 緊急キルスイッチ: 障害発生時に即座にフラグをOFFにして新機能を無効化(デプロイなし)
主要ツールの概要
Unleash
2015年公開、TypeScript製のOSSです。GitHubスター12k+。エンタープライズ向けのフル機能フィーチャーフラグプラットフォームで、ユーザーセグメント・環境別フラグ・タグ・Prometheus監視・SSO統合が充実しています。
# docker-compose.yml: Unleash(PostgreSQL + Unleash Server)
version: "3.8"
services:
unleash:
image: unleashorg/unleash-server:6.0
restart: unless-stopped
ports:
- "4242:4242"
environment:
DATABASE_URL: postgres://unleash:${POSTGRES_PASSWORD}@postgres:5432/unleash
DATABASE_SSL: "false"
INIT_FRONTEND_API_TOKENS: "default:development.unleash-frontend-api-token"
INIT_CLIENT_API_TOKENS: "default:development.unleash-insecure-api-token"
depends_on:
- postgres
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: unleash
POSTGRES_DB: unleash
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- unleash_pg_data:/var/lib/postgresql/data
volumes:
unleash_pg_data:
// Unleash: Next.js でのフィーチャーフラグ実装
import { startUnleash, type IToggle } from 'unleash-client'
// サーバーサイド: Unleashクライアントを初期化(シングルトン)
let unleashInstance: Awaited<ReturnType<typeof startUnleash>> | null = null
export async function getUnleash() {
if (!unleashInstance) {
unleashInstance = await startUnleash({
url: `${process.env.UNLEASH_URL}/api`,
appName: 'my-nextjs-app',
customHeaders: { Authorization: process.env.UNLEASH_SERVER_API_TOKEN! },
refreshInterval: 30, // 30秒ごとにフラグを更新
})
}
return unleashInstance
}
// Server Component でフラグを評価
import { getUnleash } from '@/lib/unleash'
import { headers } from 'next/headers'
export async function NewCheckoutFlow() {
const unleash = await getUnleash()
const userId = (await headers()).get('x-user-id') || 'anonymous'
// ユーザーコンテキストを使った評価
const isEnabled = unleash.isEnabled('new-checkout-flow', {
userId,
properties: {
plan: 'premium',
country: 'JP',
},
})
if (!isEnabled) {
return <OldCheckoutFlow />
}
return <NewCheckoutFlowComponent />
}
// 段階的ロールアウト(gradualRollout)の設定
// Unleash Admin UI またはAPI経由で設定:
const strategy = {
name: 'new-checkout-flow',
strategies: [
{
name: 'gradualRollout',
parameters: {
rollout: '10', // 10%のユーザーに展開
stickiness: 'userId', // 同じユーザーには常に同じ結果
groupId: 'new-checkout-flow',
},
},
],
}
// フロントエンド: Unleash React SDKでクライアントサイドフラグ
import { FlagProvider, useFlag, useVariant } from '@unleash/proxy-client-react'
const unleashConfig = {
url: 'http://localhost:4242/api/frontend',
clientKey: 'default:development.unleash-frontend-api-token',
appName: 'my-app',
refreshInterval: 30,
}
function App() {
return (
<FlagProvider config={unleashConfig}>
<FeatureComponent />
</FlagProvider>
)
}
function FeatureComponent() {
const isNewUI = useFlag('new-ui-design')
const buttonVariant = useVariant('button-color-test')
return (
<div>
{isNewUI ? <NewNavigation /> : <OldNavigation />}
<button style={{ background: buttonVariant.enabled ? buttonVariant.payload?.value : 'blue' }}>
クリック
</button>
</div>
)
}
GrowthBook
2020年公開、TypeScript製のOSSです。GitHubスター6k+。A/Bテスト・実験管理・統計的有意差計算が統合されたOSS実験プラットフォームです。ベイズ統計・頻度論統計の両アプローチをサポートし、実験結果をGrafana・Mixpanel等で可視化できます。
// GrowthBook: A/Bテスト実装(Next.js)
import { GrowthBook } from '@growthbook/growthbook'
const gb = new GrowthBook({
apiHost: process.env.GROWTHBOOK_API_HOST,
clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
enableDevMode: process.env.NODE_ENV === 'development',
// トラッキングコールバック(GA4・Mixpanel等に実験データを送信)
trackingCallback: (experiment, result) => {
window.gtag?.('event', 'experiment_viewed', {
experiment_id: experiment.key,
variant_id: result.variationId,
})
},
})
await gb.loadFeatures()
// A/Bテスト: 2つのCTAボタンテキストを比較
const ctaText = gb.getFeatureValue('cta-button-text', 'デモを申し込む')
// ユーザーの半数が '今すぐ無料で始める'、残り半数が 'デモを申し込む' を見る
Flipt
2019年公開、Go製のOSSです。GitHubスター3k+。Go製のシンプルでパフォーマンスが高いフィーチャーフラグサーバーでgRPC・REST API両対応です。GitOps対応(フラグをYAMLファイルでGit管理)が特徴です。
# Flipt Docker セットアップ
docker run -d --name flipt -p 8080:8080 -p 9000:9000 -v flipt_data:/var/opt/flipt docker.flipt.io/flipt/flipt:latest
# GitOps: フラグをYAMLで定義してGitで管理
# features/new-dashboard.yaml
# Flipt GitOps YAML定義
version: "1.0"
namespace: default
flags:
- key: new-dashboard
name: 新しいダッシュボード
type: BOOLEAN_FLAG_TYPE
enabled: true
rules:
- segment: beta-users
rank: 1
distributions:
- variant: "true"
rollout: 100
- rank: 2
distributions:
- variant: "true"
rollout: 10
segments:
- key: beta-users
name: ベータユーザー
constraints:
- type: STRING_COMPARISON_TYPE
property: plan
operator: eq
value: beta
機能比較表
| 比較項目 | Unleash | GrowthBook | Flipt |
|---|---|---|---|
| A/Bテスト統計 | △ | ✅ 最充実 | ❌ |
| GitOps対応 | △ | ❌ | ✅ |
| エンタープライズ | ✅ | ✅ | △ |
| パフォーマンス | 高 | 高 | ✅ 最高 |
| GitHub Stars | 12k+ | 6k+ | 3k+ |
フィーチャーフラグはDevOpsカテゴリ/categories/devopsのCI/CDパイプライン(GitHub Actions)と統合して「PRマージ→自動デプロイ→フラグで段階ロールアウト」のGitOpsリリースワークフローを実装します。LLM Toolsカテゴリ/categories/llm-toolsの新しいAI機能(Claude・GPT-4o切り替え)をフィーチャーフラグで制御してモデル切り替え時のKPIをA/Bテストで検証するユースケースが増えています。
FAQ
Q. フィーチャーフラグをNext.js App RouterのServer Componentで使う際の注意点は?
A. SDKのキャッシュとNext.jsのキャッシュが干渉しないよう注意が必要です。問題: Server Componentはビルド時またはリクエスト時にキャッシュされるため、フラグが更新されても古い結果が表示される可能性があります。解決策: ①force-dynamic(export const dynamic = 'force-dynamic')でキャッシュを無効化してリクエストごとにフラグを評価②Unleash SDKのrefreshIntervalを短く設定(30秒)③Edge Middlewareでフラグを評価してCookieに保存→Server ComponentがCookieを読み取る(キャッシュ問題を回避)。Edge Middlewareパターン: middleware.tsでUnleash Clientを初期化してフラグをリクエストヘッダーに付加してServer Componentはヘッダーを読み取るだけにします。
Q. フィーチャーフラグでA/Bテストの統計的有意差はどうやって判断しますか?
A. GrowthBookはベイズ統計を使って「勝者になる確率」で判断します。GrowthBookの判断基準: ①コンバージョン率の差が統計的に有意(95%信頼区間)②十分なサンプル数(最低100〜1000コンバージョン/バリアント)③ビジネス的に意味のある効果量(例: コンバージョン率+2%以上)。注意事項: ①Peeking Problem: 結果を毎日チェックして有意差が出たら止める→偽陽性率が上がる(GrowthBookのベイズアプローチは軽減)②複数テストの同時実行: 互いに干渉しないよう排他的なユーザーセグメントに割り当て③サンプルサイズの事前計算: statsmodels.stats.power.TTestIndPower等で必要サンプル数を算出してからテスト開始。
Q. 緊急時にフィーチャーフラグを即座にOFFにするには?
A. Unleash Admin UI・REST API・Unleash Edgeで数秒以内にフラグを無効化できます。操作方法: ①Unleash Admin UI(http://localhost:4242)でフラグを検索→トグルOFF(即座に反映)②REST API: curl -X PATCH "http://localhost:4242/api/admin/projects/default/features/payment-v2/environments/production/off" -H "Authorization: ${UNLEASH_ADMIN_TOKEN}"③Slack Botから/unleash disable payment-v2 productionでチャットから操作。SDK側の更新: クライアントSDKは設定したrefreshInterval(デフォルト30秒)でポーリングするため最大30秒後に全クライアントに反映されます。refreshInterval: 5に短縮するか、WebSocket/SSE(Unleash Edge機能)でリアルタイムプッシュを使うと数秒以内に反映されます。
Q. フィーチャーフラグとデプロイパイプラインをどう統合しますか?
A. 「デプロイとリリースの分離」パターンでCI/CDと統合します。ワークフロー: ①コードをフラグOFF状態でmainにマージ→GitHub Actionsで自動デプロイ②QA環境でフラグを特定ユーザー(内部テスター)のみONにして検証③本番で1%→10%→100%と段階的にロールアウト④問題が発生したらフラグOFFでロールバック(デプロイ不要)。GitHub Actions統合: デプロイ完了後にcurlでUnleash APIを呼び出してフラグの有効化率を更新するステップを追加。Unleash GitOps: フラグの設定変更をGitリポジトリ管理して、PRでフラグ変更レビュー→マージで自動適用するフローも可能です。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| エンタープライズ・SSO・段階ロールアウト | Unleash |
| A/Bテスト・統計分析・実験管理 | GrowthBook |
| GitOps・Go・高パフォーマンス・シンプル | Flipt |