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
実践CRDT
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tamadeveloper
April 14, 2026
Programming
630
0
Share
実践CRDT
Core DataとCloudKitによるリッチテキスト同期モデルの構築
tamadeveloper
April 14, 2026
Other Decks in Programming
See All in Programming
AIエージェントの隔離技術の徹底比較
kawayu
0
360
今さら聞けないCancellationToken
htkym
0
150
My daily life on Ruby
a_matsuda
3
420
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
1k
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
110
AI時代になぜ書くのか
mutsumix
0
440
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
380
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
5
790
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
270
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
210
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.9k
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
130
Featured
See All Featured
Designing for Performance
lara
611
70k
Raft: Consensus for Rubyists
vanstee
141
7.4k
A better future with KSS
kneath
240
18k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
220
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
150
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
220
Transcript
Practical CRDT Building a Rich-Text Sync Model with Core Data
and CloudKit
Kazushi Oenoki FirstSeed Inc.
None
None
None
id content ... 12 Project Alpha Kicko ff ... ...
Note
Merging is hard
CRDT Con fl ict-free Replicated Data Types
None
None
None
CRDT 101 Don't store strings. Store identities, relationships &
states.
Hello H ❌ ✅ e l l o
Hello H ❌ ✅ e l l o ID: 1
2 3 4 5
Hello H ❌ ✅ e l l o ID: 1
2 3 4 5 prevID: nil 1 2 3 4
Hello H ❌ ✅ e l l o ID: 1
2 3 4 5 prevID: nil 1 2 3 4 timestamp: ... ... ... ... ...
ABC ABC
A1BC AB2C
A 1 B C A1BC AB2C
A B 2 C A1BC AB2C
A 1 B C A1B2C A1B2C 2
A 1 🪦 C A12C A12C 2
None
Core Data First party Highly scalable High Performance Concurrent writes
Crash-safe persistent
CloudKit First party Privacy No sign-in / sign-up No server
management Shareable Free
CRDTEntity id: Int64 prevEntityID: Int64 content: String timestamp: Date isErased:
Bool note: Note Note id: UUID ... entities: [CRDTEntity]
CRDTImage url: String width: CGFloat height: CGFloat CRDTEntity id: Int64
prevEntityID: Int64 content: String timestamp: Date isErased: Bool
CRDTChar style: Int32 CRDTEntity id: Int64 prevEntityID: Int64 content: String
timestamp: Date isErased: Bool
CRDTList indentLevel: Int32 CRDTEntity id: Int64 prevEntityID: Int64 CRDTCheckBox isChecked:
Bool CRDTOrderedList marker: String CRDTUnorderedList style: Int32
CRDTHeader style: Int32 CRDTCodeBlock CRDTEntity id: Int64 prevEntityID: Int64 content:
String timestamp: Date isErased: Bool CRDTBlockQuote
None
None
None
None
None
None
CRDTEntity id: Int64 prevEntityID: Int64 content: String timestamp: Date isErased:
Bool note: Note Note id: UUID ... entities: [CRDTEntity]
None
CRDTEntity id: Int64 prevEntityID: Int64 content: String timestamp: Date isErased:
Bool note: Note Note id: UUID ... entities: [CRDTEntity]
CRDTEntity id: Int64 prevEntityID: Int64 content: String timestamp: Date isErased:
Bool noteID: UUID segment: Int32 Note id: UUID ...
NoteData id: UUID assetData: Data segment: Int32 ... note: Note
Note id: UUID ... data: [NoteData]
None
None
CRDT Powerful concept Beyond text Adaptable model Deep theory
Thank you Enjoy your stay in Japan!