goatdb:563⭐のローカルファーストP2Pデータベース、デバイス間同期を実現
goatdbは、モダンなアプリケーション向けに設計されたピアツーピアデータベースです。「ローカルファースト」という核心理念に基づき、データはまずローカルに保存され、その後デバイス間で自動的に同期されます。オフライン機能やマルチデバイス同期が必要なアプリケーションにとって、注目に値する選択肢です。
プロジェクト概要
| 属性 | 内容 |
|---|---|
| GitHub | goatplatform/goatdb |
| Stars | 563 |
| 言語 | TypeScript |
| 特徴 | ローカルファースト、P2P同期、クロスプラットフォーム |
| 最終更新 | 5日前 |
解決する問題
従来のアプリケーションデータアーキテクチャは通常以下のようになります:
- クライアントはサーバーに完全に依存し、ネットワークがないと使用できない
- データはリモートデータベースに保存され、マルチデバイス同期には複雑なバックエンド開発が必要
- ユーザーは自分のデータを直接コントロールできない
goatdbは異なるアプローチを提供します:
- ローカルファースト:データはまずユーザーデバイス上に存在し、アプリはいつでも使用可能
- 自動同期:デバイス間でP2P方式によりデータ変更を自動的に同期
- 分散化:中央サーバーは不要で、データはユーザー自身が管理
このモデルは、メモアプリ、タスク管理、コラボレーションツールなどのシーンに特に適しています。
コア機能
クロスプラットフォーム対応
goatdbは複数の環境で実行可能です:
- ブラウザ:ネイティブサポート、プラグイン不要
- Deno:サーバーサイドとエッジ環境
- Node.js:従来のバックエンドシーン
React統合
ビルトインのReact hooksにより、状態管理がシンプルになります:
import { useDoc, useDB } from 'goatdb';
function TodoList() {
const db = useDB();
const todo = useDoc('/todos/123');
const toggle = () => {
todo.update(doc => ({
...doc,
completed: !doc.completed
}));
};
return (
<div>
<input
type="checkbox"
checked={todo.data.completed}
onChange={toggle}
/>
{todo.data.text}
</div>
);
}
型安全性
TypeScriptベースの強力な型設計:
interface Todo {
text: string;
completed: boolean;
createdAt: number;
}
// 型安全なドキュメント操作
const todo = await db.get<Todo>('/todos/123');
競合解決
複数の競合解決戦略を内蔵:
- Last-Write-Wins:シンプルな上書き戦略
- CRDT:並行した変更を自動的にマージ
- カスタム:ビジネス要件に応じた特定のロジックを実装
クイックスタート
インストール
# Deno
deno add jsr:@goat/db
# npm
npm install @goat/db
基本的な使い方
import { GoatDB } from '@goat/db';
// データベースインスタンスの作成
const db = new GoatDB({
path: './my-app-data',
schema: {
todo: {
text: 'string',
completed: 'boolean'
}
}
});
// ドキュメント作成
const todo = await db.create('/todos', {
text: 'goatdbを学ぶ',
completed: false
});
// ドキュメント読み取り
const data = await db.get('/todos/' + todo.id);
// ドキュメント更新
await db.update('/todos/' + todo.id, {
completed: true
});
類似製品との比較
| ツール | Stars | 特徴 |
|---|---|---|
| RxDB | 21k | 成熟したエコシステム、複数の同期プロトコル対応 |
| WatermelonDB | 11k | React Nativeに最適、優れたパフォーマンス |
| PouchDB | 8.5k | CouchDBエコシステム、歴史が長い |
| goatdb | 563 | 新興のローカルファーストソリューション、シンプルなアーキテクチャ |
適用シーン
goatdbの使用に適した場合:
- オフラインファーストが必要なWebアプリケーション
- マルチデバイスデータ同期を必要とする個人ツール
- 複雑なバックエンドを維持したくない個人開発者
- データプライバシーを重視するユーザー管理型アプリケーション
適さない場合:
- 複雑な権限制御が必要なエンタープライズアプリケーション
- データ量が極端に多いシーン(パフォーマンスベンチマーク未確立)
- SQLクエリ機能が必要なアプリケーション
注意事項
- プロジェクトは比較的新しい(2024年末作成)ため、APIに変更がある可能性があります
- コミュニティ規模はまだ大きくなく、問題が発生した場合はソースコードを読む必要があるかもしれません
- 本番環境での使用は、十分なテストを行った上で行ってください
まとめ
goatdbは、アプリケーションアーキテクチャの新しい方向性を示しています:データはユーザーに属し、アプリケーションはデータのビューに過ぎません。シンプルなアーキテクチャとユーザー体験を重視する開発者にとって、探索に値する選択肢です。
プロジェクトドキュメント:https://goatdb.dev
| 属性 | 内容 |
|---|---|
| リポジトリ | https://github.com/goatplatform/goatdb |
| ライセンス | MIT |
| 言語 | TypeScript |
| メンテナー | @ofriw |