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
実践CRDT
Search
tamadeveloper
April 14, 2026
Programming
840
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実践CRDT
Core DataとCloudKitによるリッチテキスト同期モデルの構築
tamadeveloper
April 14, 2026
More Decks by tamadeveloper
See All by tamadeveloper
iOSと日本語点字
tamadeveloper
0
63
Other Decks in Programming
See All in Programming
はじめてのPLATEAU
nokonoko1203
1
370
SODA - FACT BOOK(EN)
sodainc
1
200
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.6k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
GraphQL の onError と Nullability のこれから
quramy
0
200
ActionController meets Protocol Buffers
sorah
1
780
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
2
240
Spec-driven Development with AI
simas
PRO
0
2.2k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
360
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
200
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
340
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
560
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
400
Writing Fast Ruby
sferik
630
63k
The Curse of the Amulet
leimatthew05
3
16k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
Agile that works and the tools we love
rasmusluckow
331
22k
Tell your own story through comics
letsgokoyo
1
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
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!