アプリケーションの機能を管理する
機能管理は、機能リリースをコード デプロイから切り離し、必要に応じて機能の可用性を迅速に変更できる最新のソフトウェア開発手法です。 "機能フラグ" と呼ばれる ("フィーチャー トグル"、"機能スイッチ" などとも呼ばれる) 手法を使用して、機能のライフサイクルを動的に管理します。
基本的な概念
機能管理に関連するいくつかの新しい用語を以下に示します。
- 機能フラグ: 機能フラグは、"オン" または "オフ" というバイナリ状態を伴う変数です。 機能フラグは、関連付けられたコード ブロックも持ちます。 機能フラグの状態によって、コード ブロックが実行されるかどうかが決まります。
- 機能マネージャー: 機能マネージャーは、アプリケーション内のすべての機能フラグのライフサイクルを処理するアプリケーション パッケージです。 通常、機能マネージャーには、機能フラグのキャッシュや状態の更新など、追加の機能が用意されています。
- フィルター: 機能フラグの状態を評価するためのルールです。 ユーザー グループ、デバイスまたはブラウザーの種類、地理的場所、時間枠はすべて、フィルターが表すことができるものの例です。
機能管理の効果的な実装は、次のように、協調して動作する少なくとも 2 つのコンポーネントで構成されます。
- 機能フラグを使用するアプリケーション。
- 機能フラグとその現在の状態を格納する個別のリポジトリ。
これらのコンポーネントの相互作用を次の図で例示します。
コードでの機能フラグの使用法
アプリケーションに機能フラグを実装するための基本的なパターンはシンプルです。 機能フラグは、コード内の if 条件付きステートメントで使用されるブール型状態変数として考えることができます。
if (featureFlag) {
// Run the following code
}
この場合、featureFlag が True に設定されていれば、囲まれたコード ブロックが実行され、それ以外であればスキップされます。 次のコード例のように、featureFlag の値を静的に設定できます。
bool featureFlag = true;
特定の規則に基づいて、フラグの状態を評価することもできます。
bool featureFlag = isBetaUser();
条件を拡張し、いずれかの状態のアプリケーション動作を設定できます。
if (featureFlag) {
// This following code will run if the featureFlag value is true
} else {
// This following code will run if the featureFlag value is false
}
機能フラグの宣言
各機能フラグには 2 つの部分があります。1 つは名前で、もう 1 つは、機能の状態が "オン" である (つまり、その値が "True" である) かどうかの評価に使用される 2 つ以上のフィルターの一覧です。 フィルターは、機能をオンにするタイミングに関するユース ケースを定義します。
機能フラグに複数のフィルターがある場合は、フィルターのいずれかが、機能を有効にする必要があると判断するまで、フィルター一覧が順番に走査されます。 その時点で、機能フラグが "オン" になり、残りのフィルターの結果はすべてスキップされます。 どのフィルターも、機能を有効にする必要があると示していない場合、機能フラグは "オフ" になります。
機能マネージャーは、appsettings.json を機能フラグの構成ソースとしてサポートしています。 次の例は、JSON ファイルでの機能フラグの設定方法を示しています。
"FeatureManagement": {
"FeatureA": true, // Feature flag set to on
"FeatureB": false, // Feature flag set to off
"FeatureC": {
"EnabledFor": [
{
"Name": "Percentage",
"Parameters": {
"Value": 50
}
}
]
}
}
機能フラグのリポジトリ
機能フラグを効果的に使用するには、アプリケーションで使用するすべての機能フラグを外部化する必要があります。 この方法により、アプリケーション自体を変更および再デプロイすることなく、機能フラグの状態を変更できます。
Azure App Configuration は、機能フラグ用の集中リポジトリとして設計されています。 これを使用すると、さまざまな種類の機能フラグを定義し、その状態をすばやく確実に操作できます。 その後、さまざまなプログラミング言語フレームワークの App Configuration ライブラリを使用して、お使いのアプリケーションからこれらの機能フラグに簡単にアクセスできます。