リスクなしで
ソフトウェアを
より速く革新

FeatBitは、高速でスケーラブルなオープンソースのFeature Flags管理サービスです。セルフホスティングに理想的なソリューションです。

Innovate Your Software Faster without Risk

A Fast, Scalable, and Open-source Feature Flags Management Service. For Cloud & Self-hosting.

Feature Flagsの実装方法

Last updated date:

この記事は LifeCycle によって書かれました。ここで英語で書かれたオリジナルの記事を確認できます

Feature Flags は、特徴トグルとしても知られ、現代のソフトウェア開発において不可欠なツールとなっています。これにより、新機能や更新のリリースを柔軟かつ制御された方法で制御することができます。このブログ投稿では、Feature Flagsについて、その古典的および現代的なユースケース、およびフロントエンド、モバイル、サーバーサイドアプリケーションでの効果的な実装方法について探求します。また、オーバーラップデザインA/Bテストの概念や、Feature Flagsが頑強な実験の構築において重要な役割を果たす点についても掘り下げます。

古典的なユースケース:デプロイメントのリスクの低減

  1. 本番環境でのテスト:Feature Flagsを使用すると、未テストのコードに関連するリスクを軽減しつつ、新機能を本番環境でテストすることができます。
  2. カナリアリリース:新機能をすべてのユーザーに公開する前に、一部のユーザーに段階的に新機能を提供することで、デプロイメントをスムーズに行うことができます。
  3. 許可/ブロックリスト:特定のユーザーやグループのために機能アクセスを制御し、細かな権限管理を行うことができます。
  4. ベータテスト:一部のユーザーを選んで新機能を試すよう招待し、本番リリース前にフィードバックを収集することができます。

現代的なユースケース:SREと成長

  1. オブザーバビリティ:Feature Flagsのデータや分析を通じて、機能の使用状況、パフォーマンス、ユーザーの動向を把握し、トラブルの兆候が最初に現れた時点で、システムが自動的に機能のロールバック操作をトリガーできるようにします。詳細は、FeatBitのDataDog統合ドキュメントまたはブログ記事『Feature Flagsとオブザーバビリティツールの逐次的なデータベース移行に関する使用方法』をご覧ください
  1. 実験:新しいアイデアをA/Bテストし、データを収集し、機能の有効性についてデータに基づいた意思決定を行うためにFeature Flagsを実装します。Feature Flagsを使用することで、オーソゴナルレイヤリング、相互排他などの複雑な実験デザインでのトラフィック分割要件に柔軟なソリューションを提供します。データ分析ツールとFeature Flagsツールを組み合わせて、高価なサードパーティのABテストサービスを購入する代わりに、より良い実験システムを作成できます。
  2. ソフトウェア収益化:Feature Flagsを使用して、プレミアム機能、サブスクリプション、その他の収益化戦略へのアクセスを制御します。これにより、ユーザーの動向やフィードバックに基づいて価格モデルや提供内容を適応させることができます。実際の事例については、次の記事を読むことで詳細を確認できます:『フィーチャーフラグ管理プラットフォームによるセンチネルEMSワークフロー
  3. その他

OpenFeatureによる標準化

Feature Flagsの実装におけるトレンドは、OpenFeatureなどのソリューションで標準化することで、プロセスを効率化するためのSDKやテンプレートを提供することです。標準化には次の2つの利点があります。

  1. ベンダーロックインの回避:多くのサードパーティのFeature Flagsツールが、OpenFeature SDK標準をサポートしており、ベンダーロックインのリスクを軽減し、柔軟性を高めています。
  2. 必要なインターフェースの提供:OpenFeatureは、堅牢なFeature FlagsSDKの構築をサポートするための必要なインターフェースを提供します。これらのインターフェースは、ベストプラクティスに従うことや一貫性を維持することを支援します。

スタック全体でのFeature Flagsの実装

Feature Flagsは、ウェブアプリケーションやモバイルアプリケーション、バックエンドサービス、アルゴリズムなど、すべてのソフトウェアアプリケーション全体で実装することができます。ここでは、プロジェクト全体でFeature Flagsを使用する方法について説明します。例えば、Google株を購入するタイミングをユーザーに伝える新しいメソッドがあるとします。新バージョンでは、ユーザーインターフェース、バックエンドデータソース、計算アルゴリズムが変更されるため、同じユーザーのページを一貫させる必要があります。

