公開前の機能をスイッチで切り替える機能フラグ

機能フラグは、コードを変えずにスイッチのオン・オフで機能の公開範囲や有効状態を切り替える仕組みです。

部屋の配線工事が終わっていても、スイッチを入れるまで電気はつきません。いつ点灯するかは、工事とは別に決められます。Webサービスの新しい機能にも、同じようなスイッチを付けておけます。それが機能フラグです。新しい機能のコードをすでに本番へ配置(デプロイ)していても、フラグがオフなら誰にも見えません。スイッチを入れた瞬間に公開されます。

コードを置く作業と、ユーザーに見せる判断(リリース)を切り離すための道具です。

スイッチがあるとできること

  • 大型連休やキャンペーンの開始に合わせて、直前に慌てず、余裕をもってデプロイしておく
  • 特定のユーザーだけに、新機能を先に試してもらう(ベータ機能)
  • ユーザーの半分には旧デザイン、残り半分には新デザインを見せて比べる(A/Bテスト)
  • 問題が起きたら、コードを戻さずに、その機能だけをすぐにオフにする

最後の使い方は、障害のときに特に効きます。コードを前の版へ戻すロールバックより手早く、問題の機能だけを止められます。

役目を終えたスイッチの片づけ方

機能を公開し終えたスイッチは、もう役目を終えたもの。でも、そのまま残しておくと、コードの中に「オンならこちら、オフならあちら」という分岐が残り続けます。フラグが何十個も絡み合うと、どの条件でどの機能が出るのか、誰にも追えなくなります。

フラグを作るときに、いつ削除するかも一緒に決めておきます。役目を終えたら、スイッチだけでなく、使わなくなった側のコードごと取り除きます。

誰がスイッチに触れるかも決めておきましょう。誰でも簡単にオン・オフできる状態は、うっかり未完成の機能を公開してしまう危険と隣り合わせです。

単純なフラグなら環境変数で実装することもありますが、ユーザーの属性や割合、地域などで細かく出し分けたい場合は、専用のフラグ管理サービスが使われます。