Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Open Feature 面白いぞ
Search
SatohJohn
February 19, 2025
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Open Feature 面白いぞ
Jagu'e'r Cloud Native ハイブリッド Meetup# 17 の 5分LT の発表の内容です
SatohJohn
February 19, 2025
More Decks by SatohJohn
See All by SatohJohn
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
240
Claude Codeで評価を楽にする
satohjohn
0
120
A2UI という光を覗いてみる
satohjohn
1
250
_Architecture_Modernization_から学ぶ現状理解から設計への道のり.pdf
satohjohn
2
1.3k
アーキテクチャモダナイゼーションを実現する組織
satohjohn
1
1.7k
Vertex_AI_Searchを使いこなす実践テクニック
satohjohn
1
310
アーキテクチャモダナイゼーションの書籍紹介
satohjohn
0
87
NVIDIA NeMo Agent Tooklit を使ってみた
satohjohn
0
180
Gemini Enterprise を恐れない - Securityと監査-
satohjohn
0
240
Other Decks in Programming
See All in Programming
Verilogで学ぶCPU自作入門
uyuki234
8
4k
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
460
ジョジョの世界をXRで再現する
mofurune
0
140
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
210
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
21
21k
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
450
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Side Projects
sachag
456
43k
How GitHub (no longer) Works
holman
316
150k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Test your architecture with Archunit
thirion
2
2.4k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Automating Front-end Workflow
addyosmani
1369
210k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
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.