CEL を使用したターゲット フラグ

Common Expression Language(CEL)は、高度なルールベースのフラグ評価のロジックを提供します。論理演算子を使用して複数のユーザー属性またはリクエスト属性を組み合わせることで、正確なターゲティング ルールを作成できます。

このガイドでは、CEL ルールを使用してフラグを定義し、評価仕様を更新する方法について説明します。

前提条件

始める前に、次のものを用意してください。

  1. 機能フラグのデプロイのクイックスタートを完了している。
  2. App Lifecycle Manager リソースを管理するように構成された gcloud 環境。

論理演算子と構文

CEL は、複雑な条件を作成するための標準の論理演算子をサポートしています。

  • && 論理 AND
  • || 論理 OR
  • ! 論理 NOT
  • in リストに値が存在するかどうかを確認する

属性を定義する

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_IDUNIT_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)です。

次のステップ