0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-09-27

bumper sticker:
“There is no cloud, it’s just someone else’s computer.”

─ クラウドなんて存在しない。それは誰かのコンピューターだ。

「ローカルファースト」という言葉を聞く機会があり、気になったので調べてみました。
この記事では入門的な内容をまとめます。

こちらの論文がとても読みやすいです。
当記事を完読していただけるなら、その後に読んでいただくのが良いかと思います。
https://www.inkandswitch.com/essay/local-first/

ローカルファーストとは

ローカルファーストとは「データの所有権は自分である」という思想に根付いた考え方のことです。
「ローカルファーストな設計」「ローカルファースト・アプリケーション」などの文脈で使用されます。

所有権が自分?当たり前では?と思われるでしょう。私ももちろんそう思いました。

しかし、本当にそうでしょうか?
クラウドファーストなあらゆるサービスでは、サーバーをデータソースとして持っています。
この時のデータの所有者は果たしてだれでしょうか。

  1. サービスを利用するユーザー
  2. サービスのプロバイダー
  3. データソースを保持するインフラ層のプロバイダー

データの所有者から最も遠いのは、考え方によってはユーザーかもしれません。
ローカルファーストな考え方は、自分のデータが他人の持ち物である違和感の解決と、ネットワークトラフィックを介さない圧倒的に高速なデータアクセスによるUX向上を目指しています。

「えっ、私のサービス遅すぎ…?」と感じたら、ローカルに所有権を移せるか検討してみるのもいいかもしれません。

ローカルファーストソフトウェアの7つの理想

論文によると7つの理想が提唱されています。

  1. スピナー不要(高速であること)
  2. マルチデバイスでの同期(ひとつのデバイスに閉じ込められない)
  3. オフライン動作(ネットワークは「オプション」である)
  4. 他ユーザーとのシームレスなコラボレーション
  5. 長期保存(ソフトウェアプロバイダーが倒産しても、データは私のもの)
  6. セキュリティとプライバシーの担保
  7. データの最終的な所有権と管理権はあなたである

それぞれの詳細については先ほどの論文をご確認ください(笑)
各項目の文量は多くないので、当記事での説明はしません!

オフラインファーストとの違い

よく混同され、一緒に解釈されるのがオフラインファーストですが、全く違うものです。

  • オフラインファースト
    • オフラインでの動作の担保に比重を置いた考え方
  • ローカルファースト
    • データの所有権・アクセスに比重を置いた考え方

この通り根底となる考え方が全く違う土俵のものですので、本来は並列なものではありません。

相反する思想

私が思うに、今まで当たり前のようにあった「Single source of Truth(信頼できる唯一の情報源)」の考え方に反している思想だと思います。
データソースがサーバーからローカルになりますので、別のノード(別デバイス・クラウド上のサーバー)に反映されるまでが即時とはいきません。
SSOTではなくなるため、要件を見極めて設計する必要があります。(ミスったら大火傷しそうですね)

クラウドファースト

  • プライマリ:サーバー
  • オプション:ローカル(フロントエンド側のキャッシュなど)

ローカルファースト

  • プライマリ:ローカル
  • オプション:サーバー(マルチデバイス同期のための中継地・共通設定など)
    ※一貫性(Consistency)に期待しない・担保がない

マルチデバイスへの対応(データの同期)

CRDTによるアプローチ

データの同期にはCRDTと呼ばれる方針が有名なようです。
筆者は深い理解には至っておりませんが、、
要するに「各ノードでの操作をどうやってマージするか?」のアルゴリズムのことらしいです。

CRDTの中にもいくつか種類があります。

  • CmRDT:データに対するイベントを送りあってマージ
  • CvRDT:各ノードレプリカ自体を送り合い、取り決めた判断基準(和集合なか、最大値なかなど)を元にマージ

こちらの記事を読ませていただきました↓
ミリしらの私でしたが、記事にもあるとおり「わかった気に」していただけました!
CRDT (Conflict-free Replicated Data Type)を15分で説明してみる

Tursoによるアプローチ

CRDTと並列なものではありませんが、データベース層から同期に対する課題を解決しているのがTursoCloudと呼ばれるDBaasを活用する方法です。

Tursoの概要

ザッと説明しますが、TursoはSQLiteをベースとしたDBソリューションです。
現在はRustで書き直され「Turso」という名の新しいDBMSを謳っています。

何といっても料金体系が明瞭で良心的です。
執筆時点では「Free<Developer<Scaler<Pro」と4プランがあり、下から2番目のDeveloperプランは5ドルにもかかわらず、DB数が無制限に作成できます。

TursoのEmbeddedReplica機能

Tursoでは表題の機能で、マルチデバイス間のデータ同期を解決します。
スクリーンショット 2025-09-27 22.12.51.png

このようにユーザーごとにDBのレプリカをクラウドに同期します。
DBへのReadはローカルを利用しているのでもちろん早いですし、Writeはレプリカを同期するので、サーバーへの書き込みが必要ないということです。
SQLiteをベースとしておりDB数が無制限というのは、これを実現するためなんですね。

コードは以下のような感じです。

import { createClient } from "@libsql/client";

// 同期しないローカルデータ
// - デバイス内で複数のDBをもつことで同期しない選択も取れる
createClient({
  url: 'file:local-only.db'
});

// 同期対象のデータ
createClient({
  url: 'file:sync.db',
  syncUrl: `turso://user-${userId}.turso.io`,
  authToken: userToken,
  syncInterval: 60  // 同期間隔
});

ローカルファーストなアプリケーションを構築する上で、有力な選択肢となるでしょう。

ローカルファーストのコミュニティ

2024年から「Local-First Conf」が海外で開催されています。

YouTubeに発表のプレイリストがあるので見放題です。
すごい!


以上です!!!
最後までお付き合いいただき、ありがとうございました🎉

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?