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
iOSDC20200921: Feature Flagを適切に分類することでA/Bテストの運用...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
640
Sign In with Apple
nonchalant
1
2.5k
iOSDC RejectCon 20180915: Factoryの自動生成によりテストを書きやすくする
nonchalant
1
750
iOSDC 20180902: 小さくはじめる端末管理
nonchalant
2
1k
devsap 20180728: コード生成のススメ
nonchalant
0
140
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
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
210
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
180
Press start. Python's next generation.
willingc
PRO
3
130
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
440
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
210
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
390
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
490
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
160
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
120
AIの中の人になってみる
htkym
0
120
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
500
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
A Soul's Torment
seathinner
6
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
From π to Pie charts
rasagy
0
320
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
What's in a price? How to price your products and services
michaelherold
247
13k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Visualization
eitanlees
152
17k
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