フィーチャーフラグの仕組み — 新しい検索画面を少しずつ公開する
新しい画面を置き、見せる相手を選ぶ
- 身近な画面や処理を使って仕組みを説明できる
- 動作例と保証されない条件を区別する
まずは、同じりんごを「一覧」と「カード」で切り替える
フィーチャーフラグは、機能の使い方を設定や条件で選ぶ仕組みです。新機能を本番へ置くデプロイと、利用者へ見せるリリースを分けるためにも使われます。
Node.jsが使える場合は、練習用フォルダーにflag-demo.jsを保存してnode flag-demo.jsを実行してみましょう。まずは、画面へ渡す文字列の選び分けだけを試します。
const product = { name: 'りんご', price: 120 };
function searchLabel(newSearch) {
return newSearch
? `[カード] ${product.name}: ${product.price}円`
: `[一覧] ${product.name}: ${product.price}円`;
}
console.log(searchLabel(false));
console.log(searchLabel(true));
OFFとONで次のように変わります。商品データは同じで、表示に使う処理を選んでいます。
[一覧] りんご: 120円
[カード] りんご: 120円
これはON/OFFを引数で渡す練習例です。管理画面で切り替える本番の仕組みを作るには、値の取得・更新、アクセス権、監査などを別に用意します。ブラウザーのボタンからフラグを変更できるだけでは、運用や認可の仕組みがそろったことにはなりません。
少しずつ見せるときに確認すること
社内で試す、対象利用者の一部へ広げる、十分に確認して全員へ公開する、といった順で進められます。割合はサービスや目的に応じて決めるもので、一律に10%から始める必要はありません。
同じ人に毎回同じ版を使ってもらいたい場合は、安定した利用者IDなどで割り当てます。例えばUnleashではstickinessの設定があり、randomでは評価のたびに結果が変わり得ます。「10%」という設定だけで、必ず固定の10%の人に同じ版が出るとは言えません。
測定したい成功率やエラー、問い合わせを先に決め、切り替えの記録も残しましょう。段階的公開とA/Bテストは目的が違い、ON/OFFに分けただけで実験の偏りや統計的な判断まで解決するわけではありません。
もう少し詳しく:OFFでも戻らないもの
実行中に評価するフラグなら再デプロイなしで処理を選べますが、設定の配信やSDKの取得方式によって反映時間が変わります。設定サービスへ接続できないときの既定値も決めます。
フラグをOFFにしても、既に書き込んだデータ、送信済みの通知、変更したDB構造は元へ戻りません。旧方式が新しいデータ形式を読めるか、切り替え中の処理が混ざっても成り立つかを確かめてください。
画面を隠すことも、APIのアクセスを拒否することとは別です。認可の確認はサーバー側でも行い、利用者が変更できるフラグ値を権限の根拠にしません。
目的に応じて片付ける
公開、実験、運用、利用者別の機能提供など、フラグには異なる用途があります。一時的な公開用フラグは、役目を終えたら旧分岐・不要なテスト・設定を整理します。運用上の切り替えなど、長期に残すフラグもあります。すべてのフラグを全員公開後に削除する、という一律のルールではありません。
担当者と目的、終了・見直しの条件を記録しておくと、残す理由を判断できます。フラグがあればレビューや短いブランチが不要になるわけでもありません。
覚え方と次の一歩
「フィーチャーフラグ」って出てきたら「機能の使い方を選ぶスイッチ」と思えばだいたいOK!
まず上の例で両方の結果を見て、次はブルーグリーンデプロイの仕組みやCI/CDの仕組みと、切り替える対象の違いを比べられます。
参考資料
- Pete Hodgson:Feature Toggles — 動的な切り替え、用途と寿命、分岐の確認と管理
- Unleash:Gradual rollout — 段階的公開とstickiness、randomでの評価