|
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' からuseFlagsとuseFlagsmithをインポートします。 エクスポート関数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)をご覧ください。 |