部屋の配線工事が終わっていても、スイッチを入れるまで電気はつきません。いつ点灯するかは、工事とは別に決められます。Webサービスの新しい機能にも、同じようなスイッチを付けておけます。それが機能フラグです。新しい機能のコードをすでに本番へ配置(デプロイ)していても、フラグがオフなら誰にも見えません。スイッチを入れた瞬間に公開されます。
コードを置く作業と、ユーザーに見せる判断(リリース)を切り離すための道具です。
スイッチがあるとできること
- 大型連休やキャンペーンの開始に合わせて、直前に慌てず、余裕をもってデプロイしておく
- 特定のユーザーだけに、新機能を先に試してもらう(ベータ機能)
- ユーザーの半分には旧デザイン、残り半分には新デザインを見せて比べる(A/Bテスト)
- 問題が起きたら、コードを戻さずに、その機能だけをすぐにオフにする
最後の使い方は、障害のときに特に効きます。コードを前の版へ戻すロールバックより手早く、問題の機能だけを止められます。
役目を終えたスイッチの片づけ方
機能を公開し終えたスイッチは、もう役目を終えたもの。でも、そのまま残しておくと、コードの中に「オンならこちら、オフならあちら」という分岐が残り続けます。フラグが何十個も絡み合うと、どの条件でどの機能が出るのか、誰にも追えなくなります。
フラグを作るときに、いつ削除するかも一緒に決めておきます。役目を終えたら、スイッチだけでなく、使わなくなった側のコードごと取り除きます。
誰がスイッチに触れるかも決めておきましょう。誰でも簡単にオン・オフできる状態は、うっかり未完成の機能を公開してしまう危険と隣り合わせです。
単純なフラグなら環境変数で実装することもありますが、ユーザーの属性や割合、地域などで細かく出し分けたい場合は、専用のフラグ管理サービスが使われます。