DUICUO

Flagsmith は、非常に便利なオープンソースの機能タグ付けおよびリモート構成サービスです。

Flagsmithは、Djangoを使用して開発されたオープンソースの機能タグ付けおよびリモート設定サービスです。プライベートクラウドにデプロイすることも、ローカルで実行することもできます。Flagsmithを使用すると、Web、モバイル、サーバーサイドアプリケーション全体で機能タグを簡単に作成および管理できます。コードをタグで囲むだけで、Flagsmithを使用して、環境やユーザーごとに対応する機能を有効化または無効化できます。

Flagsmith には多くの機能があります:

  • 段階的に機能をリリースする機能フラグ。
  • リモート構成を使用すると、新しいコードを展開せずに、機能のオン/オフを簡単に切り替えたり、変更を加えたりすることができます。
  • A/B テストと多様性テストにより、新機能の A/B テストと多様性テストが可能になり、また、早期のユーザー フィードバックを取得するためのベータ プログラムを導入することも可能になります。
  • チーム メンバー、プロジェクト、および役割の編成を含む組織管理は、展開を適切に整理するのに役立ちます。
  • 統合により、お気に入りのツールを使用して Flagsmith を簡単に強化できます。

フィーチャーフラグとは、コードや機能が完成する前にリリースできる開発手法です。これはCI/CDに非常に有益であり、典型的なワークフローは以下のようになります。

  • 新しい機能の開発に取り掛かろうとしています。アプリケーションに共有ボタンを実装するとしましょう。
  • Flagsmithで新しい機能フラグを作成し、「sharing_button」という名前を付けます。開発環境では有効、本番環境では無効に設定します。
  • この機能の開発を始めましょう。UIにボタンを表示するコードを記述する際は、shared_buttonフラグの値をテストする条件文で囲み、フラグがTrueに設定されている場合にのみボタンを表示します。
  • ボタンは sharing_button フラグが True に設定されている場合にのみ表示されるため、この機能を使用するときにコードを安全にコミットでき、コードは本番プラットフォームで実行されますが、機能はフラグの背後に隠れます。
  • 機能の開発が完了したと感じたら、他のチーム メンバーやベータ テスターに​​対して sharing_button を有効にすることができます。
  • すべてが期待どおりに動作する場合は、実稼働環境のすべてのユーザーに対して sharing_button フラグを True に設定するだけで、機能が表示されます。

インストール

