Val Yonchev
Jeremy Brown
フィーチャートグル(機能ビット/機能フラグ/機能フリッピング/機能コントロールとも呼ばれる。)は、 コードを変更したり再展開したりすることなく ソフトウェアの機能を変更するために使用するエンジニアリング手法です。 ソフトウェアでは、フラグは "2進数の値を格納するために使用される1つまたは複数のビット"です。つまり、真か偽のどちらかになりうるBooleanです。フラグは、if文でチェックすることができます。また、ソフトウェアにおける機能とは、ある種の価値を提供する一部のファンクションのことです。
機能フラグ(またはトグル)は、最も単純な形では、ソフトウェアのちょっとした機能を囲った単なるif文です。
フィーチャートグルは、エンジニアリングの基本的な手法であり、新しい機能をリリースする際に、実験やパフォーマンス保護を目的として、製品の挙動を管理するための優れた方法を提供します。
機能フラグの使用方法は以下のように様々です:
以下は疑似コードを使った簡単な例です。 (Rollout Guide to Feature Flagsからの引用):
if(configFile["IsHoliday"] == true) {
writeGreetingMessage("Happy holidays!");
}
このコードは、メインプログラムのソースコードの外にある設定ファイルをチェックして isHoliday
変数を取得し、設定ファイルの isHoliday
というBooleanが true
であるときに Happy holidays!
というメッセージとともに writeGreetingMessage()
という関数を呼び出します。
この例で重要なのは、コードを変更したり再展開したりすることなく、ソフトウェアの機能を変更することができるという点です。私たち は、稼働 中に設定ファイルを更新するだけでよいのです。これで、Happy holidays!
というメッセージを表示したい時は、その場で設定ファイルを更新すれば良くなりました。
機能フラグを利用することで、コードのデプロイメントと機能のデプロイメントを分離することができます。これを実現するために、実行中のUI、あるいは現在のコンテキスト(特定のユーザーや組織など)に基づいたリクエストごとの動的なデプロイメントに対して設定ファイルを使用することができます。
In Martin Fowler's article on Feature Flagsでは、機能フラグを分類するために2つの軸を示しています:機能フラグが有効な期間はどれくらいか? と トグルの決定がいかにダイナミックであるべきか? です。以下にしめす機能フラグの4つの分類は、Martin Fowlerによって定義されたものです:
これらのフラグの種類をまとめると、次のようなイメージになります。
フィーチャートグルは、A/Bテスト、カナリア リリース、ダーク ローンチといった、特定のグループや一部のユーザーに対して”新しい”機能またはバージョンを有効にする際に使用されるプラクティスを大きく補完し、実施を容易にすることが可能です。これは実験計画法の実践にも不可欠と言えます。
フィーチャートグル をチームや顧客、ステークホルダーと実施するにあたりより詳細にお知りになりたい場合は、以下のリンクを参照してください。