TL

フィーチャーフラグ

コードに「機能のオン/オフを切り替えるスイッチ」を埋め込み、デプロイとは切り離して機能を出し入れする仕組みです。段階的リリースや A/B テスト、即時ロールバックに使います。

中級フィーチャーフラグリリースA/Bテストトランクベース開発最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.フィーチャーフラグは機能の有効/無効を実行時に切り替えるスイッチ。「デプロイ」と「リリース(機能公開)」を分離できる。
  • 2.コードは出しておきフラグはオフ。後から特定ユーザーや割合だけオンにして、段階的リリース・A/Bテスト・カナリアを実現する。
  • 3.不具合時はデプロイし直さずフラグをオフにするだけで即ロールバック。ただしフラグの数だけ分岐が増え、放置すると技術的負債になる。

フィーチャーフラグとは

フィーチャーフラグ(フィーチャートグル)は、機能のオン/オフを実行時に切り替えるスイッチ をコードに埋め込む手法です。これにより、「デプロイ(コードを本番に置く)」と「リリース(ユーザーに機能を見せる)」を分離 できます。

if featureFlags.isEnabled("new-checkout", user):
    新しいチェックアウト画面を表示
else:
    従来のチェックアウト画面を表示

新機能のコードは オフの状態で本番にデプロイ済み にしておき、準備が整ったタイミングで フラグを切り替えるだけ で公開します。コードの配置と機能の公開を別々のイベントにできる、という点がすべての利点の源です。

なぜデプロイとリリースを分けるのか

両者が密結合だと、「デプロイ=即・全ユーザーに公開」になり、リリースは常に 全か無か の賭けになります。分離すると、こうした運用が可能になります。

  • 準備中の機能をマージし続けられる:未完成でもオフなら本番に置ける → 巨大ブランチの長期分岐を避けられる(後述のトランクベース開発)。
  • 公開タイミングを技術と切り離せる:マーケのキャンペーン日に合わせて、エンジニアの作業なしでフラグを ON。
  • 問題が起きてもデプロイし直さない:フラグを OFF に戻すだけで瞬時に撤退できる。
リリースが「怖いイベント」でなくなる

デプロイとリリースが一体だと、本番反映は緊張の一大イベントになりがちです。フラグで切り離せば、コードは普段から小刻みに出し、公開は別途・安全に 行えます。「大きく一発」から「小さく頻繁」へ移れるのが本質的な効果です。

主な使いどころ

フラグは1種類ではなく、目的別に性格が異なります。寿命の長短を意識すると管理しやすくなります。

種類目的寿命
リリーストグル開発中の機能を隠す/段階公開短命(公開したら消す)
実験トグルA/B テストで効果を測る実験期間だけ
Ops トグル高負荷時に重い機能を一時停止長命(運用スイッチ)
権限トグル特定プラン・ユーザーだけに機能提供長命(恒久的な出し分け)
  • 段階的リリース/カナリア:「まず社内 → 5% → 50% → 全員」と対象を広げ、各段階で指標を確認する(/devops/deployment-strategies/)。
  • A/B テスト:ユーザーを2群に分け、新旧どちらが指標を改善するかを実測する。
  • キルスイッチ:障害時や負荷時に、特定機能だけを即座に止める安全弁。

即時ロールバックという強み

フラグ最大の実務メリットが ロールバックの速さ です。通常、不具合が出たら 前バージョンを再デプロイ する必要があり、ビルドからやり直すと時間がかかります。

フラグなら、問題の機能をオフにするだけ。再ビルドも再デプロイも不要で、設定変更が即座に反映されます。障害対応(/devops/incident-postmortem/)の初動で「まず止血」を秒単位で打てるのは大きな価値です。

DBスキーマ変更は単純に戻せない

フラグでオフにできるのは基本的に 画面やロジックの分岐 です。不可逆なデータ変更(カラム削除や破壊的マイグレーション)は、フラグを戻してもデータは戻りません。スキーマは「新旧どちらのコードでも壊れない」よう段階的に変える(後方互換を保つ)設計が前提です。

トランクベース開発との関係

フィーチャーフラグは トランクベース開発(全員が短命ブランチで頻繁に main へマージする進め方)と強く結びつきます。未完成の機能でも フラグでオフにしておけば main にマージできる ため、長期間生きるブランチを作らずに済み、巨大なマージ衝突を避けられます。CI/CD(/devops/ci-cd/)の「小さく頻繁に統合する」思想と噛み合います。

つまずきポイント:フラグは負債になる

便利ゆえに、フラグは増えすぎると管理不能 になります。

  • 分岐の爆発:フラグが N 個あると、理論上 2^N 通りの状態が生まれ、テストが追いつかなく なる。
  • 死んだフラグ:役目を終えたのに残ったフラグが、コードを読みにくくし、誤操作の温床になる。
  • 設定ミスの事故:本番で誤って未完成機能を ON にする、といった事故も起きうる。
「消す計画」をセットで作る

短命なリリーストグルは、公開して安定したら速やかにコードから削除 するのが鉄則です。「いつ・誰が消すか」を作る時点で決めておく。残す価値のある運用トグル(キルスイッチ等)だけを長期保有し、それ以外は積極的に片付けましょう。専用の管理ツール(フラグ管理 SaaS)で棚卸しするのも有効です。

まとめ

  • フィーチャーフラグは 機能のオン/オフを実行時に切り替える スイッチで、デプロイとリリースを分離 する。
  • 段階的リリース・A/Bテスト・カナリア・キルスイッチ に使え、トランクベース開発と相性が良い。
  • 不具合時は フラグを戻すだけで即ロールバック(ただしデータ変更は別問題)。
  • 増えすぎると 負債 化する。短命フラグは 使い終えたら消す 運用を徹底する。

DevOps/インフラ Article

フィーチャーフラグを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

フィーチャーフラグ

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

コードは出しておきフラグはオフ。後から特定ユーザーや割合だけオンにして、段階的リリース・A/Bテスト・カナリアを実現する。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「フィーチャーフラグ / リリース」に近いか確認する。
  • 強みである「フィーチャーフラグは機能の有効/無効を実行時に切り替えるスイッチ。「デプロイ」と「リリース(機能公開)」を分離できる。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

フィーチャーフラグリリースA/Bテストトランクベース開発フィーチャーフラグリリースA/Bテストトランクベース開発
参考: 公式情報