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
ローカルファーストに入門した(い)
Search
Hoshi
September 27, 2025
Technology
53
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ローカルファーストに入門した(い)
Niigata5分Tech #22 の発表資料です!
Hoshi
September 27, 2025
More Decks by Hoshi
See All by Hoshi
家計簿アプリNotion風_〜香り彩るオープンソース仕立て〜
starjamjelly
0
8
Other Decks in Technology
See All in Technology
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
160
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
300
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
1
120
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
400
How to Design Configuration for Rails Applications
willnet
1
830
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
270
Browser Spec: Testing Hotwire with Ruby
takahashim
1
130
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
810
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
190
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Fireside Chat
paigeccino
43
4.1k
WENDY [Excerpt]
tessaabrams
14
40k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Navigating Team Friction
lara
192
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Rails Girls Zürich Keynote
gr2m
96
14k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
It's Worth the Effort
3n
188
29k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
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
なんだかちょっとわかった気がする!
ご清聴ありがとうございました!