フィーチャーフラグOSS比較:Unleash vs Flagsmith vs GrowthBook でLaunchDarkly代替
オープンソースラボ編集部 ・ 2026年6月13日
フィーチャーフラグOSS比較:Unleash vs Flagsmith vs GrowthBook でLaunchDarkly代替
LaunchDarklyは月$75/ユーザー〜(Enterprise)と高コストです。Unleash(最も老舗・エンタープライズグレード)・Flagsmith(シンプル・分析内蔵)・GrowthBook(A/Bテスト特化・ベイズ統計)はOSSのフィーチャーフラグツールで、コードを再デプロイせずに機能の有効/無効・段階的ロールアウト・A/Bテストを実現します。
フィーチャーフラグが必要な理由
- カナリアリリース: 新機能を5%のユーザーに先行公開し問題がなければ段階的に拡大
- A/Bテスト: 「ボタン色赤vs青でどちらがCVRが高いか」を統計的に検証
- Kill Switch: 本番で障害が起きたとき、コードを修正・デプロイせずに機能を即座にOFF
- ベータアクセス: 特定のユーザー属性(メールドメイン・ユーザーID)だけに機能を解放
- 開発中機能を本番に含める: フラグOFFでリリースし、準備完了時にフラグをONにするだけ
主要ツールの概要
Unleash
2013年から開発されているOSSフィーチャーフラグツールです。GitHubスター11k+。Unleash SDK(TypeScript/JavaScript/Python/Go/Java/Ruby/PHP/.NET)が豊富で、エンタープライズでの採用実績が最も多いです。Activation Strategies(グラデュアルロールアウト・ユーザーセグメント・IPフィルタリング)が豊富で、OpenFeatureに準拠しています。
# Unleashをdocker-composeで起動
version: "3"
services:
web:
image: unleashorg/unleash-server:latest
ports:
- "4242:4242"
environment:
DATABASE_URL: "postgres://unleash:unleash_pass@db/unleash"
DATABASE_SSL: "false"
LOG_LEVEL: warn
INIT_FRONTEND_API_TOKENS: "default:development.unleash-insecure-frontend-api-token"
INIT_CLIENT_API_TOKENS: "default:development.unleash-insecure-api-token"
depends_on:
db:
condition: service_healthy
command: node index.js
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: unleash
POSTGRES_PASSWORD: unleash_pass
POSTGRES_DB: unleash
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U unleash']
interval: 5s
timeout: 5s
retries: 5
volumes:
- unleash_db:/var/lib/postgresql/data
volumes:
unleash_db:
// Next.js App Router でUnleashのフィーチャーフラグを使う
// npm install unleash-client
// lib/unleash.ts(サーバーサイド)
import { initialize, isEnabled } from 'unleash-client';
let unleashInitialized = false;
export async function getUnleash() {
if (!unleashInitialized) {
await initialize({
url: process.env.UNLEASH_URL!,
appName: 'my-nextjs-app',
customHeaders: {
Authorization: process.env.UNLEASH_API_TOKEN!,
},
});
unleashInitialized = true;
}
return { isEnabled };
}
// app/page.tsx でフラグを使う
import { getUnleash } from '@/lib/unleash';
export default async function HomePage() {
const { isEnabled } = await getUnleash();
// ユーザーコンテキストと共にフラグを評価
const newHeroEnabled = isEnabled('new-hero-section', {
userId: 'user-123',
properties: {
plan: 'pro',
country: 'JP',
},
});
return (
<main>
{newHeroEnabled ? (
<NewHeroSection />
) : (
<ClassicHeroSection />
)}
</main>
);
}
// Unleashのグラデュアルロールアウト設定(Unleash Admin APIで自動化)
// 本番でフラグの有効率を段階的に引き上げるスクリプト
const UNLEASH_URL = process.env.UNLEASH_URL;
const UNLEASH_ADMIN_TOKEN = process.env.UNLEASH_ADMIN_TOKEN;
async function setGradualRollout(featureName: string, percentage: number) {
await fetch(
`${UNLEASH_URL}/api/admin/projects/default/features/${featureName}/environments/production/strategies`,
{
method: 'POST',
headers: {
Authorization: UNLEASH_ADMIN_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'gradualRolloutUserId',
parameters: {
percentage: percentage.toString(),
groupId: featureName,
rollout: percentage.toString(),
},
}),
}
);
console.log(`${featureName}: ${percentage}% rollout set`);
}
// 10% → 30% → 50% → 100% と段階的に引き上げ
await setGradualRollout('new-checkout-flow', 10);
Flagsmith
2019年から開発されているオープンソースのフィーチャーフラグツールです。GitHubスター5k+。フィーチャーフラグに加えてリモート設定値(Remote Config)機能が特徴で、フラグのON/OFFだけでなくJSONやstring値をアプリにプッシュできます。CloudFront/Fastly経由のエッジ配信にも対応。
# FlagsmithをDockerで起動
docker run -d --name flagsmith -p 8000:8000 -e DATABASE_URL=postgres://flagsmith:flagsmith_pass@postgres:5432/flagsmith flagsmith/flagsmith:latest
# または公式のdocker-compose(推奨)
curl -LO https://raw.githubusercontent.com/Flagsmith/flagsmith/main/docker/docker-compose.yml
docker compose up -d
// Next.js 13 App Router + Flagsmithでサーバーサイドフラグ評価
// npm install flagsmith-nodejs
import Flagsmith from 'flagsmith-nodejs';
const flagsmith = new Flagsmith({
environmentKey: process.env.FLAGSMITH_ENVIRONMENT_KEY!,
apiUrl: 'https://flagsmith.yourcompany.com/api/v1/',
enableAnalytics: true, // フラグの使用状況を自動収集
defaultFlagHandler: (featureName) => ({
enabled: false,
value: null,
}),
});
// サーバーコンポーネントでの使用(ユーザーIDでセグメント判定)
export default async function PricingPage({ userId }: { userId: string }) {
const flags = await flagsmith.getIdentityFlags(userId, {
plan: 'pro',
signupDate: '2024-01-15',
});
// フラグのON/OFF確認
const newPricingEnabled = flags.isFeatureEnabled('new-pricing-table');
// リモート設定値を取得(JSONオブジェクトも可)
const bannerText = flags.getFeatureValue('promo-banner-text') as string;
const discountRate = flags.getFeatureValue('discount-percentage') as number;
return (
<div>
{bannerText && (
<Banner text={bannerText} discount={discountRate} />
)}
{newPricingEnabled ? (
<NewPricingTable />
) : (
<ClassicPricingTable />
)}
</div>
);
}
GrowthBook
2020年創業のA/Bテスト特化のOSSプラットフォームです。GitHubスター6k+。ベイズ統計によるA/Bテスト結果の統計的有意性判断・セグメント別の分析・データウェアハウス(BigQuery/Snowflake/Redshift)との直接接続が特徴で、統計的に正しいA/Bテストを実施できます。
# GrowthBookをdocker-composeで起動
version: "3"
services:
growthbook:
image: growthbook/growthbook:latest
ports:
- "3000:3000"
- "3100:3100"
environment:
MONGODB_URI: mongodb://mongo/growthbook
APP_ORIGIN: https://growthbook.yoursite.com
JWT_SECRET: your-super-secret-jwt-key
ENCRYPTION_KEY: your-32-char-encryption-key-here
depends_on:
- mongo
mongo:
image: mongo:6
volumes:
- mongodata:/data/db
volumes:
mongodata:
// Next.js + GrowthBook SDK でA/Bテスト実施
// npm install @growthbook/growthbook-react
// lib/growthbook.ts
import { GrowthBook } from '@growthbook/growthbook';
export function createGrowthBook(attributes: Record<string, unknown>) {
const gb = new GrowthBook({
apiHost: process.env.NEXT_PUBLIC_GROWTHBOOK_HOST!,
clientKey: process.env.NEXT_PUBLIC_GROWTHBOOK_CLIENT_KEY!,
attributes,
trackingCallback: (experiment, result) => {
// A/Bテスト結果をGoogle Analytics/Mixpanelに送信
window.gtag?.('event', 'experiment_viewed', {
experiment_id: experiment.key,
variant_id: result.key,
});
},
});
return gb;
}
// app/components/CTAButton.tsx
'use client';
import { useGrowthBook } from '@growthbook/growthbook-react';
export function CTAButton() {
const gb = useGrowthBook();
// A/Bテスト: どちらのCTAテキストがクリック率が高いか
const { value: ctaText } = gb.runExperiment({
key: 'cta-button-text',
variations: ['今すぐ無料で始める', '14日間無料トライアル', 'デモを見る'],
weights: [0.34, 0.33, 0.33],
});
return (
<button onClick={() => gb.trackEvent('cta_clicked')}>
{ctaText}
</button>
);
}
機能比較表
| 比較項目 | Unleash | Flagsmith | GrowthBook |
|---|---|---|---|
| ライセンス | Apache-2.0 | BSD-3 | MIT |
| A/Bテスト | 基本的 | 基本的 | ✅ ベイズ統計 |
| リモート設定 | ❌ | ✅ | ✅ |
| SDK言語 | 10+ | 10+ | 10+ |
| OpenFeature準拠 | ✅ | ✅ | ❌ |
| 分析統合 | ❌ | ✅ 内蔵 | ✅ DWH連携 |
| エッジ配信 | ❌ | ✅ | ✅ |
| GitHub Stars | 11k+ | 5k+ | 6k+ |
フィーチャーフラグとGitOpsの組み合わせはDevOpsカテゴリ/categories/devopsを参照。ローコードでのワークフロー自動化は/categories/low-codeにまとめています。
FAQ
Q. LaunchDarklyからUnleashへの移行でSDKコードをどれだけ変更する必要がありますか?
A. UnleashはOpenFeature(フィーチャーフラグの標準API規格)に準拠しているため、OpenFeatureプロバイダーを差し替えるだけで移行できます。移行手順: ①既存コードを@openfeature/web-sdkで書き直す(LaunchDarklyプロバイダーを使用)②UnleashのOpenFeatureプロバイダーに差し替える。コード変更: OpenFeature.setProvider(new LaunchDarklyClientProvider(client))をOpenFeature.setProvider(new UnleashClientProvider({ url, clientKey }))に変更するだけです。フラグ名が同じであれば、アプリケーションコードのclient.variation('flag-name', false)部分は変更不要です。フラグ定義の移行: Unleash Admin APIを使って既存LaunchDarklyのフラグをスクリプトで一括インポートできます。
Q. GrowthBookでA/Bテストの統計的有意性を正しく判断するにはどうすればよいですか?
A. GrowthBookはベイズ統計を使い「バリアントAよりバリアントBの方が良い確率は○○%」という形で結果を表示します。正しいA/Bテストのポイント: ①サンプルサイズを事前計算する: GrowthBookのサンプルサイズ計算ツールで「ベースCVR・最小検出差・検出力80%・有意水準5%」から必要サンプルサイズを算出してからテストを開始②テストを早期終了しない: ポジティブな結果が出てもサンプルサイズに達するまで継続(「ピーキング問題」を避ける)③複数メトリクスを設定する: CTRだけでなく収益・チャーン率・サポートコストも同時に計測(1つのメトリクスを最大化すると他が悪化することがある)④1つのテストに1つの仮説: 複数の変更を同時にテストすると何が効いたか不明になる。GrowthBookはデータウェアハウスから直接メトリクスを計算するため、Mixpanel/Segmentのイベントを正確に設定することが前提です。
Q. Unleashをサーバーレス(Vercel Edge Functions)で使う場合のベストプラクティスは?
A. Vercel Edge FunctionsはNode.jsランタイムが使えないためUnleash Node.js SDKは動作しません。対応策: ①Unleash Frontend API + Edge Config: UnleashのFrontend APIからフラグをフェッチしてVercel Edge Configにキャッシュ。Edge Functionsから@vercel/edge-config経由でアクセス②Unleash REST API直接呼び出し: Edge FunctionsからUnleash APIに直接フェッチしてフラグを取得(レイテンシーが増加するため推奨しない)③GrowthBookを検討: GrowthBook SDKはEdge Runtime対応の軽量バンドルを提供しており、Vercel Edge Middlewareでの使用に最適化されています。実装例: Vercel Middleware(middleware.ts)でGrowthBookからフラグを取得→リクエストヘッダーに付与→サーバーコンポーネントがヘッダーからフラグを読み取るパターンが最もパフォーマンスが良いです。
Q. フィーチャーフラグとCI/CDを連携してKill Switchを自動化する方法は?
A. GitHub ActionsとUnleash/FlagsmithのAPIを組み合わせてデプロイ時にフラグを自動管理できます。パターン: ①デプロイ前にフラグをOFF(安全な状態でデプロイ)→デプロイ後に徐々にONにする②エラーレートが閾値を超えたらフラグを自動OFFにするアラート連携。
# GitHub Actions: デプロイ後に10%でフラグをON
- name: Enable feature flag at 10%
run: |
curl -X PATCH "${{ env.UNLEASH_URL }}/api/admin/projects/default/features/new-feature/environments/production/strategies/$STRATEGY_ID" -H "Authorization: ${{ secrets.UNLEASH_ADMIN_TOKEN }}" -H "Content-Type: application/json" -d '{"parameters": {"percentage": "10"}}'
Datadogのエラーレートアラート→Webhookで自動Kill Switchを実装しているチームも多くあります。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| エンタープライズ・OpenFeature準拠 | Unleash |
| リモート設定値・シンプルUI | Flagsmith |
| A/Bテスト・ベイズ統計・DWH分析 | GrowthBook |
| LaunchDarkly代替を今すぐ移行 | Unleash |