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
Realmの処理を再利用可能かつ合成可能にする
Search
ukitaka
June 10, 2017
Programming
990
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Realmの処理を再利用可能かつ合成可能にする
https://github.com/ukitaka/RealmIO
の解説
ukitaka
June 10, 2017
More Decks by ukitaka
See All by ukitaka
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
1.8k
CSの生産性改善を支える分析環境 Mercari CS/CRE Tech Talk #1
ukitaka
1
3.1k
switchのexhaustiveness/redundancy チェック 理論と実装 わいわいswiftc #8 @ukitaka
ukitaka
0
270
SwiftのDemanglerを書く @ わいわいswiftc番外編
ukitaka
0
500
Swiftの型システムに入門する - iOSDC Japan 2018
ukitaka
10
7.4k
Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift
ukitaka
6
1.5k
理論から入門するswift/lib/Sema - わいわいswiftc #1
ukitaka
5
1.8k
マルチスレッドRxSwift @ 社内RxSwift勉強会
ukitaka
5
1.3k
今日こそ理解するHot / Cold @社内RxSwift勉強会
ukitaka
14
3k
Other Decks in Programming
See All in Programming
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
不幸な GC
chencmd
0
810
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.1k
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
110
typoなんかねぇよ
raspython3
0
610
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
580
Dockerfile CMD for Node.js
grazie1999
0
140
「人を評価する AI」の設計と実装
ryoyanara
0
260
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
250
Cloudflare is Agents
chimame
0
180
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
The SEO identity crisis: Don't let AI make you average
varn
0
540
Code Reviewing Like a Champion
maltzj
528
40k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
350
Raft: Consensus for Rubyists
vanstee
141
7.7k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
We Are The Robots
honzajavorek
0
310
The Cult of Friendly URLs
andyhume
79
7k
Transcript
RealmͷॲཧΛ࠶ར༻Մೳ ͔ͭ߹Մೳʹ͢Δ @ukitaka
ಥવͰ͕͢Έͳ͞Μ
RealmͷॲཧΛ͢ΔؔΛ Ͳ͏ॻ͍͍ͯ·͔͢
ྫ͑͜͏
ྫ͑͜͏ RealmͷΠϯελϯεதͰੜ͢Δ
ྫ͑͜͏ τϥϯβΫγϣϯΛ࣮ߦ͢Δ
ྑͦ͞͏ʁ
͍͔͕ͭ͋͘Δ
Կ͕͔
Կ͕͔ ͦΕͧΕͰτϥϯβΫγϣϯ͕࣮ߦ͞Εͯ͠·͏
τϥϯβΫγϣϯ • ݺͼग़͠ͷͨͼʹɺॲཧ͕࣮ߦ͞Εͯ͠·͏ ͷͰɺ1ͭͷτϥϯβΫγϣϯʹ·ͱΊΒΕͳ ͍ɻॲཧΛAtomicʹͰ͖ͳ͍ɻ • ॲཧͷهड़ͱ࣮ࡍͷ࣮ߦ͕Ͱ͖͍ͯͳ͍ɻ
τϥϯβΫγϣϯ • RealmʹݶΒͣɺҰൠతʹτϥϯβΫγϣϯͷ ։࢝ॏ͍ॲཧ • ຖճੜ͢Δͷͱ1ͭͷτϥϯβΫγϣϯʹ· ͱΊΔͷͰ(खݩͰܭଌͨ͠ͱ͜Ζ)10ഒҧ͏
ͭ·Γɺ͜ͷ··Ͱ
࠶ར༻͠ʹ͍͘ʂ
None
Ͳ͏͢Δʁ
ෳ༻ͷؔΛผʹ࡞Δʁ
͡Ό͋͜Ε…ʁ
͜ΜͳؔΛຖճ࡞Δͷʁ
߹Ͱ͖ΔΑ͏ʹ͍ͨ͠ʂ
None
τϥϯβΫγϣϯͷ։࢝Λ ͏ଆͰΒͤͯΈΔ
None
None
࠶ར༻ͨ͠Γɺ Έ߹ΘͤͨΓ
1ͭͷτϥϯβΫγϣϯΛ ΈཱͯΔ͜ͱ͕Ͱ͖ΔΑ͏ ʹͳͬͨʂ
࣮ࡍDDDຊͳͲʹͦ͏͠Ζͱ ॻ͍ͯ͋Δ ʮΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭʯ ΑΓ
ྑͦ͞͏ʁ
͍͔͕ͭ͋͘Δ
Կ͕͔ • τϥϯβΫγϣϯͷ੍ޚͷݺͼग़͠ଆ ʹ͋Δ͕ɺͦͷ͜ͱΛڧ੍Ͱ͖ͳ͍ɻͭ·Γ ։࢝͠ΕͳͲΛίϯύΠϧ࣌ʹݕग़Ͱ͖ͳ ͍ɻ • γάωνϟΈ͚ͨͩͰτϥϯβΫγϣϯͷ ։͕࢝ඞཁͳͷ͔Ͳ͏͔Θ͔Βͳ͍ɻ
Կ͕͔ τϥϯβΫγϣϯΛ։͖࢝͢ʁ ࣮Կ͔ॻ͖ࠐΜͰ͍ͨΓ͠ͳ͍ʁ (ಡΈࠐΈΛͯ͠ɺͳ͚Ε৽ن࡞ͱ͔)
None
Կ͕͔ • ຖճҾͰ͢ͷͪΐͬͱΊΜͲ͍͘͞ • σϑΥϧτઃఆͷRealmΛ͏ͱ͍͏҉ͷ ྃղ͕͋Εͣ͞ʹதͰੜͯ͠ྑ͍ ͕…
None
ཧ: Ͳ͏ͳ͍ͬͯΕཧ͔ • ॲཧͷ༰Λఆٛͭͭ͠ɺͦΕͧΕΛ߹Ͱ͖Δ Α͏ʹ͍ͨ͠ɻͭ·ΓτϥϯβΫγϣϯΛΈཱ ͯΔλΠϛϯάͱ࣮ߦͷλΠϛϯάΛ͚͍ͨɻ • τϥϯβΫγϣϯͷ։͕࢝ඞཁͰ͋Δ͜ͱΛ໌ࣔ తɺ੩తʹදݱ͍ͨ͠ɻ •
Ͱ͖Ε͍׳ΕͨI/FͰɺ؆ܿʹॻ͖͍ͨ
ཧ: Ͳ͏ͳ͍ͬͯΕཧ͔ • ॲཧͷ༰Λఆٛͭͭ͠ɺͦΕͧΕΛ߹Ͱ͖Δ Α͏ʹ͍ͨ͠ɻͭ·ΓτϥϯβΫγϣϯΛΈཱ ͯΔλΠϛϯάͱ࣮ߦͷλΠϛϯάΛ͚͍ͨɻ • τϥϯβΫγϣϯͷ։͕࢝ඞཁͰ͋Δ͜ͱΛ໌ࣔ తɺ੩తʹදݱ͍ͨ͠ɻ •
Ͱ͖Ε͍׳ΕͨI/FͰɺ؆ܿʹॻ͖͍ͨ
ΒͲ͔͜Ͱಉ͡Α͏ͳ ͜ͱΛ͍ͬͯΔͷΛ ࣮ݟͨ͜ͱ͕͋Δ
None
None
͜Ε͋Εͩ…
※ۤखͳํͷͨΊʹϞβΠΫॲཧΛࢪ͍ͯ͠·͢
ʮScalaؔܕσβΠϯ&ϓϩάϥϛϯάʯ ΑΓ
ؔܕϓϩάϥϛϯάͷྗΛ आΓΔ
࡞ͬͨ
RealmIO https://github.com/ukitaka/RealmIO
Ͳ͏࡞͔ͬͨʁ
͜ΕΛ
͜͏͡Ό
͜͏͡Ό CurryԽ͢Δͱڞ௨ͷύλʔϯ͕ݟ͑Δ
None
ͯ͢ͷRealmͷॲཧ͜͏දͤΔ ※ʮRealmΛड͚औͬͯԿ͔Λͯ݁͠ՌΛฦ͢ʯΈ͍ͨͳײ͡Ͱ͢ɻ ※ErrorॲཧҰ୴ߟ͑ͯ·ͤΜ
͞Βʹ͜ΕΛ
͜͏͡Ό
ͭ·Γ͜ΕΛ
͜͏͡Ό
͜ͷܕΛϕʔεʹਐΊΔ
͜͜·Ͱͷ·ͱΊ
ڞ௨෦͕͋ͬͨͷͰ͜͏͚ͨͩ͠
RealmIO<T>
RealmIO<T>
RealmIO<T>
RealmIO<T>
࣮ࡍͷίʔυͰErrorΛthrow Ͱ͖ΔΑ͏ʹͳ͍ͬͯΔ
ͳΜͱͳ͘ runΛݺͿ·Ͱ࣮ߦ͞Εͳ͍ ײ͡ग़͖ͯͨ
͕ɺ ·ͩͳʹղܾ͍ͯ͠ͳ͍
ͩΕτϥϯβΫγϣϯ ։࢝ͯ͠ͳ͘Ͷʁ
࡞Δ
τϥϯβΫγϣϯ੍ޚ
τϥϯβΫγϣϯ੍ޚ Realm͕RealmIOΛҾʹऔͬͯ
τϥϯβΫγϣϯ੍ޚ τϥϯβΫγϣϯ։࢝ͯ͠
τϥϯβΫγϣϯ੍ޚ ࣮ߦ !!!
τϥϯβΫγϣϯ੍ޚ • ͏ͱ͖realm.run(io:) ΛݺͿΑ͏ʹ͢Δ • io.runݺͳ͍Α͏ʹɺ࣮ࡍinternal ͳΓʹ͓ͯ͘͠ɻ
ͱ͜ΖͰRead͚ͩͷͱ͖ʁ
τϥϯβΫγϣϯ੍ޚ • ύϑΥʔϚϯεతʹɺແବʹτϥϯβΫ γϣϯΛ։͖࢝͢Ͱͳ͍ɻ • ಡΈࠐΈͷΈͷ߹τϥϯβΫγϣϯΛ։ ࢝͠ͳ͍Α͏ʹ͢ΔͨΊʹɺॲཧ͕Readͳͷ ͔Writeͳͷ͔Λผ͢ΔΈ͕ඞཁɻ
τϥϯβΫγϣϯ੍ޚ ܕใ͔ΒRead/Write͕ผͰ͖ͳ͍
࡞Δ
͜ΕΛ
͜͏͡Ό
͜͏͡Ό Read͔Write͔ΛܕύϥϝʔλͰද͢
ͭ·Γ͜ΕΛ
͜͏͡Ό
͜͏͡Ό Read͔Write͔Λද͢ܕύϥϝʔλ
͜͏͡Ό ฦΓͷܕΛද͢ܕύϥϝʔλ
τϥϯβΫγϣϯ੍ޚ
τϥϯβΫγϣϯ੍ޚ Writeͷ߹τϥϯβΫγϣϯΛ ։͔࢝ͯ͠ΒॲཧΛ࣮ߦ
τϥϯβΫγϣϯ੍ޚ Readͷ߹τϥϯβΫγϣϯΛ ։࢝ͤͣʹॲཧΛ࣮ߦ
Ͱ͖͖ͯͨ
࣮ࡍʹެ։͍ͯ͠Δίʔυͱ ΄΅͓ͳ͡
PhantomType ͪͳΈʹRWܕύϥϝʔλ PhantomType(༓ྶܕ)ͱ͍ͬͯɺRead / WriteΛද͚ͩ͢ͰɺͲͷϝιουͷγάω νϟʹݱΕͳ͍ɻ
͜͜·Ͱͷ·ͱΊ
None
flatMapͰ ߹Ͱ͖ΔΑ͏ʹ͢Δ
͍ํΠϝʔδ
͍ํΠϝʔδ
ͻͱ͕ͭ͋Δ
߹ͨ͠Β Read / Write Ͳ͏ͳΔʁ
Read / Write
Read / Write RWܕύϥϝʔλʹԠͯ͡ ෳͷflatMapͷ࣮͕ඞཁ
Read / Write
τϥϯβΫγϣϯ ͪΖΜrunͨ͠Β1ͭͷ τϥϯβΫγϣϯͰॲཧ͕ߦΘΕΔ
ʂ
ͪͳΈʹϥΠϒϥϦͰɺrealmͷ ϝιουͷRealmIO൛Λఏڙ
ᘳʁ
Ͱ͖ͳ͔ͬͨ͜ͱ • εϨουʹ͍ͭͯͳʹͰ͖ͳ͔ͬͨɻॲ ཧͷهड़ͱ࣮ߦΛ͍ͯ͠ΔͷͰɺͦͷ2ͭ ͕ผεϨουͰߦΘΕΔՄೳੑ͕͋ΔͷͰɺ ͦ͜ͷ҆શੑΛϥΠϒϥϦଆͰอূ͔ͨͬ͠ ͕ͨɺThreadSafeReferenceͷ੍ͰͰ͖ ͣɻ
Ͱ͖ͳ͔ͬͨ͜ͱ objectΛҾड͚औΔϝιουʹ͓͍ͯɺ ݺͼग़࣌͠ͷεϨουͱ
Ͱ͖ͳ͔ͬͨ͜ͱ realm.run(io:)Λݺͼग़͢εϨου͕ ҧ͏Մೳੑ͕͋Δɻ
Ͱ͖ͳ͔ͬͨ͜ͱ ඞཁͳΒTSRͰҾ͖࣮͢ΛೖΕΑ͏ͱ͕ͨ͠…
Ͱ͖ͳ͔ͬͨ͜ͱ ThreadSafeReferenceτϥϯβΫγϣϯͰ resolveͰ͖ͳ͍ͱ͍͏੍͕͋Δ
Ͱ͖ͳ͔ͬͨ͜ͱ ͜͜τϥϯβΫγϣϯͳͷͰ resolveͰ͖ͳ͍
Ͱ͖ͳ͔ͬͨ͜ͱ • ࣮ࡍʹେ͖ͳʹͳΔ͔ͱݴΘΕΔͱɺͦ ͜·ͰͰͳ͍(ͱߟ͍͑ͯΔ)ɻಉ͡εϨου Ͱrealm.run(io:)ΛݺͿ͔ɺobjectΛҾͰड ͚औΔϝιουflatMapͷதͰ͏Α͏ʹ͢ Εى͖ͳ͍ɻ
Ͱ͖ͳ͔ͬͨ͜ͱ • Stack overflowͷՄೳੑ͕ͳ͘ͳ͍ɻͰͦ Μͳʹ߹͢Δ͜ͱݱ࣮తʹͳ͍ͷͰɺ ΄ͱΜͲʹͳΒͳ͍ɻ • RxSwift͕Stack overflowى͜͢ͷͱಉ͘͡Β ͍ͷϦεΫ(΄΅ͳ͍)
Ͱ͖ͳ͔ͬͨ͜ͱ • ଞͷϞφυͱΈ߹ΘͤΔͷ(ݱࡏͷSwiftͰ )͍͠ɻྫ͑RxSwiftΛ͍ͬͯΔ߹ɺ ObservableͱRealmIOΛ͏·͘Έ߹ΘͤΔ ͷݫ͍͠ɻ • ͜Εߴ֊ଟ૬͕ͳ͍ͱݫ͍͕͠…Swiftʹ ೖΒͳͦ͞͏
ࢀߟ • ReaderϞφυ • Slick (ScalaͷDBϥΠϒϥϦ) • ΞΠσΟΞ͜ΕͷDBIOAction͔Β • υϫϯΰൿͷτϥϯβΫγϣϯϞφυΛղઆ
IUUQRJJUBDPNQBC@UFDIJUFNTFDEDGGB
RealmIO https://github.com/ukitaka/RealmIO