フィーチャーフラグ【feature flag】
フィーチャーフラグとは?

通常、新機能を本番環境へ反映するには、更新したプログラムを稼働環境へ展開する配置作業(デプロイ)が必要となる。フィーチャーフラグを使うと、コードの公開と機能の提供という二つの工程を切り離せる。未完成の機能をオフにしたままプログラムを送り出し、準備が整った段階でフラグを切り替えるだけで公開できる。問題が起きた場合もフラグをオフに戻すだけで機能を即座に隠せるため、従来のようにコードを修正して再デプロイする手間が省け、利用者への影響を最小限に抑えられる。
この仕組みを応用して、新機能を全利用者へ一斉に公開せず、特定のグループにだけ先行して提供することも可能である。まず、社内の担当者や少数の利用者に限定して公開し、動作の安定性を確認してから対象を広げていく手法は「段階的ロールアウト」や「カナリアリリース」と呼ばれる。また、利用者を二つのグループに分けてそれぞれ異なる画面を見せ、どちらの設計が効果的かを検証する「A/Bテスト」にも活用される。有料ユーザーにのみ追加機能を有効にするといった、属性に応じた制御も同じ仕組みで実現できる。
技術的には、コード内に条件分岐をあらかじめ組み込み、フラグの状態に応じて処理を切り替える形で実装される。フラグの状態は設定ファイルや外部サービスとしてプログラム外で管理することで、変更が即座に動作へ反映される。「LaunchDarkly」や「Split.io」といった専用の管理サービスも登場している。
一方で、フラグが増えすぎると条件分岐が乱立し、コードの見通しが悪くなる。役目を終えたフラグを放置すると、想定外の組み合わせが生じる可能性もある。システム全体でどこに何のためのフラグがあるのかを常に整理・把握する必要があり、利用期限をあらかじめ決め、不要になったフラグをこまめに削除するといった運用が求められる。