
GO機能フラグを使用している場合は、採用リストに自分自身を追加することを検討してください。
この単純な行為は、プロジェクトの可視性と信頼性を大幅に向上させ、その進歩に大きく貢献しています。あなたが私をサポートし、機能フラグに行きたい場合は、スポンサーになることもできます。
Go Featureフラグは、シンプルで完全な機能フラグの実装を提供する軽量でオープンソースソリューションです。
このソリューションは、可能な限り簡単なセットアップを使用して、コード内の機能フラグの使用を容易にするために構築されています。
もともと、 GO機能フラグは、 GO言語専用のソリューションとして設計されていました。 OpenFeatureプロジェクトによる機能フラグの新しい標準化により、ソリューションは、ホストできるリレープロキシと呼ばれる単純なAPIサーバーを介して複数の言語(サポート言語のリスト)で利用できるようになりました。
ヒント
機能フラグに慣れていない場合は、機能フラグが反復サイクルを固定できる理由を説明する記事を書きました。
HTTP 、 S3 、 Kubernetes 、完全なリストを参照)。JSON 、 TOML 、 YAML )。S3 、 Google cloud storage 、 file 、完全なリストを参照)などのさまざまな目的地にエクスポートします。webhookとslack ) 。このデモのコードはexamples/demoリポジトリで入手できます。
重要
Go機能フラグの使用を開始する前に、オープン機能SDKを使用するか、GO機能フラグをGOモジュールとして使用するかどうかを決定する必要があります。
中央フラグ管理および評価ソリューションにリレーポロキシを使用することをお勧めします。これにより、多言語サポートが可能になり、オープン機能SDKとシームレスに統合できます。
これは、GO機能フラグを最大限に活用するための最良の方法です。
プロジェクトがGOのみである場合、GOモジュールはオプションです。 GOコードで直接フラグ評価を実行します。
最初のフラグ構成を含む新しいYAMLファイルを作成します。
# 20% of the users will use the variation "my-new-feature"
test-flag :
variations :
my-new-feature : true
my-old-feature : false
defaultRule :
percentage :
my-new-feature : 20
my-old-feature : 80このフラグは、このフラグの使用法を分割し、20%はmy-new-featureバリエーションと80%のバリエーションをmy-old-feature使用します。
リレープロキシの構成を含む新しいYAMLファイルを作成します。
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : logまた、リレープロキシをローカルに実行して、APIを利用可能にします。
デフォルトのポートは1031になります。
# Launch the container
docker run
-p 1031:1031
-v $( pwd ) /flag-config.yaml:/goff/flag-config.yaml
-v $( pwd ) /goff-proxy.yaml:/goff/goff-proxy.yaml
gofeatureflag/go-feature-flag:latest
Dockerを使用してリレープロキシをインストールしたくない場合は、他の方法に従ってドキュメントにインストールできます。
この例では、 nodejs SDKを使用していますが、ここで他の言語を確認できます。
npm i @openfeature/server-sdk @openfeature/go-feature-flag-providerアプリの初期化では、オープン機能SDKを使用してクライアントを作成して初期化する必要があります。
const { OpenFeature } = require ( "@openfeature/server-sdk" ) ;
const { GoFeatureFlagProvider } = require ( "@openfeature/go-feature-flag-provider" ) ;
// init Open Feature SDK with GO Feature Flag provider
const goFeatureFlagProvider = new GoFeatureFlagProvider ( {
endpoint : 'http://localhost:1031/' // DNS of your instance of relay proxy
} ) ;
OpenFeature . setProvider ( goFeatureFlagProvider ) ;
const featureFlagClient = OpenFeature . getClient ( 'my-app' ) これで、このクライアントを使用してコードのどこにでもフラグを評価できます。
// Context of your flag evaluation.
// With GO Feature Flag you MUST provide a targetingKey that is a unique identifier of the user.
const evaluationContext = {
targetingKey : '1d1b9238-2591-4a47-94cf-d2bc080892f1' , // user unique identifier (mandatory)
firstname : 'john' ,
lastname : 'doe' ,
email : '[email protected]' ,
admin : true , // this field is used in the targeting rule of the flag "flag-only-for-admin"
// ...
} ;
const adminFlag = await featureFlagClient . getBooleanValue ( 'flag-only-for-admin' , false , evaluationContext ) ;
if ( adminFlag ) {
// flag "flag-only-for-admin" is true for the user
console . log ( "new feature" ) ;
} else {
// flag "flag-only-for-admin" is false for the user
}go get github.com/thomaspoignant/go-feature-flag最初のフラグ構成を含む新しいYAMLファイルを作成します。
# 20% of the users will use the variation "my-new-feature"
test-flag :
variations :
my-new-feature : true
my-old-feature : false
defaultRule :
percentage :
my-new-feature : 20
my-old-feature : 80このフラグは、このフラグの使用法を分割し、20%はmy-new-featureバリエーションと80%のバリエーションをmy-old-feature使用します。
まず、バックエンドファイルの場所でffclient初期化する必要があります。
err := ffclient . Init (ffclient. Config {
PollingInterval : 3 * time . Second ,
Retriever : & fileretriever. Retriever {
Path : "flag-config.goff.yaml" ,
},
})
defer ffclient . Close ()この例は、ローカルコンピューターからファイルをロードし、3秒ごとにフラグを更新します(PollingIntervalを省略すると、デフォルト値は60秒です)。
ℹ情報
これは、ローカルでテストするための基本的な構成です。本番環境では、リモートの場所を使用して機能フラグ構成ファイルを保存することをお勧めします。
ストアの利用可能なオプションのリストをご覧ください。機能フラグファイルページをご覧ください。
これで、コードのどこでもフラグを評価できます。
user := ffcontext . NewEvaluationContext ( "user-unique-key" )
hasFlag , _ := ffclient . BoolVariation ( "test-flag" , user , false )
if hasFlag {
// flag "test-flag" is true for the user
} else {
// flag "test-flag" is false for the user
}完全なドキュメントは、https://docs.gofeatureflag.orgで入手できます
例/ディレクトリで、より多くの例を見つけることができます。
もともとは、Golangのみのライブラリになるように構築されていましたが、エコシステムを制限しすぎています。
より多くの言語と互換性があるため、GO機能フラッグリレープロキシを実装しました。これは、フラグを評価するためにAPIを提供するホストができるサービスであり、HTTPを使用してバリエーションを取得することができます。
また、標準化を信じているため、選択した言語でこのAPIと対話するためにOpenFeatureプロバイダーを実装しています。
(OpenFeatureはまだ初期段階にあるため、すべての言語がサポートされているわけではなく、将来のいくつかの変更を期待しています)
今のところ、次のプロバイダーがあります。
| 言語 | プロバイダーソース | バージョン |
|---|---|---|
| 行く | GOプロバイダー | |
| Java / Kotlin(サーバー) | Javaプロバイダー | |
| Android / Kotlin(クライアント) | Kotlinプロバイダー | |
| javascript/typescript(サーバー) | サーバープロバイダー | |
| JavaScript/TypeScript(クライアント) | クライアントプロバイダー | |
| Python | Pythonプロバイダー | |
| 。ネット | .NETプロバイダー | |
| ルビー | Rubyプロバイダー | |
| 迅速 | Swiftプロバイダー | |
| Php | PHPプロバイダー |
モジュールは、フラグファイルを取得するさまざまな方法をサポートしています。
利用可能なレトリバーは次のとおりです。
完全なリストと詳細を参照してください。
Go Feature Flag Core機能は、すべての機能フラグを単一のファイルに集中させ、バックエンドサーバーのホスティングと維持を避けることです。
ファイルは、フラグのリストを備えたYAML 、 JSON 、またはTOMLファイルでなければなりません(例: YAML 、 JSON 、 TOML ) 。
構成ファイルを作成する最も簡単な方法は、https://editor.gofeatureflag.orgで利用可能なGo機能フラグエディターを使用することです。
手動でやりたい場合は、以下の指示に従ってください。
フラグ構成は次のようになります:
# This is your configuration for your first flag
first-flag :
variations : # All possible return value for your feature flag
A : false
B : true
targeting : # If you want to target a subset of your users in particular
- query : key eq "random-key"
percentage :
A : 0
B : 100
defaultRule : # When no targeting match we use the defaultRule
variation : A
# A second example of a flag configuration
second-flag :
variations :
A : " valueA "
B : " valueB "
defaultValue : " a default value "
targeting :
- name : notkey_rule
query : key eq "not-a-key"
percentage :
A : 10
B : 90
defaultRule :
variation : defaultValue
version : " 12 "
experimentation :
start : 2021-03-20T00:00:00.1-05:00
end : 2021-03-21T00:00:00.1-05:00{
"first-flag" : {
"variations" : {
"A" : false ,
"B" : true
},
"targeting" : [
{
"query" : " key eq " random-key " " ,
"percentage" : {
"A" : 0 ,
"B" : 100
}
}
],
"defaultRule" : {
"variation" : " A "
}
},
"second-flag" : {
"variations" : {
"A" : " valueA " ,
"B" : " valueB " ,
"defaultValue" : " a default value "
},
"targeting" : [
{
"name" : " notkey_rule " ,
"query" : " key eq " not-a-key " " ,
"percentage" : {
"A" : 10 ,
"B" : 90
}
}
],
"defaultRule" : {
"variation" : " defaultValue "
},
"version" : " 12 " ,
"experimentation" : {
"start" : " 2021-03-20T05:00:00.100Z " ,
"end" : " 2021-03-21T05:00:00.100Z "
}
}
}[ first-flag . variations ]
A = false
B = true
[[ first-flag . targeting ]]
query = ' key eq "random-key" '
[ first-flag . targeting . percentage ]
A = 0
B = 100
[ first-flag . defaultRule ]
variation = " A "
[ second-flag ]
version = " 12 "
[ second-flag . variations ]
A = " valueA "
B = " valueB "
defaultValue = " a default value "
[[ second-flag . targeting ]]
name = " notkey_rule "
query = ' key eq "not-a-key" '
[ second-flag . targeting . percentage ]
A = 10
B = 90
[ second-flag . defaultRule ]
variation = " defaultValue "
[ second-flag . experimentation ]
start = 2021-03-20T05:00:00.100Z
end = 2021-03-21T05:00:00.100Zフラグを作成するために必要なフィールドの詳細については、ドキュメントを参照してください。
クエリ形式はnikunjy/rules Libraryに基づいています。
すべての操作は、大文字または小文字で記述できます(例: eqまたはEQを使用できます)。
サポートされている論理操作は、 AND OR
式とその定義を比較します( a|b 、2つのaまたはbのいずれかを使用できることを意味します):
eq|==: equals to
ne|!=: not equals to
lt|<: less than
gt|>: greater than
le|<=: less than equal to
ge|>=: greater than equal to
co: contains
sw: starts with
ew: ends with
in: in a list
pr: present
not: not of a logical expression
key eq "[email protected]"anonymous ne trueuserId eq "12345" フィーチャフラグシステムの評価コンテキストは、機能フラグ評価の出力を決定するために重要です。これは、評価が行われている条件に関する適切なデータのコレクションです。このデータは、静的情報(サーバー名、IPなど)と動的な入力(アクションを実行するユーザーに関する情報など)の組み合わせと、プログラムの実行を通じて暗黙的に伝達される状態情報を介して提供できます。
Go機能フラグを使用する場合、さまざまなユーザーのエクスペリエンスをパーソナライズする必要があることがよくあります。これは、ターゲティングキーの概念が登場する場所です。ターゲティングキーは、評価のコンテキスト(電子メール、セッションID、指紋、または一貫性のあるもの)を表す一意の識別子であり、複数の訪問やセッションでも、同じ機能のバリエーションに一貫してさらされるようにします。
たとえば、GO機能フラグにより、ターゲットキーに基づいて機能がユーザーのパーセンテージに展開されている場合、機能フラグに遭遇するたびに同じバリエーションが表示されます。
ターゲティングキーは、特定のユーザーにどの機能バリアントが提供されるかの決定に直接影響し、時間の経過とともにその継続性を維持するため、評価コンテキストの基本的な部分です。そのためには、フラグがこの評価コンテキストに適用できるかどうかを定義するハッシュを行うための機能フラグを実行します。
可能であれば、ハッシュを使用することをお勧めします。
機能フラグのターゲティングとロールアウトはすべて、評価コールに渡すユーザーによって決定されます。
場合によっては、同じチーム内のユーザーが同じフラグのバリエーションにさらされ、一貫したエクスペリエンスを得るように、異なるキー( teamIdなど)に基づいてユーザーをバケツでバケツする必要がある場合があります。
これは、フラグ構成でbucketingKeyフィールドを定義することで実現できます。存在する場合、 bucketingKeyに対応する値は属性から抽出され、 targetingKeyの代わりにハッシュして結果を決定するために使用される値が抽出されます。
バリエーションは、機能フラグで可能な異なる値です。
Go Featureフラグは、単なるboolean値以上のものを管理できます。フラグの値は、次のタイプのいずれかにすることができます。
boolintfloatstringjson arrayjson object Boolean result = featureFlagClient . getBooleanValue ( "your.feature.key" , false , userContext );
// this example is using the java SDK
// result is now true or false depending on the setting of this boolean feature flagバリエーションメソッド機能フラグキー、評価コンテキスト、およびデフォルト値を使用します。
なぜデフォルト値が必要なのですか?フラグの評価中にエラーが発生した場合、デフォルト値を返します。常に関数から値リターンを取得し、エラーをスローすることはありません。
この例では、フラグがyour.feature.keyが存在しない場合、結果はfalseになります。
結果は常に使用可能な値を提供することに注意してください。
すべての新機能リリースの重要な部分は、製品、エンジニアリング、マーケティングチームの間の実際の起動スケジュールを調整することです。
強力なユーザーエクスペリエンスを提供するには、通常、ソフトウェアチームが複雑なリリースを管理し、不便な時期に手動の更新を行う必要があります。
ただし、複雑なロールアウト戦略を使用すると、フラグのライフサイクルを持つことができます。
フラグが変更されたときに通知されたい場合は、 notifierを構成できます。
Notifierは、ターゲットシステムに1つの通知を送信して、新しいフラグ構成がロードされていることを通知します。
Go Featureフラグは、一度に複数の通知者を処理できます。
利用可能な通知者は次のとおりです。
Go Featureフラグを使用すると、フラグの使用に関するデータをエクスポートできます。
すべてのバリエーションイベントを収集し、これらのイベントをいくつかの場所で保存できます。
現在、機能イベントのみをサポートしています。
これは、個々のフラグ評価を表し、「完全な忠実度」イベントと見なされます。
以下の機能イベントの例:
{
"kind" : " feature " ,
"contextKind" : " anonymousUser " ,
"userKey" : " ABCD " ,
"creationDate" : 1618228297 ,
"key" : " test-flag " ,
"variation" : " Default " ,
"value" : false ,
"default" : false ,
"source" : " SERVER "
}データの形式については、ドキュメントで説明されています。イベントが収集され、輸出国のスパムを避けるために大量に送信されます。
コマンドラインツールを使用できます。構成ファイルの糸くず:Go-Feature-Flag-Lintを使用できます。
このプロジェクトは、コミュニティからの貢献を歓迎します。貢献に興味がある場合は、いくつかの役立つヒントについては、寄稿者のガイドを参照してください。
みんなの声が重要であるため、コミュニティから返事をしたいからです。
このため、私たちは2週間ごとにコミュニティミーティングを開始しており、Go機能フラグの未来について話し合い、潜在能力を最大限に活用するのに最適な場所です。
| 名前 | 会議時間 | 会議メモ | 議論 |
|---|---|---|---|
| Feature Flag Community Meetingに行きます | 隔週の木曜日の午前10:00 at / 16:00 cet | Google Doc | VCリンク(会う) |
貢献者に感謝します。
スポンサーになり、フィーチャーフラグに行くためのサポートを示します。
これらは私たちの本当にクールなスポンサーです!

go-feature-flagを使用している場合は、このリストに会社の名前を含めることをお勧めします。この単純な行為は、プロジェクトの可視性と信頼性を大幅に向上させ、その進歩に大きく貢献しています。そうするために、親切に採用者に自分自身を追加してください。
採用者のリストは次のとおりです。