機能管理の概要

従来、新しいアプリケーション機能の配布には、アプリケーション自体を完全に再デプロイする必要がありました。 機能のテストでは、多くの場合、複数のアプリケーション デプロイが必要です。 テストのために、各デプロイで、機能を変更したり、異なる顧客に機能を公開したりすることがあります。

機能管理は、機能リリースをコード デプロイから切り離し、必要に応じて機能の可用性を迅速に変更できる最新のソフトウェア開発手法です。 "機能フラグ" と呼ばれる ("フィーチャー トグル"、"機能スイッチ" などとも呼ばれる) 手法を使用して、機能のライフサイクルを動的に管理します。

機能管理は、開発者が以下の問題に対処する助けとなります。

  • コードの分岐管理: 機能フラグを使用して、現在開発中の新しいアプリケーション機能をラップします。 こうした機能は、既定では「非表示」になっています。 機能が未完成でも安全に配布でき、運用環境では休止中のままになります。 ダーク デプロイと呼ばれるこの方法を使用すれば、各開発サイクルの最後にすべてのコードをリリースできます。 特定の機能を完了するために複数のサイクルが必要なため、複数の開発サイクルにわたってコード分岐を維持する必要がなくなります。
  • 運用環境でのテスト: 機能フラグを使用して、運用環境の新しい機能への早期アクセスを許可できます。 たとえばアクセスを、チーム メンバーまたは社内のベータ テスト担当者に限定できます。 これらのユーザーは、テスト環境での疑似体験や部分的体験ではなく、完全に忠実な運用環境を体験することになります。
  • フライト化: 機能フラグを使用して、エンド ユーザーに新しい機能を段階的にロールアウトします。 最初はユーザー全体のうちの少数を対象とし、時間の経過とともにその割合を徐々に増やすことができます。
  • インスタント キル スイッチ: 機能フラグによって、新しい機能をリリースするための固有のセーフティ ネットが提供されます。 コードを再デプロイすることなく、アプリケーションの機能をオンまたはオフにできます。 必要に応じて、アプリケーションの再構築や再デプロイをする必要なく、速やかに機能を無効にできます。
  • 選択的アクティブ化: 機能フラグを使用してユーザーをセグメント化し、各グループに特定の機能セットを提供します。 特定の Web ブラウザーでのみ動作する機能があるとします。 そのブラウザーのユーザーのみが機能を表示および使用できるように、機能フラグを定義できます。 この方法では、コードを変更することなく、サポートされるブラウザーの一覧を後で簡単に拡張できます。

基本的な概念

機能管理に関連するいくつかの新しい用語を以下に示します。

  • 機能フラグ: 機能フラグは、"オン" または "オフ" というバイナリ状態を伴う変数です。 機能フラグは、関連付けられたコード ブロックも持ちます。 機能フラグの状態が、コード ブロックが実行されるかどうかのトリガーとなります。
  • 機能マネージャー: 機能マネージャーは、アプリケーションのすべての機能フラグのライフ サイクルを処理するアプリケーション パッケージです。 機能マネージャーでは、機能フラグのキャッシュやその状態の更新を含め、追加の機能も提供されます。
  • フィルター: フィルターは、機能フラグの状態を評価するためのルールです。 考えられるフィルターとしては、ユーザー グループ、デバイスやブラウザーの種類、地理的な場所、時間帯などがあります。

機能管理の効果的な実装は、次のように、協調して動作する少なくとも 2 つのコンポーネントで構成されます。

  • 機能フラグを使用するアプリケーション。
  • 機能フラグとその現在の状態を格納する個別のリポジトリ。

コードでの機能フラグの使用

アプリケーションに機能フラグを実装するための基本的なパターンはシンプルです。 機能フラグは、コード内の条件付きステートメントを制御するブール型の状態変数です。

if (featureFlag) {
    // Run the following code
}

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
}

機能フラグのリポジトリ

機能フラグを効果的に使用するには、アプリケーションで使用するすべての機能フラグを外部化する必要があります。 これにより、アプリケーション自体の変更や再デプロイをすることなく、機能フラグの状態を変更できます。

Azure App Configuration によって、機能フラグ用の一元化されたリポジトリが提供されます。 これを使用すると、さまざまな種類の機能フラグを定義し、その状態をすばやく確実に操作できます。 その後、さまざまなプログラミング言語フレームワークの App Configuration ライブラリを使用して、お使いのアプリケーションからこれらの機能フラグに簡単にアクセスできます。

ASP.NET Core アプリ内での機能フラグの使用に関するページでは、お使いの ASP.NET Web アプリケーションの機能フラグを実装するために .NET Core App Configuration プロバイダーと機能管理ライブラリを一緒に使用する方法について説明します。

次のステップ