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
88
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
Feature Flag 開発を標準化し、加速させる OpenFeature を導入する
satohjohn
3
2k
ADK Java が出たので AI Agent を作ろう
satohjohn
0
73
NotebookLM + Agentspace を使った(開発)体験
satohjohn
1
660
Workforce Identity を使った 権限管理で Cloud Run を動かしてみた
satohjohn
0
490
Gemini + Vertex AI を使って作業を自動化「していく」
satohjohn
0
81
Cloud_Run_GPU___Gemma_2_を使った_LLM_アプリケーション開発のススメ.pdf
satohjohn
0
32
Firebase Authenticationのセッション管理術
satohjohn
2
2.4k
お客様とすすめる_フロントエンドの技術支援.pdf
satohjohn
1
1.1k
コンテナ環境のKotlinアプリケーション を運用しよう _ Google Cloudを使って
satohjohn
0
170
Other Decks in Programming
See All in Programming
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
250
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
400
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
0
150
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
500
AIともっと楽するE2Eテスト
myohei
8
3k
20250708_JAWS_opscdk
takuyay0ne
2
130
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
2
210
The Niche of CDK Grant オブジェクトって何者?/the-niche-of-cdk-what-isgrant-object
hassaku63
1
620
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
CDK引数設計道場100本ノック
badmintoncryer
2
480
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
3
980
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
760
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
The Pragmatic Product Professional
lauravandoore
35
6.7k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Docker and Python
trallard
45
3.5k
Why Our Code Smells
bkeepers
PRO
337
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Agile that works and the tools we love
rasmusluckow
329
21k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Writing Fast Ruby
sferik
628
62k
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.