Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Open Feature 面白いぞ
Search
SatohJohn
February 19, 2025
Programming
0
96
Open Feature 面白いぞ
Jagu'e'r Cloud Native ハイブリッド Meetup# 17 の 5分LT の発表の内容です
SatohJohn
February 19, 2025
Tweet
Share
More Decks by SatohJohn
See All by SatohJohn
検索システムにおけるセキュリティ
satohjohn
0
50
Feature Flag 開発を標準化し、加速させる OpenFeature を導入する
satohjohn
3
2.2k
ADK Java が出たので AI Agent を作ろう
satohjohn
0
140
NotebookLM + Agentspace を使った(開発)体験
satohjohn
1
760
Workforce Identity を使った 権限管理で Cloud Run を動かしてみた
satohjohn
0
650
Gemini + Vertex AI を使って作業を自動化「していく」
satohjohn
0
97
Cloud_Run_GPU___Gemma_2_を使った_LLM_アプリケーション開発のススメ.pdf
satohjohn
0
35
Firebase Authenticationのセッション管理術
satohjohn
2
2.5k
お客様とすすめる_フロントエンドの技術支援.pdf
satohjohn
1
1.2k
Other Decks in Programming
See All in Programming
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
440
CSC305 Lecture 01
javiergs
PRO
1
380
Swift Concurrency - 状態監視の罠
objectiveaudio
2
420
メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
kwzr
1
740
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
220
iOSDC.pdf
chronos2500
2
650
大規模アプリのDIフレームワーク刷新戦略 ~過去最大規模の並行開発を止めずにアプリ全体に導入するまで~
mot_techtalk
0
340
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
140
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
220
大規模アプリにおけるXcode Previews実用化までの道のり
ikesyo
0
990
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
160
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
140
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1371
200k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
How GitHub (no longer) Works
holman
315
140k
How to Ace a Technical Interview
jacobian
280
23k
Visualization
eitanlees
148
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Raft: Consensus for Rubyists
vanstee
139
7.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Bash Introduction
62gerente
615
210k
Transcript
Open Feature面白いぞ Jagu'e'r Cloud Native ハイブリッド Meetup# 17 株式会社スリーシェイク 佐藤慧太
Copyright © 3-shake, Inc. All Rights Reserved.
自己紹介 佐藤 慧太@SatohJohn • 2012/4 フリュー株式会社 入社 ToC 向けのアプリケーション開発を 10年ほど経験
リードエンジニアとして 0からサービスを 設計開発運用を経験 • 2023/1 株式会社スリーシェイク 入社 SRE として労苦 <Toil>を減らす仕事に従事 Google Cloud Partner Top Engineer ’24、’25 生成 AI とかやってます
What’s Open Feature 01 Copyright © 3-shake, Inc. All Rights
Reserved.
そもそも Feature Flag について 1. Trunk ベース開発など高速なリリースにおける痛みを和らげる a. AB テスト、カナリアテストのように切り替える
b. kill スイッチのように特定の機能を無効化する c. チェックができておらずマージできない など 2. Permission のようなパラメータ管理 https://speakerdeck.com/biwashi/cloudnative-days-summer-2024-declarative-aggregated-management-of -feature-flags-using-openfeature-and-auto-generation OpenFeatureと自動生成を活用したフィーチャーフラグの宣言的集約管理
Open Feature について 1. ベンダー中立性 a. Provider で抽象化(ConfigCat、など) 2. Feature
Flag について標準化 a. Spec をまとめて新しい Provider の作成に役立てる 3. 様々な言語での実装 https://openfeature.dev/
HotoUse(Flag Evaluation) 1. Flagd Provider 2. Node.js services: server: build:
./app environment: NODE_ENV: production FLAGD_HOST: flagd PORT: 3333 ports: - 3333:3333 flagd: image: ghcr.io/open-feature/flagd:latest volumes: - type: bind source: ./flagd/flags.flagd.json target: /etc/flagd/flags.flagd.json ports: - 8013:8013 command: ["start", "--uri", "file:/etc/flagd/flags.flagd.json"]
HotoUse(Flag Evaluation) 1. Flagd Provider 2. Node.js { "flags": {
"welcome-message": { "variants": { "on": true, "off": false }, "state": "ENABLED", "defaultVariant": "on" } } } • Flagd がファイルを watch し続けているのでdefault value を変更すると アプリケーションでも変更が伝わる • Variants に無いものを設定するとエラーになるがアプリケーション側では 前回の値になっている • このあたりのエラー状態については、 https://openfeature.dev/specification/sections/events#requirement-535 https://flagd.dev/reference/monitoring/
HotoUse(Flag Evaluation) 1. Flagd Provider 2. Node.js import express from
"express"; import Router from "express-promise-router"; import { OpenFeature } from "@openfeature/server-sdk"; import { FlagdProvider } from "@openfeature/flagd-provider"; OpenFeature.setProvider(new FlagdProvider({ host: process.env.FLAGD_HOST || "localhost" })); const client = OpenFeature.getClient(); const app = express(); const routes = Router(); app.use((_, res, next) => { res.setHeader("content-type", "text/plain"); next(); }, routes); routes.get("/", async (_, res) => { const showWelcomeMessage = await client.getBooleanValue( "welcome-message", false ); if (showWelcomeMessage) { res.send("Express + TypeScript + OpenFeature Server"); } else { res.send("Express + TypeScript Server"); } }); const port = process.env.PORT || 3333; app.listen(port, () => { console.log(`Server running at http://localhost:${port}`); }); https://openfeature.dev/specification/sections/flag-eval uation/
HotoUse(GKE) apiVersion: core.openfeature.dev/v1beta1 kind: FeatureFlag metadata: name: flags labels: app:
open-feature spec: flagSpec: flags: welcome-message: state: ENABLED variants: 'on': true 'off': false defaultVariant: 'off' --- # Feature flag source custom resource, configuring flagd to source flags from FeatureFlag CRDs apiVersion: core.openfeature.dev/v1beta1 kind: FeatureFlagSource metadata: name: flag-sources labels: app: open-feature spec: sources: - source: flags provider: kubernetes 1. GKE 2. K8s operator
HotoUse(GKE) # Deployment of a app using our custom resources
apiVersion: apps/v1 kind: Deployment metadata: name: open-feature-deployment labels: app: open-feature spec: replicas: 1 selector: matchLabels: app: open-feature template: metadata: labels: app: open-feature annotations: openfeature.dev/enabled: 'true' openfeature.dev/featureflagsource: 'flag-sources' spec: containers: 1. GKE 2. K8s operator
HotoUse(Tracking) 1. Devcycle (Flagd では未実装っぽい) 2. Node.js const devcycleClient =
initializeDevCycle("id") OpenFeature.setProviderAndWait(await devcycleClient.getOpenFeatureProvider()); client.track("welcomemessage_trackingid", context); https://openfeature.dev/specification/sections/flag-eval uation/
Provider の自作 • Providerの 仕様 にしたがって メソッドを記載していくと 作れる • Firebase
Remote Config 周りで挑戦してみても 良いかもしれない https://openfeature.dev/specification/ class MyProvider implements Provider { readonly hooks: Hook[] = [new MyProviderHook()]; void initialize(EvaluationContext initialContext) { /* A hypothetical initialization function: make an initial call doing some bulk initial evaluation, start a worker to do periodic updates */ this.flagCache = this.restClient.bulkEvaluate(initialContext); this.startPolling(); } getProviderHooks(): Hook[] { return [new MyProviderHook()]; } void dispose() { // close connections, terminate threads or timers, etc... } /** * Record a tracking event. */ void track(String trackingEventName, EvaluationContext context, TrackingEventDetails details): void; }
まとめ 1. Feature Flag を使っているプロジェクトであれば使っていくのは良さそう a. いろんなプロジェクトがあって困るみたいなときに良さそう b. ちょっと Provider
作れないかなーという感じ 2. Tracking がサポートされている Provider が少ないので作って! 作るかー!
Thank you Copyright © 3-shake, Inc. All Rights Reserved.