フィーチャーフラグ
コードに「機能のオン/オフを切り替えるスイッチ」を埋め込み、デプロイとは切り離して機能を出し入れする仕組みです。段階的リリースや A/B テスト、即時ロールバックに使います。
- 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/)の初動で「まず止血」を秒単位で打てるのは大きな価値です。
フラグでオフにできるのは基本的に 画面やロジックの分岐 です。不可逆なデータ変更(カラム削除や破壊的マイグレーション)は、フラグを戻してもデータは戻りません。スキーマは「新旧どちらのコードでも壊れない」よう段階的に変える(後方互換を保つ)設計が前提です。
トランクベース開発との関係
フィーチャーフラグは トランクベース開発(全員が短命ブランチで頻繁に 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、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。