フィーチャートグル

フィーチャートグル（feature toggle、機能トグル。別名としてfeature switch（機能スイッチ）, feature flag(機能フラグ), feature flipper(機能切替スイッチ), conditional feature(条件付機能)など)は、ソフトウェア開発 において、複数のソースコードのブランチ（機能ブランチ）を維持するのとは別の方法を提供しようとする手法である。

継続的リリースと継続的デプロイは、コーディングについてのフィードバックを開発者たちに頻繁に提供してくれる。これを実現するには、複数の開発者たちのコードを可能な限り早期に統合することが必要になる。機能ブランチはこの過程に抜け道を作ってしまう。機能トグルを利用すれば、開発者たちはメインのトラックに頻繁にソースを統合しつつも、開発中の機能へ入っていける実行経路のトグルを「OFF」にしておけば、その機能は「死んだ」状態になる。新しい実行経路を有効にするための労力は、単にトグルを「ON」に設定するだけなので、十分に小さい。

この技法により開発者たちは、開発未了の機能を含んだバージョンを製品としてリリースすることが可能になる。これらの開発未了の機能はトグルをOFFすることによって隠されるので、ユーザインタフェース上には表示されない。これにより、日常的にブランチやマージする労力を払うことなく、多くの小さな変更ごとにソフトウェアのバージョンを刻みながら、常にリリースすることが可能になる。

機能フラグの別の利点は、カナリアリリースである。 カナリアリリース（canary release。カナリア開発あるいはカナリアローンチ(canary launch)とも呼ばれる）とは、システム全体への反応を評価するために、少数のユーザーに対して機能を公開することである。カナリアリリースにより、機能をゆっくり公開して、実際のユーザ（カナリアたち）からの反応を測定し、危険の兆候を早期に探すことが可能になる。その機能があまり良くなければ、その機能は差し戻す事もできる。カナリアリリースは、より機敏に動くために継続的デリバリーを実践しているアジャイル開発組織のベストプラクティスである 。

このパターンは多くのプログラミング言語で非常にシンプルに実装できるが、更に利用を単純にするために利用できるライブラリも存在する。

マーティン・ファウラーは機能トグルは最後の手段であるべきとして、機能トグルを利用する前に次のような手段を検討すべきと述べている。

 機能を小さく分割して段階的にリリースしていく方法
 新機能へのエントリーポイントとなるUIを最後に作る方法

フィーチャートグルはFlickr、 Disqus、 Etsy、reddit、 Gmail、Netflix
などの多くの大きなウェブサイトで使われている。

Java、Angular、Pythonでフィーチャートグルやフィーチャーフラグを実現できるオープンソースの解決策は多くある。SAASプラットフォームのためのフィーチャートグルとしては、LaunchDarkly が最も広く使われている。これはJava, JavaScript, PHP, Python, Go, Node.JS, .NET, Ruby, Python Twisted, Android,   iOSのためのフィーチャートグルを提供する。

参考文献

外部リンク 
 launchdarkly.com 
 FeatureToggle - martinfowler.com. 
 monkeylittle.com
 Experience Report: Feature Toggle over Feature Branch - Jay Fields' Thoughts.

ツール 
 LaunchDarkly – 全てのstacksのためのフィーチャーフラグ SAAS
 Petri, Javaによる総合的なA/Bテストおよびフィーチャートグルのフレームワーク (オープンソース)
 Flip, Javaによるフィーチャートグルのフレームワーク (オープンソース)
 FF4J – Java用の簡単フィーチャーフリップ
 Togglz – Javaプラットフォーム用のフィーチャートグル
 FeatureToggle .Net -.Net開発者のためのフィーチャートグル

ソフトウェア開発工程
プログラミング