フィーチャーフラグの仕組み ― デプロイせずに機能のON/OFFを切り替える技術


フィーチャーフラグ: コードパスの分岐と段階的ロールアウト リクエスト フラグ判定 isEnabled? ON 新機能を表示 OFF 既存の動作 障害発生時 OFF! (キルスイッチ) 段階的ロールアウト Phase 1: 10% 社内テスト Phase 2: 50% 一般ユーザーへ拡大 Phase 3: 100% 全ユーザー → フラグ削除 リリースフラグ 実験フラグ 運用フラグ 権限フラグ 安定したらフラグを削除 → 技術負債(フラグ負債)を防ぐ
フィーチャーフラグのイメージ: コードパスの分岐と段階的ロールアウト
ひよこ ひよこ

フィーチャーフラグって何なの?

ペンギン先生 ペンギン先生

コードの中に「この機能をONにするかOFFにするか」を制御するスイッチを埋め込む仕組みだよ。たとえば新しい検索画面を作ったとき、コードは本番にデプロイするけど、フラグがOFFなら誰にも見えない。準備ができたらフラグをONにするだけで公開できるんだ

ひよこ ひよこ

デプロイし直さなくていいの?それはすごいね!

ペンギン先生 ペンギン先生

そこが最大のメリットだね。コードの中では「if (featureFlag.isEnabled('new-search'))」のように書いておくだけ。フラグの値は設定ファイルや管理サービスから取得するから、管理画面でポチッと切り替えるだけで反映されるよ

ひよこ ひよこ

全員に一気に公開するのはちょっと怖い気がするんだけど…

ペンギン先生 ペンギン先生

いい感覚だね。だからフィーチャーフラグには「段階的ロールアウト」という使い方があるんだ。最初はユーザーの10%だけにON、問題なければ50%、最後に100%と段階的に広げていく。もし不具合が見つかったら、フラグをOFFにするだけで即座に元に戻せる。これをキルスイッチと呼ぶよ

ひよこ ひよこ

フラグにも種類があるの?

ペンギン先生 ペンギン先生

大きく4種類に分けられるよ。リリースフラグは新機能の公開制御、実験フラグはA/Bテスト用、運用フラグはパフォーマンス調整やキルスイッチ、権限フラグは特定ユーザーだけに機能を開放するもの。目的によってフラグの寿命や管理方法が変わってくるんだ

ひよこ ひよこ

自分でフラグの仕組みを作るのは大変そうだけど、何かサービスがあるの?

ペンギン先生 ペンギン先生

LaunchDarklyが業界で一番有名だね。管理画面からフラグの作成・ターゲティング・ロールアウト比率の設定ができる。オープンソースだとUnleashやFlagsmithがあるよ。ターゲティングルールも柔軟で、「日本のユーザーだけ」「有料プランだけ」「社内メンバーだけ」といった細かい条件でフラグを制御できるんだ

ひよこ ひよこ

フラグってずっと残しておくものなの?

ペンギン先生 ペンギン先生

ここがフィーチャーフラグ運用の一番大事なポイントだよ。フラグにはライフサイクルがあって、作成 → 有効化 → 全員に展開 → クリーンアップという流れが基本。全員に公開して安定したら、フラグを削除してコードをスッキリさせるのが鉄則なんだ

ひよこ ひよこ

削除しないとどうなるの?

ペンギン先生 ペンギン先生

これが業界でよく問題になる「フラグ負債」だよ。使われなくなったフラグがコード中に何百個も残って、どれが生きていてどれが死んでいるか誰も分からなくなる。ある有名な事例では、古いフラグの設定ミスが原因で大規模障害が起きたこともあるんだ。定期的にフラグを棚卸しする仕組みが必要だよ

ひよこ ひよこ

フィーチャーフラグブランチ戦略って関係あるの?

ペンギン先生 ペンギン先生

すごくいい質問だね。フィーチャーフラグがあれば、長期間のフィーチャーブランチを作らなくて済むんだ。全員がmainブランチに直接コミットして、未完成の機能はフラグで隠す。これをトランクベース開発と呼ぶよ。マージの衝突が激減するし、CIも常にmainで回せるから開発スピードが上がるんだ

ひよこ ひよこ

フラグを使いこなせると開発の進め方自体が変わるんだね!

ペンギン先生 ペンギン先生

そうだね。フィーチャーフラグは単なるif文じゃなくて、リリース戦略そのものを変える技術だよ。「デプロイ」と「リリース」を分離できるのが本質で、コードを本番に置くタイミングとユーザーに見せるタイミングを独立して制御できる。これを理解しているチームは、障害対応も素早いし、実験も積極的にできるんだ