はじめに
flagd
v0.16.0(コミット80b9e95) で検証済み。コマンドは Docker とローカルシェルを想定。
前提
- Docker (公開イメージは
ghcr.io/open-feature/flagd)。 - 評価 service 用 (
8013) と OFREP 用 (8016) のローカルポートが空いていること。 - OFREP REST エンドポイントを試すための
curl。
インストール
最も簡単なのはコンテナイメージで、ビルド手順は不要だ (6)。
bash
docker pull ghcr.io/open-feature/flagd:latestソースからビルドする場合、リポジトリは Go workspace と Makefile を使う (make build で flagd バイナリを生成) (1)。
最初の動く構成
カレントディレクトリに flag 定義ファイル
flags.jsonを書く。stateで flag を有効化し、variantsが取りうる値を並べ、defaultVariantが targeting にマッチしないときに返る。json{ "flags": { "show-welcome-banner": { "state": "ENABLED", "variants": { "on": true, "off": false }, "defaultVariant": "off" } } }ファイルをマウントし、
file:sync ソースとして渡して flagd を起動する。flag のデフォルトポートは8013(評価)・8014(management)・8015(gRPC sync)・8016(OFREP) (flagd/cmd/start.go:53-56)。bashdocker run --rm -it \ -p 8013:8013 -p 8016:8016 \ -v "$(pwd)":/etc/flagd \ ghcr.io/open-feature/flagd:latest \ start --uri file:/etc/flagd/flags.jsonOFREP (REST 評価 API) で flag を評価する。空のコンテキストは targeting 入力なしで評価する。
bashcurl -X POST http://localhost:8016/ofrep/v1/evaluate/flags/show-welcome-banner \ -H 'Content-Type: application/json' \ -d '{"context": {}}'
応答には解決された値と理由が入る。targeting ルールが無ければ理由は STATIC で、値は defaultVariant だ (core/pkg/evaluator/json.go:420)。
動作確認
- 上の OFREP 呼び出しは
offvariant の値 (false) を理由STATICで返すはず。 - flag に
targetingの JSONLogic ルールを足し、マッチするコンテキストで再評価すると、理由はTARGETING_MATCHに変わる (core/pkg/evaluator/json.go:401-406)。 - 無効な flag (
"state": "DISABLED") は理由DISABLEDを返す (core/pkg/evaluator/json.go:349-352)。
次に読むもの
- ファイル以外の sync ソース (HTTP / Kubernetes CRD / gRPC / blob ストレージ) と、サイドカー注入用の OpenFeature Operator は flagd ドキュメントへ (1)(12)。
- 生の OFREP ではなく provider 経由でアプリコードから flagd を呼ぶには OpenFeature SDK を使う (5)。
- TLS・OpenTelemetry エクスポート・ファンアウト用の flagd-proxy など本番運用は公式ドキュメントへ (1)(12)。