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
ローカルファーストに入門した(い)
Search
Hoshi
September 27, 2025
Technology
0
10
ローカルファーストに入門した(い)
Niigata5分Tech #22 の発表資料です!
Hoshi
September 27, 2025
Tweet
Share
Other Decks in Technology
See All in Technology
LLMを浸透させるための泥臭い話
oprstchn
3
790
2025 IEEE MSST: NFS: Genesis
pugs
0
130
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
240
みん強のこれまでとこれから
genshun9
1
320
業務でAIの力を最大限に発揮するために #弁護士ドットコム
bengo4com
0
270
AI Agent Dojo #1: watsonx OrchestrateAI エージェント体験
oniak3ibm
PRO
0
180
意外と難しいGraphQLのスカラー型
uhyo
4
240
CTFのためのKubernetes入門
kyohmizu
2
730
stupid jj tricks
indirect
0
4.6k
非同期処理実行基盤 Delayed脱出 → Solid Queue完全移行への旅路。
srockstyle
2
580
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
76k
Kafkaを利用したIcebergへのデータストリーミング
shmza
0
200
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Being A Developer After 40
akosma
90
590k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Into the Great Unknown - MozCon
thekraken
40
2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Visualization
eitanlees
148
16k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Documentation Writing (for coders)
carmenintech
75
5k
Transcript
ローカルファーストに 入門した(い) ほし (@starjamjelly)
自己紹介! ・ほし (X/Github/Qiita/shizu.me: @starjamjelly) ・新潟ではたらくSaasサービス開発者 ・実務ではAngularとDjangoを書いています ・最近PCを買い換えました → US配列と格闘中(現状敗北)
ローカルファーストの概要 • データの所有権は「自分である」という思想に根付いた考え方のこと • そんなの当たり前では? ←本当にそうか? ◦ クラウドファースト ▪ 「クラウドなんて存在しない。それは誰かのコンピューターだ。」
▪ 果たしてそのデータの所有者は「自分」なのか? ▪ な、なるほど… 参考論文:https://www.inkandswitch.com/essay/local-first/ (多分一番有名)
ローカルファーストソフトウェアの7つの理想 1. 高速(スピナー不要) 2. マルチデバイス(仕事は、1つのデバイスに閉じ込められない) 3. オフライン動作(ネットワークはオプションです) 4. コラボレーション(同僚とのシームレスなコラボレーション) 5.
長期保存(ソフトウェア提供者が倒産しても、データは私のもの) 6. セキュリティとプライバシーをデフォルトで確保 7. ユーザーコントロール(最終的な所有権と管理権はあなた) なんだか素敵…!
オフラインファーストとの違い • ローカルファーストとオフラインファーストは 一緒に解釈されがち。 • ここまでの資料にあるとおり、大切にしている考え方が違う ◦ ローカルファースト :データの所有権・アクセスに比重 ◦ オフラインファースト:オフライン動作することに比重
▪ 本来並列なものではない?
Why born ‘ローカルファースト’ • 大きく分けて、生まれた理由は2つ ◦ 他人のコンピュータ(クラウド)にデータを保存する違和感 ◦ クラウドファーストで損なわれるUX ▪
「そのデータ、本当にクラウドへの保存が必要…?」 ▪ 「えっ、私のSaas遅すぎ…?」
相反する思想 • 私が思うに、当たり前のようにあった「Single source of Truth」に相反する 思想だと思う ◦ クラウドファースト ▪
プライマリ:サーバー/オプション:ローカル ◦ ローカルファースト ▪ プライマリ:ローカル/オプション:サーバー • 一貫性(Consistency)に期待しない・担保がない • 「Single source of Truth」である必要があるのか、要件を見極める
マルチデバイスへの対応 • CRDT(Conflict-free Replicated Data)と呼ばれる同期方針が有名 ◦ 難しすぎて今日のLTで説明できるに至りませんでした。。。 ◦ 要するに、「各ノードでの操作をどうやってマージするか?」についての アルゴリズム」
◦ CRDTの中でもいくつか種類がある ▪ CmRDT:データに対するイベントを送りあってマージ ▪ CvRDT:各ノードのレプリカ自体を送り合い、取り決めた判断基準 (和集合なのか、最大値なのかなど)を元にマージ 参考記事:https://qiita.com/everpeace/items/bb73ec64d3e682279d26 → とってもわかりやすい気がします
CRDTの課題 • 難しい
そんなあなたに「Turso」 • ざっと概要 ◦ SQLiteをフォークした新しいDBMS ◦ Turso Cloudから利用可能 ◦ Embedded
ReplicaやBranchingといった機能も使える ◦ SQLiteベースなのに同時書き込みが可能
Tursoの同期戦略 import { createClient } from "@libsql/client"; // 同期しないローカルデータ createClient({
url: 'file:ui.db' }); // 同期対象のデータ createClient({ url: 'file:users.db', syncUrl: `turso://user-${userId}.turso.io`, authToken: userToken, syncInterval: 60 }); DBを分けることで、同期する データとしないデータを分けるこ とが可能。
ローカルファーストのコミュニティ • 海外にて毎年3日間にわたり開催されている 公式:https://www.localfirstconf.com/ • YouTubeに発表のプレイリストがある!すごい! https://www.youtube.com/playlist?list=PL4isNRKAwz2MabH6AMhUz1 yS3j1DqGdtT
なんだかちょっとわかった気がする!
ご清聴ありがとうございました!