Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Realmの処理を再利用可能かつ合成可能にする
Search
ukitaka
June 10, 2017
Programming
1k
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.9k
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
510
Swiftの型システムに入門する - iOSDC Japan 2018
ukitaka
10
7.5k
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
Heart of Swift Concurrency
koher
0
1.1k
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.3k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
140
JRuby: Past, Present, and Future
headius
0
220
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
カツオ、ご期待ください
suneo3476
0
130
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
1k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
170
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Building AI with AI
inesmontani
PRO
1
1.3k
So, you think you're a good person
axbom
PRO
2
2.2k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
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