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

Realmの処理を再利用可能かつ合成可能にする

 Realmの処理を再利用可能かつ合成可能にする

0cf23fed58f84e729aa59ba5d8d0baaf?s=128

ukitaka

June 10, 2017
Tweet

Transcript

  1. RealmͷॲཧΛ࠶ར༻Մೳ ͔ͭ߹੒Մೳʹ͢Δ @ukitaka

  2. ಥવͰ͕͢Έͳ͞Μ

  3. RealmͷॲཧΛ͢Δؔ਺Λ Ͳ͏ॻ͍͍ͯ·͔͢

  4. ྫ͑͹͜͏

  5. ྫ͑͹͜͏ RealmͷΠϯελϯε͸தͰੜ੒͢Δ

  6. ྫ͑͹͜͏ τϥϯβΫγϣϯΛ࣮ߦ͢Δ

  7. ྑͦ͞͏ʁ

  8. ͍͔ͭ͘໰୊͕͋Δ

  9. Կ͕໰୊͔

  10. Կ͕໰୊͔ ͦΕͧΕͰτϥϯβΫγϣϯ͕࣮ߦ͞Εͯ͠·͏

  11. τϥϯβΫγϣϯ • ݺͼग़͠ͷͨͼʹɺॲཧ͕࣮ߦ͞Εͯ͠·͏ ͷͰɺ1ͭͷτϥϯβΫγϣϯʹ·ͱΊΒΕͳ ͍ɻॲཧΛAtomicʹͰ͖ͳ͍ɻ • ॲཧͷهड़ͱ࣮ࡍͷ࣮ߦ͕෼཭Ͱ͖͍ͯͳ͍ɻ

  12. τϥϯβΫγϣϯ • RealmʹݶΒͣɺҰൠతʹτϥϯβΫγϣϯͷ ։࢝͸ॏ͍ॲཧ • ຖճੜ੒͢Δͷͱ1ͭͷτϥϯβΫγϣϯʹ· ͱΊΔͷͰ(खݩͰܭଌͨ͠ͱ͜Ζ)10ഒҧ͏

  13. ͭ·Γɺ͜ͷ··Ͱ͸

  14. ࠶ར༻͠ʹ͍͘ʂ

  15. None
  16. Ͳ͏͢Δʁ

  17. ෳ਺༻ͷؔ਺Λผʹ࡞Δʁ

  18. ͡Ό͋͜Ε͸…ʁ

  19. ͜Μͳؔ਺Λຖճ࡞Δͷʁ

  20. ߹੒Ͱ͖ΔΑ͏ʹ͍ͨ͠ʂ

  21. None
  22. τϥϯβΫγϣϯͷ։࢝Λ ࢖͏ଆͰ΍ΒͤͯΈΔ

  23. None
  24. None
  25. ࠶ར༻ͨ͠Γɺ ૊Έ߹ΘͤͨΓ

  26. 1ͭͷτϥϯβΫγϣϯΛ ૊ΈཱͯΔ͜ͱ͕Ͱ͖ΔΑ͏ ʹ͸ͳͬͨʂ

  27. ࣮ࡍDDDຊͳͲʹ͸ͦ͏͠Ζͱ ॻ͍ͯ͋Δ ʮΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭʯ ΑΓ

  28. ྑͦ͞͏ʁ

  29. ͍͔ͭ͘໰୊͕͋Δ

  30. Կ͕໰୊͔ • τϥϯβΫγϣϯͷ੍ޚͷ੹೚͸ݺͼग़͠ଆ ʹ͋Δ͕ɺͦͷ͜ͱΛڧ੍Ͱ͖ͳ͍ɻͭ·Γ ։࢝͠๨ΕͳͲΛίϯύΠϧ࣌ʹݕग़Ͱ͖ͳ ͍ɻ • γάωνϟΈ͚ͨͩͰ͸τϥϯβΫγϣϯͷ ։͕࢝ඞཁͳͷ͔Ͳ͏͔Θ͔Βͳ͍ɻ

  31. Կ͕໰୊͔ τϥϯβΫγϣϯΛ։࢝͢΂͖ʁ ࣮͸Կ͔ॻ͖ࠐΜͰ͍ͨΓ͠ͳ͍ʁ (ಡΈࠐΈΛͯ͠ɺͳ͚Ε͹৽ن࡞੒ͱ͔)

  32. None
  33. Կ͕໰୊͔ • ຖճҾ਺Ͱ౉͢ͷͪΐͬͱΊΜͲ͍͘͞ • σϑΥϧτઃఆͷRealmΛ࢖͏ͱ͍͏҉໧ͷ ྃղ͕͋Ε͹౉ͣ͞ʹதͰੜ੒ͯ͠΋ྑ͍ ͕…

  34. None
  35. ੔ཧ: Ͳ͏ͳ͍ͬͯΕ͹ཧ૝͔ • ॲཧͷ಺༰Λఆٛͭͭ͠ɺͦΕͧΕΛ߹੒Ͱ͖Δ Α͏ʹ͍ͨ͠ɻͭ·ΓτϥϯβΫγϣϯΛ૊Έཱ ͯΔλΠϛϯάͱ࣮ߦͷλΠϛϯάΛ෼͚͍ͨɻ • τϥϯβΫγϣϯͷ։͕࢝ඞཁͰ͋Δ͜ͱΛ໌ࣔ తɺ੩తʹදݱ͍ͨ͠ɻ •

    Ͱ͖Ε͹࢖͍׳ΕͨI/FͰɺ؆ܿʹॻ͖͍ͨ
  36. ੔ཧ: Ͳ͏ͳ͍ͬͯΕ͹ཧ૝͔ • ॲཧͷ಺༰Λఆٛͭͭ͠ɺͦΕͧΕΛ߹੒Ͱ͖Δ Α͏ʹ͍ͨ͠ɻͭ·ΓτϥϯβΫγϣϯΛ૊Έཱ ͯΔλΠϛϯάͱ࣮ߦͷλΠϛϯάΛ෼͚͍ͨɻ • τϥϯβΫγϣϯͷ։͕࢝ඞཁͰ͋Δ͜ͱΛ໌ࣔ తɺ੩తʹදݱ͍ͨ͠ɻ •

    Ͱ͖Ε͹࢖͍׳ΕͨI/FͰɺ؆ܿʹॻ͖͍ͨ
  37. ๻Β͸Ͳ͔͜Ͱಉ͡Α͏ͳ ͜ͱΛ΍͍ͬͯΔ΋ͷΛ ࣮͸ݟͨ͜ͱ͕͋Δ

  38. None
  39. None
  40. ͜Ε͸͋Εͩ…

  41. ※ۤखͳํͷͨΊʹϞβΠΫॲཧΛࢪ͍ͯ͠·͢

  42. ʮScalaؔ਺ܕσβΠϯ&ϓϩάϥϛϯάʯ ΑΓ

  43. ؔ਺ܕϓϩάϥϛϯάͷྗΛ आΓΔ

  44. ࡞ͬͨ

  45. RealmIO https://github.com/ukitaka/RealmIO

  46. Ͳ͏࡞͔ͬͨʁ

  47. ͜ΕΛ

  48. ͜͏͡Ό

  49. ͜͏͡Ό CurryԽ͢Δͱڞ௨ͷύλʔϯ͕ݟ͑Δ

  50. None
  51. ͢΂ͯͷRealmͷॲཧ͸͜͏දͤΔ ※ʮRealmΛड͚औͬͯԿ͔Λͯ݁͠ՌΛฦ͢ʯΈ͍ͨͳײ͡Ͱ͢ɻ ※Errorॲཧ͸Ұ୴ߟ͑ͯ·ͤΜ

  52. ͞Βʹ͜ΕΛ

  53. ͜͏͡Ό

  54. ͭ·Γ͜ΕΛ

  55. ͜͏͡Ό

  56. ͜ͷܕΛϕʔεʹਐΊΔ

  57. ͜͜·Ͱͷ·ͱΊ

  58. ڞ௨෦෼͕͋ͬͨͷͰ͜͏͚ͨͩ͠

  59. RealmIO<T>

  60. RealmIO<T>

  61. RealmIO<T>

  62. RealmIO<T>

  63. ࣮ࡍͷίʔυͰ͸ErrorΛthrow Ͱ͖ΔΑ͏ʹͳ͍ͬͯΔ

  64. ͳΜͱͳ͘ runΛݺͿ·Ͱ࣮ߦ͞Εͳ͍ ײ͡͸ग़͖ͯͨ

  65. ͕ɺ ·ͩͳʹ΋ղܾ͍ͯ͠ͳ͍

  66. ͩΕ΋τϥϯβΫγϣϯ ։࢝ͯ͠ͳ͘Ͷʁ

  67. ࡞Δ

  68. τϥϯβΫγϣϯ੍ޚ

  69. τϥϯβΫγϣϯ੍ޚ Realm͕RealmIOΛҾ਺ʹऔͬͯ

  70. τϥϯβΫγϣϯ੍ޚ τϥϯβΫγϣϯ։࢝ͯ͠

  71. τϥϯβΫγϣϯ੍ޚ ࣮ߦ !!!

  72. τϥϯβΫγϣϯ੍ޚ • ࢖͏ͱ͖͸realm.run(io:) ΛݺͿΑ͏ʹ͢Δ • io.run͸௚઀ݺ΂ͳ͍Α͏ʹɺ࣮ࡍ͸internal ͳΓʹ͓ͯ͘͠ɻ

  73. ͱ͜ΖͰRead͚ͩͷͱ͖͸ʁ

  74. τϥϯβΫγϣϯ੍ޚ • ύϑΥʔϚϯεతʹ΋ɺແବʹτϥϯβΫ γϣϯΛ։࢝͢΂͖Ͱ͸ͳ͍ɻ • ಡΈࠐΈͷΈͷ৔߹͸τϥϯβΫγϣϯΛ։ ࢝͠ͳ͍Α͏ʹ͢ΔͨΊʹɺॲཧ͕Readͳͷ ͔Writeͳͷ͔Λ൑ผ͢Δ࢓૊Έ͕ඞཁɻ

  75. τϥϯβΫγϣϯ੍ޚ ܕ৘ใ͔Β͸Read/Write͕൑ผͰ͖ͳ͍

  76. ࡞Δ

  77. ͜ΕΛ

  78. ͜͏͡Ό

  79. ͜͏͡Ό Read͔Write͔ΛܕύϥϝʔλͰද͢

  80. ͭ·Γ͜ΕΛ

  81. ͜͏͡Ό

  82. ͜͏͡Ό Read͔Write͔Λද͢ܕύϥϝʔλ

  83. ͜͏͡Ό ฦΓ஋ͷܕΛද͢ܕύϥϝʔλ

  84. τϥϯβΫγϣϯ੍ޚ

  85. τϥϯβΫγϣϯ੍ޚ Writeͷ৔߹͸τϥϯβΫγϣϯΛ ։͔࢝ͯ͠ΒॲཧΛ࣮ߦ

  86. τϥϯβΫγϣϯ੍ޚ Readͷ৔߹͸τϥϯβΫγϣϯΛ ։࢝ͤͣʹॲཧΛ࣮ߦ

  87. Ͱ͖͖ͯͨ

  88. ࣮ࡍʹެ։͍ͯ͠Δίʔυͱ ΄΅͓ͳ͡

  89. PhantomType ͪͳΈʹRWܕύϥϝʔλ͸ PhantomType(༓ྶܕ)ͱ͍ͬͯɺRead / WriteΛද͚ͩ͢ͰɺͲͷϝιουͷγάω νϟʹ΋ݱΕͳ͍ɻ

  90. ͜͜·Ͱͷ·ͱΊ

  91. None
  92. flatMapͰ ߹੒Ͱ͖ΔΑ͏ʹ͢Δ

  93. ࢖͍ํΠϝʔδ

  94. ࢖͍ํΠϝʔδ

  95. ͻͱͭ໰୊͕͋Δ

  96. ߹੒ͨ͠Β Read / Write Ͳ͏ͳΔʁ

  97. Read / Write

  98. Read / Write RWܕύϥϝʔλʹԠͯ͡ ෳ਺ͷflatMapͷ࣮૷͕ඞཁ

  99. Read / Write

  100. τϥϯβΫγϣϯ ΋ͪΖΜrunͨ͠Β1ͭͷ τϥϯβΫγϣϯ಺Ͱॲཧ͕ߦΘΕΔ

  101. ׬੒ʂ

  102. ͪͳΈʹϥΠϒϥϦͰ͸ɺrealmͷ ϝιουͷRealmIO൛Λఏڙ

  103. ׬ᘳʁ

  104. Ͱ͖ͳ͔ͬͨ͜ͱ • εϨουʹ͍ͭͯ͸ͳʹ΋Ͱ͖ͳ͔ͬͨɻॲ ཧͷهड़ͱ࣮ߦΛ෼཭͍ͯ͠ΔͷͰɺͦͷ2ͭ ͕ผεϨουͰߦΘΕΔՄೳੑ͕͋ΔͷͰɺ ͦ͜ͷ҆શੑΛϥΠϒϥϦଆͰอূ͔ͨͬ͠ ͕ͨɺThreadSafeReferenceͷ੍໿ͰͰ͖ ͣɻ

  105. Ͱ͖ͳ͔ͬͨ͜ͱ objectΛҾ਺ड͚औΔϝιουʹ͓͍ͯɺ ݺͼग़࣌͠ͷεϨουͱ

  106. Ͱ͖ͳ͔ͬͨ͜ͱ realm.run(io:)Λݺͼग़͢εϨου͕ ҧ͏Մೳੑ͕͋Δɻ

  107. Ͱ͖ͳ͔ͬͨ͜ͱ ඞཁͳΒTSRͰҾ͖௚࣮͢૷ΛೖΕΑ͏ͱ͕ͨ͠…

  108. Ͱ͖ͳ͔ͬͨ͜ͱ ThreadSafeReference͸τϥϯβΫγϣϯ಺Ͱ resolveͰ͖ͳ͍ͱ͍͏੍໿͕͋Δ

  109. Ͱ͖ͳ͔ͬͨ͜ͱ ͜͜͸τϥϯβΫγϣϯ಺ͳͷͰ resolveͰ͖ͳ͍

  110. Ͱ͖ͳ͔ͬͨ͜ͱ • ࣮ࡍʹେ͖ͳ໰୊ʹͳΔ͔ͱݴΘΕΔͱɺͦ ͜·ͰͰ͸ͳ͍(ͱߟ͍͑ͯΔ)ɻಉ͡εϨου Ͱrealm.run(io:)ΛݺͿ͔ɺobjectΛҾ਺Ͱड ͚औΔϝιου͸flatMapͷதͰ࢖͏Α͏ʹ͢ Ε͹໰୊͸ى͖ͳ͍ɻ

  111. Ͱ͖ͳ͔ͬͨ͜ͱ • Stack overflowͷՄೳੑ͕ͳ͘͸ͳ͍ɻͰ΋ͦ Μͳʹ߹੒͢Δ͜ͱ͸ݱ࣮తʹ͸ͳ͍ͷͰɺ ΄ͱΜͲ໰୊ʹ͸ͳΒͳ͍ɻ • RxSwift͕Stack overflowى͜͢ͷͱಉ͘͡Β ͍ͷϦεΫ(΄΅ͳ͍)

  112. Ͱ͖ͳ͔ͬͨ͜ͱ • ଞͷϞφυͱ૊Έ߹ΘͤΔͷ͸(ݱࡏͷSwiftͰ ͸)೉͍͠ɻྫ͑͹RxSwiftΛ࢖͍ͬͯΔ৔߹ɺ ObservableͱRealmIOΛ͏·͘૊Έ߹ΘͤΔ ͷ͸ݫ͍͠ɻ • ͜Ε͸ߴ֊ଟ૬͕ͳ͍ͱݫ͍͕͠…Swiftʹ͸ ೖΒͳͦ͞͏

  113. ࢀߟ • ReaderϞφυ • Slick (ScalaͷDBϥΠϒϥϦ) • ΞΠσΟΞ͸͜ΕͷDBIOAction͔Β • υϫϯΰൿ఻ͷτϥϯβΫγϣϯϞφυΛղઆ

    IUUQRJJUBDPNQBC@UFDIJUFNTFDEDGGB
  114. RealmIO https://github.com/ukitaka/RealmIO