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
iOSDC20200921: Feature Flagを適切に分類することでA/Bテストの運用...
Search
Takeshi Ihara
September 21, 2020
Programming
1.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOSDC20200921: Feature Flagを適切に分類することでA/Bテストの運用コストを下げる
https://fortee.jp/iosdc-japan-2020/proposal/cfd5bd01-c940-42e6-b06c-66edf3bef6f8
Takeshi Ihara
September 21, 2020
More Decks by Takeshi Ihara
See All by Takeshi Ihara
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装
nonchalant
3
6.4k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装 with 発表ノート
nonchalant
2
650
Sign In with Apple
nonchalant
1
2.5k
iOSDC RejectCon 20180915: Factoryの自動生成によりテストを書きやすくする
nonchalant
1
760
iOSDC 20180902: 小さくはじめる端末管理
nonchalant
2
1k
devsap 20180728: コード生成のススメ
nonchalant
0
150
potatotips #50: iOSは自動生成の夢を見るか?
nonchalant
0
2k
try! Swift Tokyo 2018: Best Docker Container in Swift
nonchalant
1
1.4k
Otemachi.swift x Kyobashi.swift #02: Vapor + ProtocolBuffers + DockerでServer Side Swift入門
nonchalant
1
370
Other Decks in Programming
See All in Programming
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
3
1.2k
AWSに止められる覚悟してますか?
morizo_1984
2
500
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
140
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
410
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
440
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
680
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
470
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
260
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
320
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
We Are The Robots
honzajavorek
0
380
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
How to Ace a Technical Interview
jacobian
280
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Transcript
Feature FlagΛదʹྨ͢Δ ͜ͱͰA/Bςετͷӡ༻ίετ ΛԼ͛Δ iOSDC 2020 2020/09/21 Takeshi Ihara (ABEMA)
A/Bςετ ίϯςϯπ৴ܕαʔϏεʹ͓͍ͯɺ৽ػೳͷϦϦʔεͷࡍɺKPIͷม Խ͕৽ػೳʹΑΔӨڹ͔ίϯςϯπʹΑΔӨڹ͔ͷ۠ผ͕ࠔ ৽ػೳͷޮՌଌఆͷਫ਼্ͷͨΊɺ৽ػೳͷ༗ແҎ֎ͷཁҼΛۃྗഉ আ͢Δ͜ͱ͕Ͱ͖ΔA/Bςετ͕༻͍ΒΕΔ
ABEMAʹ͓͚Δ৽ػೳͷA/Bςετ • ৽ػೳͷදࣔͷΓସ͑ͷΈ • ϦϦʔεͷલʹଌఆࢦඪͱωΫετΞΫγϣϯΛࡦఆ A. ৽ػೳͷImp/Click (= දࣔ/ར༻) B.
ؔ࿈ػೳͷImp/Click C. ࢹௌ࣌ؒࢹௌຊ (KPI)
Feature Flag • ίʔυ্ͰಛఆػೳͷදࣔͷΓସ͑ʹ༻͍ΒΕΔ • Feature Toggle, Feature SwitchͱݺΕΔ •
ཧαʔϏεͷྫ A. Firebase A/B Testing B. Launch Darkly
A/Bςετ + Feature Flagͷεςʔλεཧ • A/Bςετͷ = Feature Flagͷ͕૿͍͑ͯ͘ʹैͬͯɺ֤A/Bςε τʹΑΔίʔυ্ͷذʹΑΓঢ়ଶͷ͕ංେԽ͍ͯ͘͠
• A/Bςετ + Feature FlagͷεςʔλεΛཧ͠ͳ͍ͱɺະ࣮ࢪͷA/ Bςετ͕ຊ൪ʹ࿐ग़ͨ͠ΓɺݕূࡁͷA/Bςετ͕ίʔυ্ʹΓ ଓ͚Δ͕ൃੜ͠͏Δ
https://martinfowler.com/articles/feature-toggles.html Feature toggles can be categorized across two major dimensions:
how long the feature toggle will live and how dynamic the toggling decision must be.
Feature Flagͷྨ (ΫϥΠΞϯτ) • Release Flag • Ops Flag •
Permission Flag • Experiment Flag
Release Flag • ຊ൪ڥͰܾͯ͠༗ޮʹͳΒͳ͍࣮தະςετͷػೳʹରͯ͠ͷ Feature Flag • τϥϯΫϕʔε։ൃͱ૬ੑ͕ྑ͍ • ੜଘظؒ)
͍ • มߋن) খ ~ த • ྫ) ։ൃதͷ৽ػೳ
Ops Flag • γεςϜͷಈ࡞Λ੍ޚ͢ΔͨΊͷFeature Flag • ੜଘظؒ) ͍ • มߋن)
খ ~ த • ྫ) ಈըϓϨΠϠʔͷΤϥʔ࣌ͷϦτϥΠִؒ
Permission Flag • ಛఆͷϢʔβʔ͕ड͚औΔػೳମݧΛมߋ͢ΔFeature Flag • ੜଘظؒ) ͍ • มߋن)
େ • ྫ) VoiceOverͷମݧ্ͷͨΊͷϢʔβʔςετ
Experiment Flag • ύϑΥʔϚϯεଌఆA/BςετͷͨΊͷFeature Flag • ੜଘظؒ) ͍ • มߋن)
த ~ େ • ྫ) ϦϦʔεࡁΈͷ৽ػೳ
ੜଘظؒ มߋن 3FMFBTF'MBH &YQFSJNFOU'MBH 0QT'MBH 1FSNJTTJPO 'MBH
Code of Feature Flag enum FeatureFlag<Value> { case release(id: String,
defaultValue: Value) case ops(id: String, defaultValue: Value) case permission(id: String, defaultValue: Value) case experiment(id: String, defaultValue: Value) var value: Value { #if DEBUG_MENU // DEBUGϝχϡʔͰઃఆ͞Ε͕ͨ͋Εฦ٫͢Δ #endif if case let .release(_, defaultValue) = self { return defaultValue } else { // ཧπʔϧ͔Βऔಘ͕ͨ͋͠Εฦ٫͢Δɺͳ͚Ε defaultValueΛฦ٫͢Δ } } } ΫϥΠΞϯτଆͰͷ࣮
·ͱΊ • ΫϥΠΞϯτଆͰFeature FlagΛ4छྨʹྨ A. ཧπʔϧʹґଘ͠ͳ͍ B. ຊ൪ڥͰͷ։ൃ్தͷ࿐ग़Λ͛Δ • ఆظతʹFeature
Flagͷ୨Է͕͠ඞཁ C. ߴස) Release Flag, Experiment Flag D. ස) Ops Flag, Permission Flag