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
安全なリリースに向けた技術的アプローチ
Search
ShoheiMitani
July 18, 2019
Programming
560
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
安全なリリースに向けた技術的アプローチ
大規模な新機能のリリース時に利用した段階的リリースの実装パターンの紹介をします。
ShoheiMitani
July 18, 2019
More Decks by ShoheiMitani
See All by ShoheiMitani
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
1.3k
スーパーマンに頼らない"分権型組織"で作る強い開発チーム
shoheimitani
11
13k
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.5k
プロポーザルに込める段取り八分
shoheimitani
4
1.6k
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
16
19k
2重リクエスト完全攻略HANDBOOK / Double Request Handbook
shoheimitani
10
13k
AIの全社活用を推進するための安全なレールを敷いた話
shoheimitani
3
1.6k
The Citadel
shoheimitani
0
260
Rails-ishなActiveRecordの操作方法
shoheimitani
0
270
Other Decks in Programming
See All in Programming
Android CLI
fornewid
0
220
「人を評価する AI」の設計と実装
ryoyanara
0
220
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
340
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
330
yield再入門 #phpcon
o0h
PRO
0
1.2k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
430
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
Google Apps Script で Ruby を動かす
kawahara
0
280
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
130
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.7k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
350
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
450
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
RailsConf 2023
tenderlove
30
1.5k
HDC tutorial
michielstock
2
790
The Curse of the Amulet
leimatthew05
2
14k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
My Coaching Mixtape
mlcsv
0
250
Optimizing for Happiness
mojombo
378
71k
BBQ
matthewcrist
89
10k
Transcript
Re:valua t ion https://fril.jp/ L ead & Delight User F
irst Ownership Fail Smart ҆શͳϦϦʔεʹ͚ٕͨज़తΞϓϩʔν
None
3BLVNB4FSWJDF%FWFMPQNFOU(SPVQ 3BLVUFO JOD ࡾ୩ণฏ !TIPIFJ !4IPIFJ.JUBOJ
"HFOEB w ҆શͳϦϦʔεͬͯʁʁ w ࠷ۙϦϦʔεͨ͠ػೳͷ w ةݥͳϦϦʔεΛ͙ͨΊʹ w
'FBUVSF5PHHMFT w 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ w 'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ w 'FBUVSF5PHHMFTͷσϝϦοτ w ·ͱΊ
҆શͳϦϦʔεͬͯʁʁ
҆શͳϦϦʔεͬͯʁʁ ඦߦdઍߦͷมߋΛҰʹNBTUFSʹNFSHF
҆શͳϦϦʔεͬͯʁʁ ಈ࡞֬ೝςετΛਓͷΤϯδχΞ͔ͯ͠͠ͳ͍
҆શͳϦϦʔεͬͯʁʁ ϦϦʔεޙʹ୭ࢹ͠ͳ͍
҆શͳϦϦʔεͬͯʁʁ
࠷ۙϦϦʔεͨ͠ػೳͷ w ܾࡁʹ৽͍͠ࢧ͍ΦϓγϣϯΛՃ w ෆਖ਼ରࡦͷपลػೳՃ w ։ൃظؒɺؒ w
࠷ऴతʹे໊΄ͲͷΤϯδχΞ͕։ൃʹࢀՃ w dճఔϦϦʔε w ʹेສԁͷ͓͕ۚྲྀ௨͢ΔαʔϏε
࠷ۙϦϦʔεͨ͠ػೳͷ
w ػೳΛࡉ͔͍୯ҐͰϦϦʔε͠ w ϦϦʔεޙͷࢹΛଵΒͣ w ͕ൃੜͨ͠Β͙ʹ3PMMCBDL ةݥͳϦϦʔεΛ͙ͨΊʹ
Feature Toggles
'FBUVSF5PHHMFT 'FBUVSF5PHHMJOHJTBTFUPGQBUUFSOTXIJDIDBO IFMQBUFBNUPEFMJWFSOFXGVODUJPOBMJUZUPVTFST SBQJEMZCVUTBGFMZ IUUQTNBSUJOGPXMFSDPNBSUJDMFTGFBUVSFUPHHMFTIUNM0QT5PHHMFT
؆୯ʹݴ͏ͱʜ ৽چͷػೳΛ'MBHͷ0/0''ͰΓସ͑ΕΔΑ͏ʹ͢Δ ࣮ύλʔϯͷҰͭ 'FBUVSF5PHHMFT if Fril::FeatureToggles.v2_variation('sample_key', current_user, false)
# new_function else # existing_function end
ϥΫϚͷ'MBHͷछྨ w Ϣʔβʔ*%ͷඌܻϕʔεͰஈ֊ެ։ d w ϥϯμϜͳ֬Ͱͷެ։ w
ࢦఆͨ͠Ϣʔβʔ*%ϝʔϧΞυϨεͰͷެ։ ্هΛཧը໘͔Βࢦఆ͠ɺҙͷൣғͰػೳͷެ։Մೳ 'FBUVSF5PHHMFT
'FBUVSF5PHHMFT6TFDBTF <% if Fril::FeatureToggles.v2_variation(‘sample_key’, @current_user, false) %> <div
class="setting-box"> <p class=“new_function__text">৽ػೳΛ͝ར༻͍͚ͨͩ·͢ɻ</p> <p class="small-text"> <%= link_to '࣍ਐΉ', hoge_path, class: 'btn btn-primary btn-confirmation' %> </p> </div> <% end %> def pay_something amount_check use_balance use_point use_coupon if Fril::FeatureToggles.v2_variation(‘sample_key’, buyer, false) purchase end ྫ ը໘ʹ৽͍͠จݴɾϘοΫεΛՃ ྫ طଘͷॲཧʹ৽͍͠ॲཧΛՃ
w ։ൃதͷػೳΛNBTUFSʹNFSHFͰ͖Δ w ϦϦʔε࣌ʹେྔͷࠩΛNFSHF͢Δඞཁ͕ͳ͘ͳΔ w ଞͷνʔϜͷΤϯδχΞ͕ػೳΛΓɺཧղ͢Δ͜ͱ͕Մೳ w %&745(Ͱৗʹಈ࡞֬ೝ͕Մೳ
w ຊ൪ڥͰطଘػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ։ൃڥͰ৽نػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ෆ۩߹ΛૣظʹൃݟՄೳ w ஈ֊తެ։ʹΑͬͯ෦ͷϢʔβʔʹ͔͠Өڹ͕ग़ͳ͍ w ཧը໘͔ΒػೳΛ0''ʹͰ͖Δ w ಈ࡞͕୲อ͞Ε͍ͯΔػೳʹ͙ʹ͢͜ͱ͕Մೳ 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ଞΤϯδχΞ͕࣮࣌ʹҙࣝͰ͖Δ w %&745(ڥͰৗʹ0/ঢ়ଶʹ͓ͯ͘͠ w ଞҊ݅Ͱؔ࿈ػೳʹมߋ͕͋ͬͨ߹ʹɺίʔυϕʔ εͰӨڹൣғΛ֬ೝͰ͖Δ w
ผͷCSBODIͰ։ൃ͍ͯ͠Δͱؾ͚ͮͳ͍
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁʹԠͯ͡LFZͷׂԽͱϦϦʔεॱংΛܾఆ ϦϦʔε͍ͨ͠ػೳ ػೳ$ ʢۄػೳͷՃʣ ػೳ" ʢόοΫάϥϯυʣ ػೳ#
ʢσβΠϯมߋʣ LFZͷ͚ํͰׂͷڥքΛܾΊΒΕΔͷͰɺҊ݅ͷঢ়گʹԠׂͨ͡ൣғͷมߋ͕༰қ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁʹԠͯ͡LFZͷׂԽͱϦϦʔεॱংΛܾఆ ػೳ$ ʢۄػೳͷՃʣ ػೳ" ʢόοΫάϥϯυʣ ػೳ# ʢσβΠϯͷมߋʣ
ˠˠ ˠˠ ˠˠ ׂͯ͠ϦϦʔε͢Δ͜ͱͰɺτϥϒϧͷӨڹΛ࠷খԽ
'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ϦϦʔεલʹνʔϜͰຊ൪Ϧϋʔαϧ w ϦϦʔεͷिؒલ͘Β͍ʹ࣮ࢪ w ڥґଘͷͷνΣοΫ w ৽نʹߏஙͨ͠ωοτϫʔΫ
w ຊ൪༻ͷ"1*,FZͰಈ࡞νΣοΫ w ϦϦʔε࣌ͷखॱΛࣄલʹ࣮ࢪՄೳ
'FBUVSF5PHHMFTͷσϝϦοτ w ίʔυ͕Ԛ͘ͳΓ͕ͪ w దͳϦϑΝΫλϦϯά͕ඞཁ w ΰϛ͕Γଓ͚Δ w
ϦϦʔε͕Λ͑ͨΒίʔυΛফ͢श׳͕ඞཁ w ςετ߲͕૿͑Δ w ϦάϨογϣϯςετ͕࠷ॏཁ
·ͱΊ
·ͱΊ ҆શʹϦϦʔε͢ΔͨΊʹɺ'FBUVSF5PHHMFT༗ޮͳखஈ w ສ͕Ұͷ3PMMCBDLखॱ͕ϑϨʔϜϫʔΫͱ͠ ͯΈࠐ·Ε͍ͯΔ w ेͳಈ࡞֬ೝΛ͢ΔػձΛ࡞ΕΔ w
ϦϦʔεखॱʹϦεΫϔοδ͕Έࠐ·Εͯ ͍Δ͜ͱ͕֎ͷؔऀʹઆ໌Մೳ w ͦΕʹΑΓɺ։ൃνʔϜ͕ਫ਼ਆతʹ҆ఆ͠ɺ ػೳͷ։ൃมߋΛڪΕͳ͘ͳΔ
ੵۃ࠾༻தʂ