AI

フィーチャーフラグ比較: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

機能比較表

比較項目UnleashGrowthBookFlipt
A/Bテスト統計✅ 最充実
GitOps対応
エンタープライズ
パフォーマンス✅ 最高
GitHub Stars12k+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-dynamicexport 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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。