この PHP ライブラリは、機能切り替えインフラストラクチャを実装します。
trompette/feature-toggles
ライブラリを使用すると、チームが新しい機能をユーザーに反復的かつ安全に提供できるようになります。つまり、継続的なデプロイが可能になります。
このトピックの詳細については、MartinFowler.com の機能切り替え (別名機能フラグ)を参照してください。
trompette/feature-toggles
ライブラリは Packagist で配布されています。
次のコマンドを使用して、プロジェクトの依存関係として追加できます。
composer require trompette/feature-toggles
ページの新しいバージョンに取り組んでいる場合、新しいバージョンを徐々にデプロイすると、チームに大きな自信をもたらすことができます。
しかし、チームは次のことを行う必要があるため、より多くの作業が必要になります。
trompette/feature-toggles
ライブラリを使用すると、現在のユーザーが機能を持っているかどうかをトグル ルーターに問い合わせることで、新しいバージョンを有効にできます。
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
トグルルーターを使用する前に、 new_page_version
機能を登録する必要があります。
use Trompette FeatureToggles FeatureDefinition ;
use Trompette FeatureToggles FeatureRegistry ;
$ featureRegistry = new FeatureRegistry ();
$ featureRegistry -> register ( new FeatureDefinition (
$ name = ' new_page_version ' ,
$ description = ' awesome new version of a page ' ,
$ strategy = ' whitelist '
));
機能を定義する場合、ターゲットに機能があるかどうかを決定するアルゴリズムを指定するためにトグル戦略を参照する必要があります。
実装される戦略は次のとおりです。
OnOff
クラスを参照してください。Whitelist
クラス」を参照してください。Percentage
クラス」を参照してください。また、戦略はonoff and whitelist
、 onoff or whitelist or percentage
などのように、ブール演算子と組み合わせることができます。
機能レジストリが構成されたので、トグル ルーターを作成できます。
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
use Trompette FeatureToggles ToggleRouter ;
use Trompette FeatureToggles WhitelistStrategy Whitelist ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ whitelist = new Whitelist ( $ repository );
$ toggleRouter = new ToggleRouter (
$ featureRegistry ,
$ strategies = [ ' whitelist ' => $ whitelist ]
);
ストラテジーは、名前でインデックス付けされた配列として挿入されます。これらは、機能を登録するときに使用する必要がある参照です。
トグル ルーターを使用して、特定の戦略の機能を構成できます。
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' on ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' off ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' allow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' disallow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 25 );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 50 );
構成の変更は、ストラテジ インスタンスで関連するメソッドを呼び出すことによって永続化されます。
すべての Doctrine DBAL 設定リポジトリはSchemaMigrator
インターフェースを実装しているため、スキーマを移行できます。
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
Symfony を使用する場合、以前のコードはすべてオプションです。すべては、 FeatureTogglesBundle
クラスによって結合されます。
Symfony 統合の恩恵を受けるには、 config/bundles.php
にバンドルを登録する必要があります。
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
バンドルは、 config:dump-reference
で説明されているように構成できます。
# Default configuration for extension with alias: "feature_toggles"
feature_toggles :
doctrine_dbal_connection : doctrine.dbal.default_connection
declared_features :
# Prototype
name :
description : ~ # Required
strategy : ~ # Required
技術的な詳細については、 FeatureTogglesConfiguration
クラス」を参照してください。
パブリックとして宣言されているサービスは 1 つだけです。識別子としてTrompetteFeatureTogglesToggleRouter
またはTrompetteFeatureTogglesToggleRouterInterface
を持つトグル ルーターです。
サービスとして定義され、 console.command
でタグ付けされた便利なコンソール コマンドもあります。
feature-toggles
feature-toggles:configure-feature Configures a feature
feature-toggles:migrate-dbal-schema Migrates DBAL schema
feature-toggles:show-feature-configuration Shows a feature configuration
コマンドの詳細については、ヘルプ メッセージを参照してください。
技術的な詳細については、 FeatureTogglesExtension
クラス」を参照してください。
trompette/feature-toggles
ライブラリは、MIT ライセンスに基づいてリリースされています。
詳細については、LICENSE ファイルを参照してください。
trompette/feature-toggles
ライブラリは、Food Assembly 開発チームが使用する実践とツールからインスピレーションを得ています。
チームは、Etsy のエンジニアリング ブログの記事「Web Experimentation with New Visitors」でこの実践を発見しました。