機能フラグ オライリー・システム運用アンチパターンより
機能フラグ:継続的デプロイとデリバリの調整ツール
システム運用アンチパターンは機能フラグだけでなく、システム運用のノウハウが詰まっているので是非手に取ってみてください。
※詳しくはP93, 94, 95を参照してください。
継続的デプロイおよび継続的デリバリを実現した場合、デプロイはしたいがリリースは控えたいと考えることはありませんか?ビジネス上の理由からリリースのタイミングを調整したい、しかし開発の観点からはブランチ戦略に従いリリースを進めたいという状況もあるでしょう。このような時には機能フラグを活用します。機能フラグとは、フラグやセマフォなどの条件分岐を利用して機能のコードを隠蔽する手法です。これにより、デプロイと顧客へのリリースのタイミングを分けることが可能になります。
データベースを利用した機能フラグの活用例
機能フラグの一例として、真偽値(boolean)をデータベースに保存する方法があります。
true : フラグを有効化
false : フラグを無効化
この方法では、機能フラグ名とtrue/falseの値を含むテーブルをデータベースに設定します。このシステムを採用すると、機能の切り替えにコードの変更を必要とせず、データベースの値を単に変更するだけで済みます。時間が経過し、問題が発生しないことが確認されたら、機能フラグのロジックを削除し、機能を永続化します。
※なお、機能フラグの管理にはSaaSソリューションを利用することも可能です。
機能フラグの運用
機能フラグのデフォルト設定とその効果
機能フラグはデフォルトでOFFに設定します。これは、OFFの状態であれば既存の機能が通常通り動作するためです。この設定でリリースを行うと、外見上は機能に変更がないように見えます。これにより、新機能に関わらず、他の部分にバグが存在しないかを確認することができます。
機能フラグの多様な応用シナリオ
デプロイとリリースを分別する以外にも、以下のような場面で応用可能です。
障害が発生した際の対応として
広告の表示制御に
新機能のパフォーマンス測定:メトリクスの活用
新しい機能が正しく動作しているかどうかをどのように確認するかについて、メトリクスの監視が重要です。
例として、レコメンデーションエンジン機能で新たなアルゴリズムを導入する場合を考えます。このアルゴリズムは、複数のソースから収集したユーザーの情報を活用し、それらを組み合わせてユーザーの好みをより正確に把握します。新しいアルゴリズムは、従来のものよりも迅速に、より適切なレコメンデーションをユーザーに提供します。
この場合の重要なメトリクスは以下の通りです。
- レコメンデーション生成の所要時間
- ユーザーごとに生成されるレコメンデーションの数
- レコメンデーションのクリックスルー率
これらのデータを効果的に取得するためには、適切なログシステムの構築が必要です。また、新旧のアルゴリズムに関する既存のメトリクスを比較することで、新しい機能の効果を評価できます。このプロセスは極めて重要です。
Discussion