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
0
890
Realmの処理を再利用可能かつ合成可能にする
https://github.com/ukitaka/RealmIO
の解説
ukitaka
June 10, 2017
Tweet
Share
More Decks by ukitaka
See All by ukitaka
CSの生産性改善を支える分析環境 Mercari CS/CRE Tech Talk #1
ukitaka
1
2.7k
switchのexhaustiveness/redundancy チェック 理論と実装 わいわいswiftc #8 @ukitaka
ukitaka
0
190
SwiftのDemanglerを書く @ わいわいswiftc番外編
ukitaka
0
430
Swiftの型システムに入門する - iOSDC Japan 2018
ukitaka
10
6.7k
Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift
ukitaka
6
1.4k
理論から入門するswift/lib/Sema - わいわいswiftc #1
ukitaka
5
1.6k
マルチスレッドRxSwift @ 社内RxSwift勉強会
ukitaka
5
1.2k
今日こそ理解するHot / Cold @社内RxSwift勉強会
ukitaka
14
2.7k
RxSwift コードリーディングの勘所@社内RxSwift勉強会
ukitaka
3
1k
Other Decks in Programming
See All in Programming
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
220
Flatt Security XSS Challenge 解答・解説
flatt_security
0
740
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
940
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
300
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
4
240
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
2.8k
HTML/CSS超絶浅い説明
yuki0329
0
190
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
950
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Why Our Code Smells
bkeepers
PRO
335
57k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Bash Introduction
62gerente
610
210k
Rails Girls Zürich Keynote
gr2m
94
13k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
A Tale of Four Properties
chriscoyier
157
23k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
240
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