Flagsmithの公式サービス(https://flagsmith.com/)を直接ご利用いただけます。セルフホストをご希望の場合は、以下の設定手順を行ってください。

  • Flagsmith データを保存するための Postgres データベースを作成します。
  • API サービスをデプロイし、DNS を設定します。ヘルスチェックを使用する場合は、ヘルスチェックのエンドポイントとして /health を使用してください。
  • http:///api/v1/users/config/init/ にアクセスして、初期のスーパー管理者を作成し、プラットフォームに DNS 情報を提供します。
  • フロントエンドダッシュボードをデプロイし、DNSを設定します。適切な環境変数を使用して、ダッシュボードをAPIにポイントします。また、ヘルスチェックを使用する場合は、ヘルスチェックのエンドポイントとして/healthを使用してください。
  • ダッシュボードを通じて新しい組織、プロジェクト、環境、ロゴを作成します。
  • 当社の SDK を使用する場合は、それらが指す API アドレスをオーバーライドする必要があります。オーバーライドしないと、デフォルトで https://api.flagsmith.com/api/v1 にある当社の有料インターフェースに接続されます。

より推奨される方法は、ワンクリックインストールに Docker を使用することです。

 git clone git @github .com : flagsmith / セルフホスト.git
docker-compose - f セルフホスト/ docker-compose .yml アップ

Kubernetes を使用している場合は、Helm Chart を使用してインストールすることもできます。

 Helm リポジトリにflagsmith を追加https://flagsmith.github.io/flagsmith-charts/
helm install -n flagsmith --create-namespace flagsmith flagsmith / flagsmith
kubectl -n flagsmith port -forward svc / flagsmith-frontend 8080 : 8080

次に、ブラウザで http://localhost:8080 にアクセスしてください。これにより、新しい名前空間 flagsmith にデフォルトオプションでインストールされます。上記の kubectl port-forward の例はデモンストレーション用です。最適な方法は、Ingress 経由でサービスを公開することです。flagsmith に以下の値を設定し、Ingress コントローラーや関連する DNS の変更に合わせて必要に応じて変更できます。

 入口
フロントエンド
有効: true
ホスト:
- ホスト: flagsmith .[ MYDOMAIN ]
パス:
- /
API :
有効: true
ホスト:
- ホスト: flagsmith .[ MYDOMAIN ]
パス:
- / API /
- / 健康/
フロントエンド
追加環境:
API_URL : 'https://flagsmith.[MYDOMAIN]/api/v1/'

クラスター外の DNS または CDN が適用されると、ブラウザで https://flagsmith.[MYDOMAIN] 経由でサービスにアクセスできるようになります。

アプリケーションは Django を使用して構築されているため、Django 管理機能を使用してサービスを管理することもできます。

コンセプト

Flagsmithは、REST API(`/api`配下)と、Flagsmithの管理に使用できるWebベースの管理ダッシュボード(`/frontend`配下)という2つのコアコンポーネントで構成されています。これら2つのコンポーネントは別々のアプリケーションとして実行されます。Webベースのダッシュボードは、REST呼び出しを介してAPIと通信するシングルページアプリケーションです。

次の図は、Flagsmith のデータ モデルの概要を示しています。

整理する

組織は、あなたと他のチーム メンバーがプロジェクトとその機能を管理するための手段です。ユーザーは複数の組織のメンバーになることができます。

プロジェクト

プロジェクトは、プロジェクト内のすべての環境で一連の機能を共有する1つ以上の環境で構成されます。組織は任意の数のプロジェクトを持つことができます。

環境:

環境とは、機能の設定を分離するための方法です。例えば、プロジェクトの開発環境とステージング環境では機能が有効に設定され、本番環境では無効に設定されている場合があります。プロジェクトには任意の数の環境を設定できます。

関数

機能はプロジェクト内のすべての環境で共有されますが、その値/状態は環境間で変更できます。

身元

IDとは、プロジェクト環境ごとに特定のユーザーを登録することを意味します。クライアントアプリケーションにIDを登録することで、個々のユーザーの機能を管理できます。IDの機能は、環境のデフォルト設定をオーバーライドできます。例えば、[email protected] は開発環境と本番環境で異なるIDを持ち、それぞれの環境で異なる機能を有効にできます。

特徴

アイデンティティには任意の数の特徴を保存できます。特徴は単純なキーと値のペアであり、あらゆる種類のデータを保存できます。アイデンティティに保存できる特徴の例としては、以下のようなものがあります。

  • ユーザーがログインした回数。
  • 応募規約に同意した場合。
  • アプリケーションテーマの好み。
  • アプリケーション内で特定の操作を実行する場合。

セグメント

セグメントは、ログイン頻度、デバイス、場所、その他任意のカスタム特性などの特性に基づいてユーザーグループを定義する方法です。個々のユーザーと同様に、環境のデフォルト機能をオーバーライドできます。

ここではReactを例に、Flagsmithをプロジェクトに統合する方法を説明します。Flagsmithは多くのSDKを提供しており、Flagsmith React SDKを直接使用できます。

SDKをインストールする

NPM 経由でインストール:

 npm i flagsmith --save

JavaScript CDN 経由で導入:

 < スクリプトsrc = "https://cdn.jsdelivr.net/npm/flagsmith/index.js" ></ スクリプト>

基本的な使い方

開発環境や本番環境など、https://flagsmith.com 上のプロジェクト内の単一の環境を初期化します。

ステップ1: Flagsmithプロバイダーを使用してアプリケーションをラップする

アプリケーションを FlagsmithProvider コンポーネントでラップすると、アプリケーション全体に React コンテキストが提供され、useFlagsmith フックと useFlags フックを使用できるようになります。

 「フラッグスミス」 からフラッグスミスをインポート
'flagsmith/react' から{ FlagsmithProvider } をインポートします

エクスポート関数AppRoot (){
< FlagsmithProvider オプション={{
環境ID : "<YOUR_ENVIRONMENT_KEY>"
フラッグスミス= { フラッグスミス}>
{...}
</ フラッグスミスプロバイダー>
);

クライアントを初期化するには、Flagsmith プロバイダーにオプションを渡します。

ステップ2: useFlagsを使用して機能の値と有効化ステータスにアクセスする

FlagsmithProvider でラップされたコンポーネントは、useFlags を介して特性値、有効化ステータス、ユーザー特性を評価できるようになります。

 'flagsmith/react' から{ useFlags } をインポートします

エクスポート関数MyComponent (){
const flags = useFlags ([ 'font_size' ], [ 'example_trait' ]); // 指定されたフラグ/ 特性が変更された場合にのみ再レンダリングが発生します
戻る
< div クラス名= "アプリ" >
font_size : { flags .font_size .value }
example_trait : { flags .example_trait }
</div>
);
}

ステップ3: useFlagsmithを使用してFlagsmithインスタンスにアクセスする

FlagsmithProvider でラップされたコンポーネントは、useFlagsmith を介して Flagsmith インスタンスにアクセスできるようになります。

 'react' からReact をインポートします
'flagsmith/react' からuseFlagsuseFlagsmithインポートします
エクスポート関数MyComponent (){
const flags = useFlags ([ 'font_size' ], [ 'example_trait' ]); // 指定されたフラグ/ 特性が変更された場合にのみ再レンダリングが発生します
const flagsmith = useFlagsmith ();
定数識別= () => {
// ユーザー特性example_trait 持っている場合、またはfont_size 異なる特性値を持っている場合、コンポーネントレンダリングされます
flagsmith.identify ( 'flagsmith_sample_user' );
};
const ログアウト= () => {
// ユーザー特性example_trait 持っている場合、またはfont_size 異なる特性値を持っている場合、コンポーネントレンダリングされます
flagsmith.logout ();
};
戻る
< div クラス名= "アプリ" >
font_size : { flags .font_size ? .value }
example_trait : { flags .example_trait }
{ flagsmith .identity ? < button onClick ={ logout }> ログアウト</ button > : < button onClick ={ identify }> 識別</ button >}
</div>
);
}

これにより、Reactアプリケーションをリモートで制御できるようになります。Flagsmithの使用方法の詳細については、公式ドキュメント(https://docs.flagsmith.com)をご覧ください。