フィーチャートグル

別名:機能フラッグ/機能ビット/機能フリップ/機能コントロール
Contributed by

Val Yonchev

Jeremy Brown

Published December 18, 2018
Collection
2

概要

フィーチャートグル(機能ビット/機能フラグ/機能フリッピング/機能コントロールとも呼ばれる。)は、 コードを変更したり再展開したりすることなく ソフトウェアの機能を変更するために使用するエンジニアリング手法です。 ソフトウェアでは、フラグは "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テストを行うために使用されます。システムの各ユーザーをコホートにグルーピングして、実行時にユーザーは、特定コードパスに送られたり、別のコードパスに送られたりします。
  • 運用フラグ は、システムの動作の運用面を制御するために使用されます。パフォーマンスへの影響が不明確な新機能をロールアウトする際に運用フラグを導入し、システムオペレータが必要に応じてその機能を本番環境で迅速に無効化もしくは低下させることができるようにすることがあります。
  • パーミッションフラグ は、特定のユーザーが受ける機能または製品体験を変更するために使用されます。例えば、私たちは、お金を払ってくれるお客さんだけが使える”プレミアム”な機能を設定することができます。あるいは、内部ユーザーのみが利用できる”アルファ版”機能と、内部ユーザーとベータユーザーのみが利用できる”ベータ版”機能のセットがあるかもしれません。

これらのフラグの種類をまとめると、次のようなイメージになります。 Embedded Content

なぜ、どうやって、他のプラクティスと組み合わせるか?

フィーチャートグルは、A/Bテストカナリア リリースダーク ローンチといった、特定のグループや一部のユーザーに対して”新しい”機能またはバージョンを有効にする際に使用されるプラクティスを大きく補完し、実施を容易にすることが可能です。これは実験計画法の実践にも不可欠と言えます。

実施例

参考

フィーチャートグル をチームや顧客、ステークホルダーと実施するにあたりより詳細にお知りになりたい場合は、以下のリンクを参照してください。


Except where noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license. This site is graciously hosted by Netlify