Common Expression Language(CEL)は、高度なルールベースのフラグ評価のロジックを提供します。論理演算子を使用して複数のユーザー属性またはリクエスト属性を組み合わせることで、正確なターゲティング ルールを作成できます。
このガイドでは、CEL ルールを使用してフラグを定義し、評価仕様を更新する方法について説明します。
前提条件
始める前に、次のものを用意してください。
- 機能フラグのデプロイのクイックスタートを完了している。
- App Lifecycle Manager リソースを管理するように構成された
gcloud環境。
論理演算子と構文
CEL は、複雑な条件を作成するための標準の論理演算子をサポートしています。
&&論理 AND||論理 OR!論理 NOTinリストに値が存在するかどうかを確認する
属性を定義する
CEL 属性は、ブール式内で使用され、セキュリティ ポリシーやルーティング ポリシーを定義する特定のデータポイント(source.ip、リクエスト ヘッダー、パスなど)です。
CEL 条件で使用される属性は、EvaluationSpec の属性配列で明示的に定義してリストする必要があります。属性が条件で使用されているが、リストにない場合、API はリクエストを拒否します。
属性を作成する
App Lifecycle Manager を使用して CEL 属性を作成できます。
プラン属性を作成するには、次のコマンドを実行します。
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
国属性を作成するには、次のコマンドを実行します。
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
プラットフォーム属性を作成するには、次のコマンドを実行します。
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
CEL ルールを使用してフラグを構成する
フラグを作成または更新するときに、evaluation-spec で評価ロジックを定義します。
たとえば、このスニペットは、ドイツのプレミアム ユーザーがモバイルアプリを使用している場合に機能を有効にします。
gcloud beta app-lifecycle-manager flags create "advanced-reporting-flag" \
--key="advanced-reporting-flag" \
--flag-value-type=BOOL \
--unit-kind="UNIT_KIND_NAME" \
--location=global \
--evaluation-spec='{
"rules": [{
"id": "premium_mobile_users_in_germany",
"condition": "plan == \"premium\" && country == \"DE\" && platform == \"mobile\"",
"target": "enabled"
}],
"defaultTarget": "disabled",
"attributes": [
"projects/PROJECT_ID/locations/global/flagAttributes/plan-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/country-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/platform-attr"
]
}'
PROJECT_ID と UNIT_KIND_NAME は、実際の値に置き換えてください。
アプリケーションの統合
アプリケーションは、実行時に属性を評価コンテキストに挿入する必要があります。
Python の例:
from openfeature.evaluation_context import EvaluationContext
eval_ctx = EvaluationContext(
targeting_key=user_id,
attributes={
"plan": "premium",
"country": "DE",
"platform": "mobile"
}
)
is_enabled = client.get_boolean_value("advanced-reporting-flag", False, eval_ctx)
ベスト プラクティス
- 評価の順序: ルールは順番に評価されます。最初に true と評価されたルールによって、フラグの値が決まります。
- 安全なデフォルト: ユーザー コンテキストに条件の必須属性がない場合、評価エンジンはその特定のルールをスキップします。
- 文字数上限: CEL 式の最大サイズは 4,096 バイト(4 KB)です。
次のステップ
- マルチテナント アーキテクチャについて学習する。
- テストと A/B テストについて学習します。