新機能のリリースを制御するために1つまたは複数のFeature Flagsを作成できます。ここでは、新機能のリリースを制御するための単一のブール型のFeature Flagsを作成します。最初に、「Google株の購入術」というFeature Flagsを作成します。以下の図は、FeatBitのユーザーインターフェースにおけるFeature Flagsの外観を示しています。

次に、このFeature Flagsをフロントエンドおよびバックエンドアプリケーションでどのように実装するかを見ていきましょう。

例えば、Microsoft株の購入タイミングを示すUIを持つUIがあります。異なる「Google株の購入術」のバージョンの異なるUIビューを提供する2つのコンポーネントがあります。これらのコンポーネントのそれぞれを表示するか否かを制御するために、Feature Flagsを使用します。以下は、VUEコードの例です(Feature FlagsReactを使用している場合、Reactスタイルのコードで修正するだけです):

ウェブアプリケーションとモバイルアプリケーションの両方でユーザーに同じUIを表示するために、同様の作業を行う必要があります。

新しい方法(m2)がm1とは異なる追加データを読み込む必要があるとします。これを実装するためのいくつかの方法があります。以下は私のお気に入りの方法の一つです(どちらか一方):

  • 異なるデータ取得機能をその親関数内でラップし、制御するためのFeature Flagsを追加します。ただし、この方法はフロントエンドおよびバックエンドのコードでFeature Flagsをクリアするための追加作業が必要です。
  • 新しい方法(m2)のために新しいAPIを追加します。この場合、バックエンドにFeature Flagsを追加する必要がなくなります。ただし、次のような注意点があります:
    • 新しいAPIを追加すると、APIゲートウェイに追加作業が必要となる。
    • 最終的に新しい方法を選択した際に、新しいAPI全体を削除する必要があります。

以下はasp.net coreの例です。Feature Flagsが「m2」を返す場合、プログラムは「RetriveDataFromFeatBiDB()」関数を使用してデータソースを取得します。

アプリケーションにコードを実装した後、あと必要なことはUIで機能を制御してリリースするだけです。下に示されている図のように、カリフォルニアに住むユーザーだけに新しい方法をリリースするカスタムルールを設定できます。潜在的なリスクを最小限に抑えるために、ユーザーの爆発半径をたったの10%に減らすことができます。(これはプログレッシブロールアウトとも呼ばれます)

堅牢な重複デザインA/Bテストの構築

重複デザインのA/Bテストは、複数の実験を同時に実行し、ユーザーが複数の実験に同時に参加できるようにするものです。堅牢なfeature flagsサービスは、以下の要件を満たすべきです:

  1. 相互に重複しない独立した方法でテストを積み重ねるために、直交レイヤーを作成できること。各バリエーションは隔離されており、分析が簡単で、衝突や意図しない結果を最小限に抑えます。
  2. 衝突を避けるために、パラメーターを相互に排他的にすることが重要です。feature flagsはこれを実現するのに役立ち、特定のバリエーションや変更を経験するユーザーを正確に制御できます。
  3. 関連する属性や行動に基づいてユーザーベースを明確なグループに分けることができます。これにより、特定のユーザーセグメントに対して実験を実行し、異なるグループに対する変更の影響についての洞察を提供できます。
  4. など。

多くの feature flag tools がこのサポートのための機能を提供しようとしてきました。FeatBitはこの目標を達成するための良いオープンソースソリューションです。下の図は、FeatBitが直交レイヤーと単一レイヤー内で相互排他的な feature flagsトラフィックを分割することで、ABテストデザインをどのように強化するかを示しています。

Feature Flag Open Source ツール

以前、ツールに関する別の記事《Best Free and Open Source Feature Flag Tools》を書きました。

Conclusion

Feature flags は、現代のソフトウェア開発において重要な要素であり、デプロイメントのリスクを減らし、実験を行い、柔軟なリリース戦略を維持することができます。OpenFeatureのようなソリューションを標準化し、スタック全体で一貫してfeature flagsを実装することにより、堅牢で適応性のあるソフトウェア開発とテストへのアプローチを実現することができます。feature flagsの力を活用して、より優れた製品を構築し、データ駆動型の意思決定を行いましょう。





関連記事:

Open Source Feature Flag tools

Flagsmith vs. Unleash: Which Open Source Feature Flag Tool Wins in 2023?