- どのように動作するか
- 特集フラグの作成
- ロールアウト戦略(レガシー)
- 機能フラグ戦略
- 特定の環境で機能フラグを無効にします。
- すべての環境で機能フラグを無効にします。
- 機能フラグとアプリケーションのインテグレーション
機能フラグ
GitLab 11.4で導入されました。
機能フラグを使用すると、アプリケーションの新機能を本番環境に小ロットでデプロイできます。 ユーザのサブセットに対して機能のオン/オフを切り替えることができ、継続的デリバリーの実現に役立ちます。 機能フラグを使用すると、管理されたテストを実施し、機能デリバリーと顧客ローンチを分離できるため、リスクを低減できます。
機能フラグのアクションの例については、GitLab forデプロイ、機能フラグ、エラートラッキングをご覧ください。
どのように動作するか
GitLabはUnleashという機能トグルサービスを使っています。
GitLabのフラグを有効にしたり無効にしたりすることで、アプリケーションはどの機能を有効にしたり無効にしたりするかを決めることができます。
GitLab で機能フラグを作成し、アプリケーションから API を使って機能フラグのリストとステータスを取得することができます。 アプリケーションが GitLab と通信できるように設定する必要があるので、互換性のあるクライアント・ライブラリを使い、アプリに機能フラグをインテグレーションするのは開発者次第です。
特集フラグの作成
機能フラグを作成し、有効にするには:
- プロジェクトのオペレーション>機能フラグに移動します。
- 新規機能フラグボタンをクリックします。
- 文字で始まり、小文字、数字、アンダースコア(
_
)、ダッシュ()の_
みを含み_
-
、ダッシュ(-
)またはアンダースコア(-
)で終わらない-
_
名前を入力してください。 - 説明を入力します(オプション、最大255文字)。
- フラグの適用方法の詳細を入力します:
- 機能フラグを作成」をクリックします。
リストの機能フラグの横にある{pencil}(edit)ボタンをクリックすると、これらの設定を変更できます。
ロールアウト戦略(レガシー)
GitLab 12.2で導入されました。
GitLab 13.0以前では、ロールアウト戦略の設定は、どのユーザーが機能を有効として体験するかに影響します。 機能を有効にするユーザーの割合を選択してください。 環境仕様が無効の場合、ロールアウト戦略は影響しません。
に設定できます:
- すべてのユーザー
-
ロールアウト率(ログインユーザー)
- オプションで、[追加のユーザーIDを含める]チェックボックスをクリックし、機能を有効にする特定のユーザーIDのリストを追加できます。
- ユーザーID
機能フラグ戦略
ストラテジーを何度も定義することなく、複数の環境に機能フラグストラテジーを適用できます。
GitLab Feature Flagsは機能フラグエンジンとしてUnleashを使用しています。 Unleashでは、機能フラグを細かく制御するためのストラテジーがあります。 GitLab Feature Flagsは複数のストラテジーを持つことができ、サポートされているストラテジーは以下の通りです:
ストラテジーは、機能フラグを作成するときに追加するか、または作成後に既存の機能フラグを編集するときに、オペレーション> 機能フラグに移動して{鉛筆}(編集)をクリックします。
すべてのユーザー
default
Unleash アクティベーション戦略を使用します。
ロールアウト率(ログインユーザー)
gradualRolloutUserId
Unleash アクティベーション戦略を使用します。
たとえば、認証されたユーザーの15%に対してこの機能を有効にするには、15%という値を設定します。
ロールアウトのパーセンテージは0%から100%まで。
ユーザーID
UnleashuserWithId
アクティベーション・ストラテジーを使用して実装されています。
ユーザーIDをカンマで区切った値のリストとして入力します。例えば、user@example.com, user2@example.com
、username1,username2,username3
などです。
リスト
GitLab 13.1で導入されました。
機能フラグユーザーリストAPIで作成されたユーザーリストの機能を有効にします。ユーザーIDと同様に、UnleashuserWithId
アクティベーションストラテジーを使用します。
機能フラグ戦略の有効化または無効化
この機能は開発中ですが、テストする準備はできています。デフォルトでは無効になっている機能フラグの後ろにデプロイされています。 GitLab RailsコンソールにアクセスできるGitLab管理者は、インスタンスでこの機能を有効にすることができます。
有効にするには:
Feature.enable(:feature_flags_new_version)
無効化するには:
Feature.disable(:feature_flags_new_version)
特定の環境で機能フラグを無効にします。
GitLab13.0以前では、特定の環境で機能フラグを無効にします:
- プロジェクトのオペレーション>機能フラグに移動します。
- 無効にしたい機能フラグで、鉛筆アイコンをクリックします。
- フラグを無効にするには
- GitLab 13.0以前の場合:環境のStatusトグルをスライドさせます。 または、環境スペックを削除するには、右側のRemove(X)アイコンをクリックします。
- GitLab 13.1以降では:適用される各ストラテジーについて、[Environments]で環境を削除してください。
- 変更を保存する]をクリックします。
すべての環境で機能フラグを無効にします。
すべての環境で機能フラグを無効にするには:
- プロジェクトのオペレーション>機能フラグに移動します。
- 無効にしたい機能フラグについて、StatusトグルをDisabledにスライドさせます。
機能フラグは「無効」タブに表示されます。
機能フラグとアプリケーションのインテグレーション
機能フラグをアプリケーションで使うには、GitLabからアクセス認証情報を取得します。 そして、クライアントライブラリを使ってアプリケーションを準備します。
アクセス認証情報の取得
アプリケーションがGitLabと通信するために必要なアクセス認証情報を取得します:
- プロジェクトのオペレーション>機能フラグに移動します。
-
Configure(設定)ボタンをクリックすると、以下のように表示されます:
- API URL:クライアント(アプリケーション)が機能フラグのリストを取得するために接続するURL。
- インスタンスID:機能フラグの検索を作成者に許可する一意のトークン。
-
アプリケーション名: 実行環境の名前。インスタンスンスンス、アプリケーションが本番サーバーで実行される場合、アプリケーション名は
production
などとなります。この値は環境仕様の評価に使用されます。
クライアントライブラリの選択
GitLabはUnleashクライアントと互換性のある単一のバックエンドを実装しています。
Unleashクライアントでは、開発者はアプリケーションコードでフラグのデフォルト値を定義することができます。 各機能フラグの評価では、提供された設定ファイルにフラグが存在しない場合に望ましい結果を表現することができます。
Unleashは現在、さまざまな言語やフレームワーク用のSDKを多数提供しています。
機能フラグ API情報
APIの内容については、こちらをご覧ください:
Golangアプリケーションの例
機能フラグをGolangアプリケーションにインテグレーションする例を示します:
package main
import (
"io"
"log"
"net/http"
"github.com/Unleash/unleash-client-go"
)
type metricsInterface struct {
}
func init() {
unleash.Initialize(
unleash.WithUrl("https://gitlab.com/api/v4/feature_flags/unleash/42"),
unleash.WithInstanceId("29QmjsW6KngPR5JNPMWx"),
unleash.WithAppName("production"),
unleash.WithListener(&metricsInterface{}),
)
}
func helloServer(w http.ResponseWriter, req *http.Request) {
if unleash.IsEnabled("my_feature_name") {
io.WriteString(w, "Feature enabled\n")
} else {
io.WriteString(w, "hello, world!\n")
}
}
func main() {
http.HandleFunc("/", helloServer)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Rubyアプリケーションの例
機能フラグをRubyアプリケーションにインテグレーションする例を示します。
Unleashクライアントには、パーセントロールアウト(ログインユーザー)ロールアウト戦略またはターゲットユーザーのリストで使用するためのユーザーIDが与えられます。
#!/usr/bin/env ruby
require 'unleash'
require 'unleash/context'
unleash = Unleash::Client.new({
url: 'http://gitlab.com/api/v4/feature_flags/unleash/42',
app_name: 'production',
instance_id: '29QmjsW6KngPR5JNPMWx'
})
unleash_context = Unleash::Context.new
# Replace "123" with the id of an authenticated user.
# Note that the context's user id must be a string:
# https://unleash.github.io/docs/unleash_context
unleash_context.user_id = "123"
if unleash.is_enabled?("my_feature_name", unleash_context)
puts "Feature enabled"
else
puts "hello, world!"
end