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
Intent as Code
shoppingjaws
6
1k
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
Jetpack Compose メカニズム
skydoves
0
420
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
240
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
「新人AI禁止のその先へ ― 参加と協働のステップアップ」Vibe TOKYO, AI & CRAFT / 2026年8月21日
kentarowada
0
100
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.4k
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
270
iOSDC2026登壇資料.pdf
riofujimon
0
160
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
100
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Believing is Seeing
oripsolob
1
220
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
540
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Navigating Team Friction
lara
192
16k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Making the Leap to Tech Lead
cromwellryan
135
10k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
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