Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ローカルファーストに入門した(い)

Avatar for Hoshi Hoshi
September 27, 2025

 ローカルファーストに入門した(い)

Niigata5分Tech #22 の発表資料です!

Avatar for Hoshi

Hoshi

September 27, 2025
Tweet

Other Decks in Technology

Transcript

  1. ローカルファーストソフトウェアの7つの理想 1. 高速(スピナー不要) 2. マルチデバイス(仕事は、1つのデバイスに閉じ込められない) 3. オフライン動作(ネットワークはオプションです) 4. コラボレーション(同僚とのシームレスなコラボレーション) 5.

    長期保存(ソフトウェア提供者が倒産しても、データは私のもの) 6. セキュリティとプライバシーをデフォルトで確保 7. ユーザーコントロール(最終的な所有権と管理権はあなた) なんだか素敵…!
  2. 相反する思想 • 私が思うに、当たり前のようにあった「Single source of Truth」に相反する 思想だと思う ◦ クラウドファースト ▪

    プライマリ:サーバー/オプション:ローカル ◦ ローカルファースト ▪ プライマリ:ローカル/オプション:サーバー • 一貫性(Consistency)に期待しない・担保がない • 「Single source of Truth」である必要があるのか、要件を見極める
  3. マルチデバイスへの対応 • CRDT(Conflict-free Replicated Data)と呼ばれる同期方針が有名 ◦ 難しすぎて今日のLTで説明できるに至りませんでした。。。 ◦ 要するに、「各ノードでの操作をどうやってマージするか?」についての アルゴリズム」

    ◦ CRDTの中でもいくつか種類がある ▪ CmRDT:データに対するイベントを送りあってマージ ▪ CvRDT:各ノードのレプリカ自体を送り合い、取り決めた判断基準 (和集合なのか、最大値なのかなど)を元にマージ 参考記事:https://qiita.com/everpeace/items/bb73ec64d3e682279d26  → とってもわかりやすい気がします
  4. そんなあなたに「Turso」 • ざっと概要 ◦ SQLiteをフォークした新しいDBMS ◦ Turso Cloudから利用可能 ◦ Embedded

    ReplicaやBranchingといった機能も使える ◦ SQLiteベースなのに同時書き込みが可能
  5. 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を分けることで、同期する データとしないデータを分けるこ とが可能。