安全なリリースに向けた技術的アプローチ

 安全なリリースに向けた技術的アプローチ

大規模な新機能のリリース時に利用した段階的リリースの実装パターンの紹介をします。

B5ea40fde5be980a112c4ea58ad3bd39?s=128

ShoheiMitani

July 18, 2019
Tweet

Transcript

  1. Re:valua t ion https://fril.jp/ L ead & Delight User F

    irst Ownership Fail Smart ҆શͳϦϦʔεʹ޲͚ٕͨज़తΞϓϩʔν
  2. None
  3. 3BLVNB4FSWJDF%FWFMPQNFOU(SPVQ 3BLVUFO JOD   ࡾ୩ণฏ !TIPIFJ !4IPIFJ.JUBOJ

  4.   "HFOEB w ҆શͳϦϦʔεͬͯʁʁ w ࠷ۙϦϦʔεͨ͠ػೳͷ࿩ w ةݥͳϦϦʔεΛ๷͙ͨΊʹ w

    'FBUVSF5PHHMFT w 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ w 'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ w 'FBUVSF5PHHMFTͷσϝϦοτ w ·ͱΊ
  5. ҆શͳϦϦʔεͬͯʁʁ  

  6.   ҆શͳϦϦʔεͬͯʁʁ ਺ඦߦd਺ઍߦͷมߋΛҰ౓ʹNBTUFSʹNFSHF

  7.   ҆શͳϦϦʔεͬͯʁʁ ಈ࡞֬ೝςετΛਓͷΤϯδχΞ͔ͯ͠͠ͳ͍

  8.   ҆શͳϦϦʔεͬͯʁʁ ϦϦʔεޙʹ୭΋؂ࢹ͠ͳ͍

  9.   ҆શͳϦϦʔεͬͯʁʁ

  10.   ࠷ۙϦϦʔεͨ͠ػೳͷ࿩ w ܾࡁʹ৽͍͠ࢧ෷͍ΦϓγϣϯΛ௥Ճ w ෆਖ਼ରࡦ౳ͷपลػೳ΋௥Ճ w ։ൃظؒɺ໿೥ؒ w

    ࠷ऴతʹे਺໊΄ͲͷΤϯδχΞ͕։ൃʹࢀՃ w dճఔ౓ϦϦʔε w ෼ʹ਺ेສԁͷ͓͕ۚྲྀ௨͢ΔαʔϏε
  11.   ࠷ۙϦϦʔεͨ͠ػೳͷ࿩

  12.   w ػೳΛࡉ͔͍୯ҐͰϦϦʔε͠ w ϦϦʔεޙͷ؂ࢹΛଵΒͣ w ໰୊͕ൃੜͨ͠Β௚͙ʹ3PMMCBDL ةݥͳϦϦʔεΛ๷͙ͨΊʹ

  13.   Feature Toggles

  14.   'FBUVSF5PHHMFT 'FBUVSF5PHHMJOHJTBTFUPGQBUUFSOTXIJDIDBO IFMQBUFBNUPEFMJWFSOFXGVODUJPOBMJUZUPVTFST SBQJEMZCVUTBGFMZ IUUQTNBSUJOGPXMFSDPNBSUJDMFTGFBUVSFUPHHMFTIUNM0QT5PHHMFT

  15.   ؆୯ʹݴ͏ͱʜ ৽چͷػೳΛ'MBHͷ0/0''Ͱ੾Γସ͑ΕΔΑ͏ʹ͢Δ ࣮૷ύλʔϯͷҰͭ 'FBUVSF5PHHMFT if Fril::FeatureToggles.v2_variation('sample_key', current_user, false)

    # new_function else # existing_function end
  16.   ϥΫϚͷ'MBHͷछྨ w Ϣʔβʔ*%ͷ຤ඌܻϕʔεͰஈ֊ެ։ d  w ϥϯμϜͳ֬཰Ͱͷެ։ w

    ࢦఆͨ͠Ϣʔβʔ*%ϝʔϧΞυϨεͰͷެ։ ্هΛ؅ཧը໘͔Βࢦఆ͠ɺ೚ҙͷൣғͰػೳͷެ։Մೳ 'FBUVSF5PHHMFT
  17.   '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 ྫ ը໘ʹ৽͍͠จݴɾϘοΫεΛ௥Ճ ྫ طଘͷॲཧʹ৽͍͠ॲཧΛ௥Ճ
  18.   w ։ൃதͷػೳΛNBTUFSʹNFSHFͰ͖Δ w ϦϦʔε࣌ʹେྔͷࠩ෼ΛNFSHF͢Δඞཁ͕ͳ͘ͳΔ w ଞͷνʔϜͷΤϯδχΞ͕ػೳΛ஌Γɺཧղ͢Δ͜ͱ͕Մೳ w %&745(Ͱৗʹಈ࡞֬ೝ͕Մೳ

    w ຊ൪؀ڥͰطଘػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ։ൃ؀ڥͰ৽نػೳ͕ಈ࡞͢Δ͜ͱ͕୲อ w ෆ۩߹ΛૣظʹൃݟՄೳ w ஈ֊తެ։ʹΑͬͯ෦ͷϢʔβʔʹ͔͠Өڹ͕ग़ͳ͍ w ؅ཧը໘͔ΒػೳΛ0''ʹͰ͖Δ w ಈ࡞͕୲อ͞Ε͍ͯΔػೳʹ௚͙ʹ໭͢͜ͱ͕Մೳ 'FBUVSF5PHHMFT͕ղܾͯ͘͠ΕΔ͜ͱ
  19. 'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ  

  20.   'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ଞΤϯδχΞ͕࣮૷࣌ʹҙࣝͰ͖Δ w %&745(؀ڥͰ͸ৗʹ0/ঢ়ଶʹ͓ͯ͘͠ w ଞҊ݅Ͱؔ࿈ػೳʹมߋ͕͋ͬͨ৔߹ʹɺίʔυϕʔ εͰӨڹൣғΛ֬ೝͰ͖Δ w

    ผͷCSBODIͰ։ൃ͍ͯ͠Δͱؾ͚ͮͳ͍
  21.   'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁ౓ʹԠͯ͡LFZͷ෼ׂԽͱϦϦʔεॱংΛܾఆ ϦϦʔε͍ͨ͠ػೳ ػೳ$ ʢ໨ۄػೳͷ௥Ճʣ ػೳ" ʢόοΫάϥ΢ϯυʣ ػೳ#

    ʢσβΠϯมߋʣ LFZͷ෼͚ํͰ෼ׂͷڥքΛܾΊΒΕΔͷͰɺҊ݅ͷঢ়گʹԠͨ͡෼ׂൣғͷมߋ͕༰қ
  22.   'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ػೳͷॏཁ౓ʹԠͯ͡LFZͷ෼ׂԽͱϦϦʔεॱংΛܾఆ ػೳ$ ʢ໨ۄػೳͷ௥Ճʣ ػೳ" ʢόοΫάϥ΢ϯυʣ ػೳ# ʢσβΠϯͷมߋʣ

    ˠˠ ˠˠ ˠˠ ෼ׂͯ͠ϦϦʔε͢Δ͜ͱͰɺτϥϒϧͷӨڹΛ࠷খԽ
  23.   'FBUVSF5PHHMFTΛར༻ͯ͠Α͔ͬͨͱࢥ͏ͱ͜Ζ ϦϦʔεલʹνʔϜ಺Ͱຊ൪Ϧϋʔαϧ w ϦϦʔεͷिؒલ͘Β͍ʹ࣮ࢪ w ؀ڥґଘͷ໰୊ͷνΣοΫ w ৽نʹߏஙͨ͠ωοτϫʔΫ

    w ຊ൪༻ͷ"1*,FZͰಈ࡞νΣοΫ w ϦϦʔε࣌ͷखॱΛࣄલʹ࣮ࢪՄೳ
  24.   'FBUVSF5PHHMFTͷσϝϦοτ w ίʔυ͕Ԛ͘ͳΓ͕ͪ w ద౓ͳϦϑΝΫλϦϯά͕ඞཁ w ΰϛ͕࢒Γଓ͚Δ w

    ϦϦʔε͕Λ௒͑ͨΒίʔυΛফ͢श׳͕ඞཁ w ςετ߲໨͕૿͑Δ w ϦάϨογϣϯςετ͕࠷΋ॏཁ
  25. ·ͱΊ  

  26.   ·ͱΊ ҆શʹϦϦʔε͢ΔͨΊʹɺ'FBUVSF5PHHMFT͸༗ޮͳखஈ w ສ͕Ұͷ3PMMCBDLखॱ͕ϑϨʔϜϫʔΫͱ͠ ͯ૊Έࠐ·Ε͍ͯΔ w े෼ͳಈ࡞֬ೝΛ͢ΔػձΛ࡞ΕΔ w

    ϦϦʔεखॱʹϦεΫϔοδ͕૊Έࠐ·Εͯ ͍Δ͜ͱ͕಺֎ͷؔ܎ऀʹઆ໌Մೳ w ͦΕʹΑΓɺ։ൃνʔϜ͕ਫ਼ਆతʹ҆ఆ͠ɺ ػೳͷ։ൃมߋΛڪΕͳ͘ͳΔ
  27. ੵۃ࠾༻தʂ