goatdbは、モダンなアプリケーション向けに設計されたピアツーピアデータベースです。「ローカルファースト」という核心理念に基づき、データはまずローカルに保存され、その後デバイス間で自動的に同期されます。オフライン機能やマルチデバイス同期が必要なアプリケーションにとって、注目に値する選択肢です。

プロジェクト概要

属性内容
GitHubgoatplatform/goatdb
Stars563
言語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特徴
RxDB21k成熟したエコシステム、複数の同期プロトコル対応
WatermelonDB11kReact Nativeに最適、優れたパフォーマンス
PouchDB8.5kCouchDBエコシステム、歴史が長い
goatdb563新興のローカルファーストソリューション、シンプルなアーキテクチャ

適用シーン

goatdbの使用に適した場合:

  • オフラインファーストが必要なWebアプリケーション
  • マルチデバイスデータ同期を必要とする個人ツール
  • 複雑なバックエンドを維持したくない個人開発者
  • データプライバシーを重視するユーザー管理型アプリケーション

適さない場合:

  • 複雑な権限制御が必要なエンタープライズアプリケーション
  • データ量が極端に多いシーン(パフォーマンスベンチマーク未確立)
  • SQLクエリ機能が必要なアプリケーション

注意事項

  • プロジェクトは比較的新しい(2024年末作成)ため、APIに変更がある可能性があります
  • コミュニティ規模はまだ大きくなく、問題が発生した場合はソースコードを読む必要があるかもしれません
  • 本番環境での使用は、十分なテストを行った上で行ってください

まとめ

goatdbは、アプリケーションアーキテクチャの新しい方向性を示しています:データはユーザーに属し、アプリケーションはデータのビューに過ぎません。シンプルなアーキテクチャとユーザー体験を重視する開発者にとって、探索に値する選択肢です。

プロジェクトドキュメント:https://goatdb.dev


属性内容
リポジトリhttps://github.com/goatplatform/goatdb
ライセンスMIT
言語TypeScript
メンテナー@ofriw