Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift Concurrency時代のリアクティブプログラミングの基礎理解

Swift Concurrency時代のリアクティブプログラミングの基礎理解

ばんじゅん🍓
PRO

September 11, 2022
Tweet

More Decks by ばんじゅん🍓

Other Decks in Programming

Transcript

  1. Swift Concurrency࣌୅ͷ
 ϦΞΫςΟϒϓϩάϥϛϯάͷجૅཧղ iOSDC Japan 2022 גࣜձࣾZOZO ςοΫϦʔυ ͹Μ͡ΎΜ! /

    @banjun Copyright © ZOZO, Inc.
  2. © ZOZO, Inc. 2 גࣜձࣾZOZO ςοΫϦʔυ ZOZOTOWN iOS ͹Μ͡ΎΜ! /

    @banjun -PWF-JWFS NBD04 $SFBUF-JWF1IPUPTGSPN.PWJFT 'MJDL4,, J04 +BQBOFTF$VTUPN,FZCPBSE&YUFOTJPO ݸਓϓϩδΣΫτɾ1PEDBTU ͖ͷ͜ΔΤϑΤϜX!USFCZ͖ͷ͜Δ
  3. © ZOZO, Inc. https://zozo.jp/ 3 • ϑΝογϣϯEC • 1,500Ҏ্ͷγϣοϓɺ8,500Ҏ্ͷϒϥϯυͷऔΓѻ͍ •

    ৗ࣌90ສ఺Ҏ্ͷ঎඼ΞΠςϜ਺ͱຖ೔ฏۉ2,600఺Ҏ্ͷ৽ண
 ঎඼Λܝࡌʢ2022೥6݄຤࣌఺ʣ • ϒϥϯυݹணͷϑΝογϣϯκʔϯʮZOZOUSEDʯ΍ ίεϝઐ໳ϞʔϧʮZOZOCOSMEʯɺۺͷઐ໳Ϟʔϧ ʮZOZOSHOESʯɺϥάδϡΞϦʔˍσβΠφʔζκʔϯ ʮZOZOVILLAʯΛల։ • ଈ೔഑ૹαʔϏε • ΪϑτϥοϐϯάαʔϏε • πέ෷͍ ͳͲ
  4. © ZOZO, Inc.

  5. جૅγϦʔζ΁Α͏ͦ͜

  6. © ZOZO, Inc. 6 جૅγϦʔζ΁Α͏ͦ͜ ʮجૅʯͬͯ "ͳΜ͔؆୯ͦ͏ͩ͠ྑͦ͞͏ #ͳΜ͔ාͦ͏

  7. © ZOZO, Inc. 7 جૅγϦʔζ΁Α͏ͦ͜ ;0;0Ͱ͸ʮجૅʯʮΑ͘Θ͔Δʯ γϦʔζͷࣾ಺ษڧձΛ΍ͬͯ·͢ $ϓϩμΫτͷण໋͸ϥΠϒϥϦ ΍ύϥμΠϜͷण໋ΑΓ௕͍ %ৗʹਖ਼ղͷʮٕज़બఆʯ͕͋Δ

    Θ͚͡Όͳ͍
  8. جૅ Ԡ༻ Ԡ༻ Ԡ༻ Ԡ ༻

  9. Ԡ༻ Ԡ༻ Ԡ༻ Ԡ ༻ جૅ جૅ جૅ جૅ جૅ

    جૅ جૅ جૅ جૅ جૅ
  10. جૅ جૅ جૅ جૅ جૅ جૅ جૅ جૅ جૅ جૅ

    Ԡ༻ Ԡ༻ Ԡ༻ Ԡ ༻
  11. ࠓ೔͸ ϦΞΫςΟϒϓϩάϥϛϯά(RP) ͱ Swift Concurrency

  12. © ZOZO, Inc. 12 ࣌୅എܠͱղܾ͍ͨ͠՝୊ 4XJGUͰJ04ΞϓϦΛॻ͚ΔΑ͏ʹͳͬͨ ઃܭύλʔϯ͕ྲྀߦΓɺ31 ϦΞΫςΟϒϓϩάϥϛϯά ΋ ྲྀߦͬͨ

    4XJGU6*ͱ$PNCJOF͕ग़ͨ 4XJGU$PODVSSFODZ͕ग़ͨ Θͨͨͪ͠͸Ͳ͜΁޲͔͑͹͍͍ͷ͔ʁ    
  13. © ZOZO, Inc. 13 ϦΞΫςΟϒϓϩάϥϛϯά(RP)ͱ
 Swift Concurrency 4XJGU$PODVSSFODZ ϦΞΫςΟϒϓϩάϥϛϯά ඇಉظϓϩάϥϛϯά

    σʔλετϦʔϜ ϥΠϒϥϦͰ͋Δ ݴޠͰ͋Δ ʮ͍ΘΏΔRPʯΛ ࣮ݱ͍ͨ͠ ฒߦॲཧΛ࣮ݱ͍ͨ͠ ڞ௨఺
  14. © ZOZO, Inc. 14 ʮ͍ΘΏΔRPʯ ※͝஫ҙ 31ͷࢦ͢΋ͷ͸ॾઆ͋ΔͷͰɺ͜ͷεϥΠυͰ͸ɺΈͳ͞Μ͕J04 ΞϓϦΛ࡞Δͷʹ࢖͏Α͏ͳ΋ͷΛʮ͍ΘΏΔ31ʯ·ͨ͸୯ʹ ʮ31ʯͱݴ͍·͢ɻ ͍ΘΏΔRP

    ϦΞΫςΟϒϓϩάϥϛϯά (ҰൠͷRPؚΉ) FRP ଞͷRP Functional Reactive Programming iOSΞϓϦΛ࡞Δͱ͖ʹ ࢖͏RP αʔόαΠυ Ϋϥ΢υ ͱ͔
  15. © ZOZO, Inc. 15 ʮ͍ΘΏΔRPʯ ※͝஫ҙ ͍ΘΏΔ31Ͱ͸ɺ6*͕ͦ͜31Λ࢖͏ཧ༝ͷத৺ͱͳΔͱ͍͏ಛ௃͕ ͋Δ ͜ΕΒΛܨ͙ &6*

    &ωοτϫʔΫ &ଞʹ΋ɺηϯαʔɾΧϝϥɾपลػثͳͲͳͲ
  16. RPͱपลͷؔ࿈ͷ੔ཧ & ݱঢ়ͱաڈͷ͢Γ͋Θͤ

  17. © ZOZO, Inc. 17 RPؔ࿈ਤ ......ྩ࿨4೥࠷৽൛(งғؾ) struct, class, var, didSet,

    closure, property wrapper, … Swiftجຊػೳ async/await, AsyncStream, … Swift Concurrency swift-async-algorithms, AsyncChannel, … ඇಉظϓϩάϥϛϯά ReactiveSwift RxSwift Combine + UIͷΞμϓλ RPϥΠϒϥϦ ·ͩͳ͍? RPϥΠϒϥϦ (iOSΞϓϦ޲͚) RP (Ұൠ) ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά RP (iOSΞϓϦ)
  18. © ZOZO, Inc. 18 RPؔ࿈ਤ ......Swift ConcurrencyҎલ struct, class, var,

    didSet, closure, property wrapper, … Swiftجຊػೳ ඇಉظϓϩάϥϛϯά ReactiveSwift, RxSwift, Combine + UIͷΞμϓλ RPϥΠϒϥϦ RP (iOSΞϓϦ) RPϥΠϒϥϦΛඇಉظ༻్Ͱ ࢖͍ͬͯΔέʔε ͨͩͷඇಉظ completion handlerͱ͔ ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά MVVMͷܨ͗ͱ͔ completionͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...?
  19. © ZOZO, Inc. 19 RPؔ࿈ਤ ......Swift ConcurrencyҎ߱Ͳ͏ม͑Δ͔ struct, class, var,

    didSet, closure, property wrapper, … Swiftجຊػೳ async/await, AsyncStream, … Swift Concurrency ඇಉظϓϩάϥϛϯά ReactiveSwift, RxSwift, Combine + UIͷΞμϓλ RPϥΠϒϥϦ RP (iOSΞϓϦ) RPϥΠϒϥϦΛඇಉظ༻్Ͱ ࢖͍ͬͯΔέʔε ͨͩͷඇಉظ ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά MVVMͷܨ͗ͱ͔ async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...? Swift ConcurrencyΛ ࢖ͬͨ΄͏͕ ྑͦ͞͏ ͦͷ·· RPϥΠϒϥϦΛ ࢖͏ͱྑͦ͞͏
  20. © ZOZO, Inc. 20 struct, class, var, didSet, closure, property

    wrapper, … Swiftجຊػೳ async/await, AsyncStream, … Swift Concurrency ඇಉظϓϩάϥϛϯά ReactiveSwift, RxSwift, Combine + UIͷΞμϓλ RPϥΠϒϥϦ RP (iOSΞϓϦ) RPϥΠϒϥϦΛඇಉظ༻్Ͱ ࢖͍ͬͯΔέʔε ͨͩͷඇಉظ ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά MVVMͷܨ͗ͱ͔ async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...? Swift ConcurrencyΛ ࢖ͬͨ΄͏͕ ྑͦ͞͏ ͦͷ·· RPϥΠϒϥϦΛ ࢖͏ͱྑͦ͞͏ ͍ΘΏΔRPͷ෦෼΁
  21. UIͱσʔλϑϩʔ

  22. © ZOZO, Inc. 22 σʔλϑϩʔ 31Ͱ͸6*ΛؚΉσʔλϑϩʔΛ੩తʹهड़ ͢Δͷ͕໨త ྫӈͷؔ܎Λ੩తʹهड़͍ͨ͠ 31ͷͳ͍4XJGUͰ͸ɺʮ͜ΕΛ࠶ܭࢉ͢ Δʯ໋ྩจ͕ඞཁ

    ੩తʹॻ͚ͳ͍ ͜ͷྫ: https://reactivecocoa.io/philosophy.html in in out A = B + C var a: Int var b: Int { didSet { a = b + c } } var c: Int { didSet { a = b + c } }
  23. © ZOZO, Inc. 23 ໋ྩతͱ͔એݴతͱ͔ એݴతͷྨٛޠ ੩త ͦΕͬΆ͍ྫ "VUP-BZPVU $PEBCMFͰ"1*

    ϦΞΫςΟϒϓϩάϥϛϯά ໋ྩతͷྨٛޠ ಈతɾखଓత ͦΕͬΆ͍ྫ खಈϨΠΞ΢τv.frame = ... ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42 खͰσʔλߋ৽updateState(); updateUI()
  24. © ZOZO, Inc. એݴతͷྨٛޠ ੩త ͦΕͬΆ͍ྫ "VUP-BZPVU $PEBCMFͰ"1* ϦΞΫςΟϒϓϩάϥϛϯά ໋ྩతͷྨٛޠ

    ಈతɾखଓత ͦΕͬΆ͍ྫ खಈϨΠΞ΢τv.frame = ... ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42 खͰσʔλߋ৽updateState(); updateUI() 24 ઐ໳ಛԽ ඼࣭Αͦ͞͏ ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍ ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ ͍ͭͰ΋ྗٕͰॻ͚Δ ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏ ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘ ͯ΋ͳΜͱ͔ॻ͚ͦ͏ ʮ࢓༷ɾઃܭʯʹ͍ۙهड़ ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ ໋ྩతͱ͔એݴతͱ͔
  25. © ZOZO, Inc. એݴతͷྨٛޠ ੩త ͦΕͬΆ͍ྫ "VUP-BZPVU $PEBCMFͰ"1* ϦΞΫςΟϒϓϩάϥϛϯά ໋ྩతͷྨٛޠ

    ಈతɾखଓత ͦΕͬΆ͍ྫ खಈϨΠΞ΢τv.frame = ... ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42 खͰσʔλߋ৽updateState(); updateUI() 25 ઐ໳ಛԽ ඼࣭Αͦ͞͏ ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍ ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ ͍ͭͰ΋ྗٕͰॻ͚Δ ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏ ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘ ͯ΋ͳΜͱ͔ॻ͚ͦ͏ ʮ࢓༷ɾઃܭʯʹ͍ۙهड़ ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ ໋ྩతͱ͔એݴతͱ͔
  26. © ZOZO, Inc. એݴతͷྨٛޠ ੩త ͦΕͬΆ͍ྫ "VUP-BZPVU $PEBCMFͰ"1* ϦΞΫςΟϒϓϩάϥϛϯά ໋ྩతͷྨٛޠ

    ಈతɾखଓత ͦΕͬΆ͍ྫ खಈϨΠΞ΢τv.frame = ... ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42 खͰσʔλߋ৽updateState(); updateUI() 26 ઐ໳ಛԽ ඼࣭Αͦ͞͏ ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍ ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ ͍ͭͰ΋ྗٕͰॻ͚Δ ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏ ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘ ͯ΋ͳΜͱ͔ॻ͚ͦ͏ ʮ࢓༷ɾઃܭʯʹ͍ۙهड़ ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ ໋ྩతͱ͔એݴతͱ͔
  27. © ZOZO, Inc. એݴతͷྨٛޠ ੩త ͦΕͬΆ͍ྫ "VUP-BZPVU $PEBCMFͰ"1* ϦΞΫςΟϒϓϩάϥϛϯά ໋ྩతͷྨٛޠ

    ಈతɾखଓత ͦΕͬΆ͍ྫ खಈϨΠΞ΢τv.frame = ... ࣙॻऔΓग़͠Ͱ"1*d["id"] = 42 खͰσʔλߋ৽updateState(); updateUI() 27 ઐ໳ಛԽ ඼࣭Αͦ͞͏ ͦΕͧΕษڧ͠ͳ͍ͱग़དྷͳ͍ ͠͹͠͹ʮΉ͍ͣʯͱ͞ΕΔ ͍ͭͰ΋ྗٕͰॻ͚Δ ॲཧൈ͚Ͱෆ۩߹ग़ͦ͏ ଞͷݴޠ͔͠஌Βͳͯ͘΋ษڧ͠ͳ͘ ͯ΋ͳΜͱ͔ॻ͚ͦ͏ ʮ࢓༷ɾઃܭʯʹ͍ۙهड़ ʮ࢓༷ɾઃܭʯΛ໋ྩʹ຋༁͢Δ ͍͔ʹ΋ͳϓϩάϥϛϯάͷ͓͠͝ͱ ໋ྩతͱ͔એݴతͱ͔
  28. © ZOZO, Inc. 28 σʔλϑϩʔ A = B + C

    C B A + in in out ͪͳΈʹσʔλϑϩʔͷਤͱ͍͏ͱ ԼͷΑ͏ͳײ͡ ͜ͷྫ: https://reactivecocoa.io/philosophy.html
  29. © ZOZO, Inc. 29 σʔλͷശ + ઀ଓͷ໼ҹ C B A

    + ʮม਺ͱ͸ശͰ͋ΔʯശΛܨ͍ͩ΋ͷ͕ σʔλϑϩʔͰ͋Γ31 ͨͩ͠σʔλϑϩʔͷശ͸ɺ มߋ఻೻ͷػೳΛ΋ͭ͜ͱ MutableProperty BehaviorRelay CurrentValueSubject @Published ֤ϥΠϒϥϦͰͷʮശʯ
  30. © ZOZO, Inc. 30 σʔλͷശ + ઀ଓͷ໼ҹ C B A

    + map flatMap filter combineLatest : ശͱശͷ઀ଓ͸໼ҹ ্ྲྀɾԼྲྀ͕͋Δ  ʮΦϖϨʔλʔʯͱݺ͹ΕΔ ֤ϥΠϒϥϦͰͷʮ໼ҹʯ
  31. © ZOZO, Inc. 31 σʔλͷശ + ઀ଓͷ໼ҹ ઀ଓͷ໼ҹ͸ඇಉظͰ΋Α͍ɻ࣌ؒతͳॲཧΛͯ͠΋Α͍ɻ ෭࡞༻Λ࣮ߦͯ͠΋Α͍ɻ ͜Ε͕31ϥΠϒϥϦͷ࣮૷Λ࢖͏ͱศརͩͱΑ͘ݴΘΕΔ෦෼

    debounce throttle : ୹͍࣌ؒʹͨ͘͞ΜมԽͯ͠΋ ճ͚ͩ఻͑Δɺͱ͔ ֤ϥΠϒϥϦͰɺ࣌ؒͰ ؒҾ͖͢Δʮ໼ҹʯ
  32. © ZOZO, Inc. ؅ཧ͢΂͖ঢ়ଶ͸ͲΕ͚ͩ͋Δ͔ ͦΕΛശʹ͢Δ ঢ়ଶ͕มΘͬͨͱ͖ɺശ͔Βശ΁఻೻͢΂͖͔ ͦΕΛ໼ҹʹ͢Δ σʔλϑϩʔͷ֎͔ΒมߋͰ͖Δശ͸  σʔλϑϩʔͷ֎΁Өڹ͢Δശ͸

     มߋ఻೻͕͋Δ͚ͩͰɺϝϯόม਺ͷઃܭͱมΘΒͳ͍ Ұ࣌ม਺΋Ұ࣌తͳശ΋ϝϯόʹ࣋ͨͳ͍͍ͯ͘ 32 σʔλϑϩʔΛઃܭ͢Δ
  33. © ZOZO, Inc. ߏ଄తʹ֎ଆ͔ΒΈΔͱγϯϓϧʹΈ͑Δ 33 σʔλϑϩʔΛઃܭ͢Δ

  34. © ZOZO, Inc. 34 UIͱͷ઀ଓ(ೖޱɾग़ޱ) *#"DUJPOͰड໋͚ͯྩతʹೖྗB.value = text 6*ΞμϓλͰശ૬౰ͷ΋ͷ͕͋ΔB =

    fieldB.reactive.textValues B A PCTFSWF TVCTDSJCF TJOL໋ͯ͠ྩతʹग़ྗlabelA.text = $0 6*ΞμϓλͰശ૬౰ͷ΋ͷ͕͋ΔlabelA.reactive.text <~ A σʔλϑϩʔͷ֎ͱ͸໋ྩతʹ΍ΓͱΓ͢Δ͔ɺϥΠϒϥϦʹ༻ҙ͞Ε ͍ͯΔ6*ΞμϓλΛ࢖ͬͯσʔλϑϩʔͷҰ෦ͱͯ͠઀ଓ͢Δ
  35. © ZOZO, Inc. APIϨεϙϯε ετϦʔϛϯά payload 35 UIҎ֎ͷೖޱɾग़ޱ 6*ʹ௚͍݁ͯ͠ͳ͍ΠϕϯτΛೖޱ΍ग़ޱͱ͢Δ͜ͱ͸͋Δ ηϯαʔ஋

    ݕࡧςΩετ ೖޱ ηϯαʔ J#FBDPOΛݕ஌ͨ͠ͱ͔ɺͳΜͰ΋ ωοτϫʔΫ ݕࡧςΩετ͕มߋ͞ΕͨΒ"1*ϦΫΤετ ग़ޱ
  36. © ZOZO, Inc. ֤ϥΠϒϥϦͰͷʮശ૬౰ʯ 36 RPͰσʔλϑϩʔʹ઀ଓͰ͖Δ ͦͷଞͷϞϊ جຊతͳσʔλϑϩʔΛ֦ுͯ͠͞Βʹߴ౓ʹ Ͱ͖ΔϞϊ͕֤31ϥΠϒϥϦͰ༻ҙ͞Ε͍ͯΔ લड़ͷʮശ૬౰ͷ΋ͷʯͳͲ

    APIϨεϙϯε ετϦʔϛϯά payload ηϯαʔ஋ Signal SignalProducer Observable Publisher
  37. Swift Concurrency͔? RP͔?

  38. © ZOZO, Inc. 38 ͍ΘΏΔඇಉظϓϩάϥϛϯάͷ෦෼͸ɺ ঃʑʹ4XJGU$PODVSSFODZʹ͍ͯ͘͠ͱγϯϓϧ Swift Concurrency͔? RP͔? ඇಉظϓϩάϥϛϯά

    RPϥΠϒϥϦΛඇಉظ༻్Ͱ ࢖͍ͬͯΔέʔε ͨͩͷඇಉظ Swift ConcurrencyΛ ࢖ͬͨ΄͏͕ ྑͦ͞͏ σʔλϑϩʔͰܨ͗͜ΊΔͱ͜Ζ͸ɺ31Λ࢖͏ 6*΍ωοτϫʔΫͱͷ઀ଓ͸ࠓޙ΋ඞཁ
  39. © ZOZO, Inc. 39 RPؔ࿈ਤ ......࠶ܝʂ͓͞Β͍͠Α͏ struct, class, var, didSet,

    closure, property wrapper, … Swiftجຊػೳ async/await, AsyncStream, … Swift Concurrency ඇಉظϓϩάϥϛϯά ReactiveSwift, RxSwift, Combine + UIͷΞμϓλ RPϥΠϒϥϦ RP (iOSΞϓϦ) RPϥΠϒϥϦΛඇಉظ༻్Ͱ ࢖͍ͬͯΔέʔε ͨͩͷඇಉظ ͍ΘΏΔϦΞΫςΟϒϓϩάϥϛϯά MVVMͷܨ͗ͱ͔ async/awaitͱdidSetͰܨ͍Ͱ΋޿ٛͷRP͔΋...? Swift ConcurrencyΛ ࢖ͬͨ΄͏͕ ྑͦ͞͏ ͦͷ·· RPϥΠϒϥϦΛ ࢖͏ͱྑͦ͞͏
  40. © ZOZO, Inc. 40 ͍ΘΏΔඇಉظϓϩάϥϛϯάͱݴ͍ͬͯΔ͕ ྫ͑͹͜͏͍͏ͱ͜Ζ "1*ίʔϧݸ Ұ࿈ͷBTZODGVODΛϩʔΧϧͰ·ͱΊ͍ͨ Swift Concurrency͔?

    RP͔? func f() async -> T { let a = await fa() let b = await fb(a) return b } func request() async -> Response
  41. © ZOZO, Inc. 41 31Λ࢖͏ͱ͜Ζ͸ɺঢ়ଶมԽ͕͋Γɺঢ়ଶΛܨ͍ͰσʔλϑϩʔΛ ઃܭͰ͖Δͱ͜Ζ ྫ͑͹͜͏͍͏ͱ͜Ζ ϩʔΧϧείʔϓΛӽ͑ͯ7$΍7.ͷϝϯόม਺ͱͯ͠อ࣋͞ΕΔ ঢ়ଶ͕͋Γɺঢ়ଶؒʹ఻೻͕͋Δ ͍͔ͭ͘ͷঢ়ଶ͸6*΍ωοτ

    ϫʔΫʹΑΓมԽ͢Δ Swift Concurrency͔? RP͔?
  42. ͓ΘΓʹ

  43. © ZOZO, Inc. 43 ͜Μͳ;͏ʹཧղͯ͠΋Β͑ͯͨΒ خ͍͠Ͱ͢ ࢲ͕ͨͪ࢖͖ͬͯͨʮ͍ΘΏΔ31ʯͷཱͪҐஔ͕Θ͔ͬͨʂ ΋΍ͬͱͯͨ͠4XJGU$PODVSSFODZ΍ඇಉظͱ31ͱͷҧ͍͕ϋοΩϦͨ͠ʂ جૅΛ͓͑͞Δ͜ͱͰɺܧଓతʹϓϩμΫτΛ੒௕ͤ͞Δྗʹ͠Α͏ͱࢥͬͨʂ ΋ͬͱ஌Γ͍ͨʂڭ͑ͯ΄͍͠ʂ

  44. None